Ë
    ÷Q(hD  ã                   óH   — d Z ddlmZ ddlZddl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)Útype_of_targetc           	      óº  — d}||vrt        dj                  |«      «      ‚t        |«      }|dvrt        dj                  |«      «      ‚|dk(  r | |||¬«      S t        |||«       t	        |«      }t	        |«      }d}|}d}	|d	k(  rF|�#t        j                  ||j                  d   «      }|j                  «       }|j                  «       }nŽ|d
k(  r~|�@t        j                  t        j                  |t        j                  |d«      «      d¬«      }	nt        j                  |d¬«      }	t        j                  |	j                  «       d«      ry|dk(  r|}	d}d}|j                  dk(  r|j                  d«      }|j                  dk(  r|j                  d«      }|j                  |   }
t        j                  |
f«      }t        |
«      D ]T  }|j!                  |g|¬«      j                  «       }|j!                  |g|¬«      j                  «       } | |||¬«      ||<   ŒV |�6|	�t        j"                  |	«      }	d||	dk(  <   t        j$                  ||	¬«      S |S )aM  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Ú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                  úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/_base.pyÚ_average_binary_scorer2      sL  € ðV F€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Ò	ØÐ#ÜŸV™VÜ—‘˜F¤B§J¡J¨|¸WÓ$EÓFÈQô‰Nô  ŸV™V F°Ô3ˆNÜ�:‰:�n×(Ñ(Ó*¨CÔ0Øà	�IÒ	à%ˆØˆØÐà‡{�{�aÒØ—‘ Ó(ˆà‡|�|�qÒØ—/‘/ 'Ó*ˆà—‘Ð.Ñ/€IÜ�H‰H�i�\Ó"€EÜ�9Óò RˆØ—;‘; ˜sÐ)9�;Ó:×@Ñ@ÓBˆØ—L‘L ! Ð+;�LÓ<×BÑBÓDˆ	Ù  ¨9ÀLÔQˆˆaŠðRð ÐØÐ%ô  ŸZ™Z¨Ó7ˆNØ)*ˆE�. AÑ%Ñ&Ü�z‰z˜%¨Ô8Ð8àˆó    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   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                       r1   Ú_average_multiclass_ovo_scorerH   ~   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Ð6r3   )N)r
   )Ú__doc__Ú	itertoolsr   Únumpyr   Úutilsr   r   Úutils.multiclassr   r2   rH   © r3   r1   ú<module>rO      s%   ðñõ #ã ç 8Ý -ójôZC7r3   