Ë
    ÜÍ:j³  ã                   ón   — d Z ddlmZ ddlZddlmc mZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ d	d„Zd
d„Zy)z
Common code for all metrics.

é    )ÚcombinationsN)Úcheck_arrayÚcheck_consistent_length)Ú_averageÚ_ravelÚget_namespace_and_device)Útype_of_targetc           
      ó  — t        ||«      \  }}}d}||vrt        dj                  |«      «      ‚t        |«      }	|	dvrt        dj                  |	«      «      ‚|	dk(  r | |||¬«      S t	        |||«       t        |«      }t        |«      }d}
|}d}|d	k(  r8|�|j                  ||j                  d   «      }t        |«      }t        |«      }n¸|d
k(  r¨|�Q|j                  ||j                  ¬«      }|j                  |j                  ||j                  |d«      «      d¬«      }n|j                  |d¬«      }t        j                  |j                  |«      |j                  d|j                  |¬«      «      ry|dk(  r|}d}d}
|j                   dk(  r|j                  |d«      }|j                   dk(  r|j                  |d«      }|j                  |
   }|j#                  |f|¬«      }t%        |«      D ]n  }t        |j'                  ||j                  |g|¬«      |
¬«      «      }t        |j'                  ||j                  |g|¬«      |
¬«      «      } | |||¬«      ||<   Œp |�!|�d||dk(  <   t)        t+        |||¬«      «      S |S )a�  Average a binary metric for multilabel classification.

    Parameters
    ----------
    binary_metric : callable, returns shape [n_classes]
        The binary metric function to use.

    y_true : array, shape = [n_samples] or [n_samples, n_classes]
        True binary labels in binary label indicators.

    y_score : array, shape = [n_samples] or [n_samples, n_classes]
        Target scores, can either be probability estimates of the positive
        class or non-thresholded decision values (as returned by
        :term:`decision_function` on some classifiers).

    average : {None, 'micro', 'macro', 'samples', 'weighted'}, default='macro'
        If ``None``, the scores for each class are returned. Otherwise,
        this determines the type of averaging performed on the data:

        ``'micro'``:
            Calculate metrics globally by considering each element of the label
            indicator matrix as a label.
        ``'macro'``:
            Calculate metrics for each label, and find their unweighted
            mean.  This does not take label imbalance into account.
        ``'weighted'``:
            Calculate metrics for each label, and find their average, weighted
            by support (the number of true instances for each label).
        ``'samples'``:
            Calculate metrics for each instance, and find their average.

        Will be ignored when ``y_true`` is binary.

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

    Returns
    -------
    score : float or array of shape [n_classes]
        If not ``None``, average the score, else return the score for each
        classes.

    )NÚmicroÚmacroÚweightedÚsampleszaverage has to be one of {0})Úbinaryzmultilabel-indicatorz{0} format is not supportedr   )Úsample_weighté   Nr   r   )Údtype)éÿÿÿÿr   r   )Úaxis)r   Údevicer   )r   )ÚweightsÚxp)r   Ú
ValueErrorÚformatr	   r   r   ÚrepeatÚshaper   Úasarrayr   ÚsumÚmultiplyÚreshapeÚxpxÚiscloseÚndimÚzerosÚrangeÚtakeÚfloatr   )Úbinary_metricÚy_trueÚy_scoreÚaverager   r   Ú_Ú_deviceÚaverage_optionsÚy_typeÚnot_average_axisÚscore_weightÚaverage_weightÚ	n_classesÚscoreÚcÚy_true_cÚ	y_score_cs                     új/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/sklearn/metrics/_base.pyÚ_average_binary_scorer8      s°  € ôX .¨g°}ÓE�N€Bˆˆ7ØE€OØ�oÑ%ÜÐ7×>Ñ>¸ÓOÓPÐPä˜FÓ#€FØÐ7Ñ7ÜÐ6×=Ñ=¸fÓEÓFÐFà�ÒÙ˜V W¸MÔJÐJä˜F G¨]Ô;Ü˜Ó €FÜ˜'Ó"€GàÐØ €LØ€Nà�'ÒØÐ#ØŸ9™9 \°6·<±<À±?ÓCˆLÜ˜“ˆÜ˜“/‰à	�JÒ	ØÐ#à—Z‘Z ¨l×.@Ñ.@�ZÓAˆFØŸV™VØ—‘˜F B§J¡J¨|¸WÓ$EÓFÈQð $ó ‰Nð  ŸV™V F°˜VÓ3ˆNÜ�;‰;Ø�F‰F�>Ó"Ø�J‰J�q × 4Ñ 4¸WˆJÓEô
ð à	�IÒ	à%ˆØˆØÐà‡{�{�aÒØ—‘˜F GÓ,ˆà‡|�|�qÒØ—*‘*˜W gÓ.ˆà—‘Ð.Ñ/€IØ�H‰H�i�\¨'ˆHÓ2€EÜ�9Óò RˆÜØ�G‰G�F˜BŸJ™J¨ s°7˜JÓ;ÐBRˆGÓSó
ˆô Ø�G‰G�G˜RŸZ™Z¨¨°G˜ZÓ<ÐCSˆGÓTó
ˆ	ñ ! ¨9ÀLÔQˆˆaŠðRð ÐØÐ%ð *+ˆE�. AÑ%Ñ&Ü”X˜e¨^ÀÔCÓDÐDàˆó    c                 ó"  — t        ||«       t        j                  |«      }|j                  d   }||dz
  z  dz  }t        j                  |«      }|dk(  }|rt        j                  |«      nd}	t        t        |d«      «      D ]s  \  }
