§
    ¨éUg}  ã                   óJ   — 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dS )z
Common code for all metrics.

é    )ÚcombinationsNé   )Úcheck_arrayÚcheck_consistent_length)Útype_of_targetc           	      ó6  — d}||vr"t          d                     |¦  «        ¦  «        ‚t          |¦  «        }|dvr"t          d                     |¦  «        ¦  «        ‚|dk    r | |||¬¦  «        S t          |||¦  «         t	          |¦  «        }t	          |¦  «        }d}|}d}	|d	k    rK|� t          j        ||j        d         ¦  «        }|                     ¦   «         }|                     ¦   «         }n‘|d
k    r|�=t          j	        t          j
        |t          j        |d¦  «        ¦  «        d¬¦  «        }	nt          j	        |d¬¦  «        }	t          j        |	 	                    ¦   «         d¦  «        rdS n|dk    r|}	d}d}|j        dk    r|                     d¦  «        }|j        dk    r|                     d¦  «        }|j        |         }
t          j        |
f¦  «        }t          |
¦  «        D ]g}|                     |g|¬¦  «                             ¦   «         }|                     |g|¬¦  «                             ¦   «         } | |||¬¦  «        ||<   Œh|�5|	�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                  úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/metrics/_base.pyÚ_average_binary_scorer2      sÍ  € ðV F€OØ�oÐ%Ð%ÝÐ7×>Ò>¸ÑOÔOÑPÔPÐPå˜FÑ#Ô#€FØÐ7Ð7Ð7ÝÐ6×=Ò=¸fÑEÔEÑFÔFÐFà�ÒÐØˆ}˜V W¸MÐJÑJÔJÐJå˜F G¨]Ñ;Ô;Ð;Ý˜Ñ Ô €FÝ˜'Ñ"Ô"€GàÐØ €LØ€Nà�'ÒÐØÐ#Ýœ9 \°6´<À´?ÑCÔCˆLØ—’‘”ˆØ—-’-‘/”/ˆˆà	�JÒ	Ð	ØÐ#ÝœVÝ”˜F¥B¤J¨|¸WÑ$EÔ$EÑFÔFÈQðñ ô ˆNˆNõ  œV F°Ð3Ñ3Ô3ˆNÝŒ:�n×(Ò(Ñ*Ô*¨CÑ0Ô0ð 	Ø�1ð	ð 
�IÒ	Ð	à%ˆØˆØÐà„{�aÒÐØ—’ Ñ(Ô(ˆà„|�qÒÐØ—/’/ 'Ñ*Ô*ˆà”Ð.Ô/€IÝŒH�i�\Ñ"Ô"€EÝ�9ÑÔð Rð RˆØ—;’; ˜sÐ)9�;Ñ:Ô:×@Ò@ÑBÔBˆØ—L’L ! Ð+;�LÑ<Ô<×BÒBÑDÔDˆ	Ø �= ¨9ÀLÐQÑQÔQˆˆa‰ˆð ÐØÐ%õ  œZ¨Ñ7Ô7ˆNØ)*ˆE�. AÒ%Ñ&ÝŒz˜%¨Ð8Ñ8Ô8Ð8àˆó    r
   c                 óP  — t          ||¦  «         t          j        |¦  «        }|j        d         }||dz
  z  dz  }t          j        |¦  «        }|dk    }|rt          j        |¦  «        nd}	t          t          |d¦  «        ¦  «        D ]…\  }
\  }}||k    }||k    }t          j        ||¦  «        }|rt          j        |¦  «        |	|
<   ||         }||         } | ||||f         ¦  «        } | ||||f         ¦  «        }||z   dz  ||
<   Œ†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   …   sO  € õP ˜F GÑ,Ô,Ð,å”I˜fÑ%Ô%€MØÔ# AÔ&€IØ˜9 q™=Ñ)¨QÑ.€GÝ”(˜7Ñ#Ô#€Kà˜ZÒ'€KØ&1Ð;•”˜'Ñ"Ô"Ð"°t€Jõ  ¥¨]¸AÑ >Ô >Ñ?Ô?ð <ð <‰
ˆ‰FˆQ�Ø˜1’ˆØ˜1’ˆÝ”- ¨Ñ/Ô/ˆàð 	1ÝœZ¨Ñ0Ô0ˆJ�r‰Nà˜”ˆØ˜”ˆà$�} V¨W°W¸a°ZÔ-@ÑAÔAˆØ$�} V¨W°W¸a°ZÔ-@ÑAÔAˆØ'¨,Ñ6¸!Ñ;ˆ�B‰ˆåŒ:�k¨:Ð6Ñ6Ô6Ð6r3   )N)r
   )Ú__doc__Ú	itertoolsr   Únumpyr   Úutilsr   r   Úutils.multiclassr   r2   rH   © r3   r1   ú<module>rO      s–   ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø -Ð -Ð -Ð -Ð -Ð -ðjð jð jð jðZC7ð C7ð C7ð C7ð C7ð C7r3   