
    -iK                     L    S r SSKJr  SSKrSSKJrJr  SSKJ	r	  S	S jr
S
S jrg)z
Common code for all metrics.

    )combinationsN   )check_arraycheck_consistent_length)type_of_targetc           	         SnX5;  a  [        SR                  U5      5      e[        U5      nUS;  a  [        SR                  U5      5      eUS:X  a  U " XUS9$ [        XU5        [	        U5      n[	        U5      nSnUnSn	US	:X  aG  Ub#  [
        R                  " XR                  S   5      nUR                  5       nUR                  5       nOUS
:X  a  Ub@  [
        R                  " [
        R                  " U[
        R                  " US5      5      SS9n	O[
        R                  " USS9n	[
        R                  " U	R                  5       S5      (       a  gOUS:X  a  Un	SnSnUR                  S:X  a  UR                  S5      nUR                  S:X  a  UR                  S5      nUR                  U   n
[
        R                  " U
45      n[        U
5       HJ  nUR!                  U/US9R                  5       nUR!                  U/US9R                  5       nU " XUS9X'   ML     Ub=  U	b  [
        R"                  " U	5      n	SXS:H  '   [%        [
        R&                  " XS95      $ U$ )a  Average a binary metric for multilabel classification.

Parameters
----------
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, confidence values, or binary decisions.

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.

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

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   )r   r   )axisg        r   weights)
ValueErrorformatr   r   r   nprepeatshaperavelsummultiplyreshapeisclosendimzerosrangetakeasarrayfloataverage)binary_metricy_truey_scorer$   r   average_optionsy_typenot_average_axisscore_weightaverage_weight	n_classesscorecy_true_c	y_score_cs                  H/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/_base.py_average_binary_scorer3      sD   V FO%7>>OPPF#F776==fEFFVMJJF]; F'"G LN'#99\<<?CL--/	J	#VVFBJJ|W$EFQN  VVF3N::n((*C00 1 
I	%{{a(||q//'*./IHHi\"E9;;s)9;:@@BLL!+;L<BBD	 LQ  %  ZZ7N)*EA%&RZZ>??    c                 &   [        X5        [        R                  " U5      nUR                  S   nXUS-
  -  S-  n[        R                  " U5      nUS:H  nU(       a  [        R                  " U5      OSn	[        [        US5      5       Hq  u  n
u  pX:H  nX:H  n[        R                  " X5      nU(       a  [        R                  " U5      X'   X   nX   nU " UX/U4   5      nU " UX/U4   5      nUU-   S-  Xz'   Ms     [        R                  " XyS9$ )a  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   r   Nr   )	r   r   uniquer   empty	enumerater   
logical_orr$   )r%   r&   r'   r$   y_true_uniquer-   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                       r2   _average_multiclass_ovo_scorerI   ~   s
   P F,IIf%M##A&Iq=)Q.G((7#KZ'K&1'"tJ  ]A >?
FQ--/ZZ0JN$VWaZ-@A$VWaZ-@A',6!; @ ::k66r4   )N)r
   )__doc__	itertoolsr   numpyr   utilsr   r   utils.multiclassr   r3   rI    r4   r2   <module>rP      s%    #  8 -jZC7r4   