\  }}||k(  }||k(  }t        j                  ||«      }|rt        j                  |«      |	|
<   ||   }||   } | ||||f   «      } | ||||f   «      }||z   dz  ||
<   Œu t        j                  ||	¬«      S )aL  Average one-versus-one scores for multiclass classification.

    Uses the binary metric for one-vs-one multiclass classification,
    where the score is computed according to the Hand & Till (2001) algorithm.

    Parameters
    ----------
    binary_metric : callable
        The binary metric function to use that accepts the following as input:
            y_true_target : array, shape = [n_samples_target]
                Some sub-array of y_true for a pair of classes designated
                positive and negative in the one-vs-one scheme.
            y_score_target : array, shape = [n_samples_target]
                Scores corresponding to the probability estimates
                of a sample belonging to the designated positive class label

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

    y_score : array-like of shape (n_samples, n_classes)
        Target scores corresponding to probability estimates of a sample
        belonging to a particular class.

    average : {'macro', 'weighted'}, default='macro'
        Determines the type of averaging performed on the pairwise binary
        metric scores:
        ``'macro'``:
            Calculate metrics for each label, and find their unweighted
            mean. This does not take label imbalance into account. Classes
            are assumed to be uniformly distributed.
        ``'weighted'``:
            Calculate metrics for each label, taking into account the
            prevalence of the classes.

    Returns
    -------
    score : float
        Average of the pairwise binary metric scores.
    r   r   é   r   N)r   )	r   ÚnpÚuniquer   ÚemptyÚ	enumerater   Ú
logical_orr*   )r'   r(   r)   r*   Úy_true_uniquer2   Ún_pairsÚpair_scoresÚis_weightedÚ
prevalenceÚixÚaÚbÚa_maskÚb_maskÚab_maskÚa_trueÚb_trueÚa_true_scoreÚb_true_scores                       r7   Ú_average_multiclass_ovo_scorerP   Ž   s(  € ôP ˜F GÔ,ä—I‘I˜fÓ%€MØ×#Ñ# AÑ&€IØ˜9 q™=Ñ)¨QÑ.€GÜ—(‘(˜7Ó#€Kà˜ZÑ'€KÙ&1”—‘˜'Ô"°t€Jô  ¤¨]¸AÓ >Ó?ò <‰
ˆ‰FˆQ�Ø˜1‘ˆØ˜1‘ˆÜ—-‘- ¨Ó/ˆáÜŸZ™Z¨Ó0ˆJ�r‰Nà˜‘ˆØ˜‘ˆá$ V¨W°W¸a°ZÑ-@ÓAˆÙ$ V¨W°W¸a°ZÑ-@ÓAˆØ'¨,Ñ6¸!Ñ;ˆ�BŠð<ô �:‰:�k¨:Ô6Ð6r9   )N)r   )Ú__doc__Ú	itertoolsr   Únumpyr<   Ú!sklearn.externals.array_api_extraÚ	externalsÚarray_api_extrar    Úsklearn.utilsr   r   Úsklearn.utils._array_apir   r   r   Úsklearn.utils.multiclassr	   r8   rP   © r9   r7   ú<module>r[      s7   ðñõ #ã ç /Ð /ß >÷ñ õ
 4ótônC7r9   