
    -i5                         S SK rS SKJr  SSKJrJr  SSKJrJ	r	  S/r
S rS rS	 r\" \/\/\\" S
15      /S.SS9S
S.S j5       rg)    N)linear_sum_assignment   )
StrOptionsvalidate_params)check_arraycheck_consistent_lengthconsensus_scorec                 d    [        U 6   [        U6   S n[        X 5      u  p4[        X!5      u  pVX4XV4$ )z9Unpacks the row and column arrays and checks their shape.c                     [        U SS9$ )NF)	ensure_2d)r   )xs    U/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/cluster/_bicluster.py<lambda>)_check_rows_and_columns.<locals>.<lambda>   s    {16    )r   map)abchecksa_rowsa_colsb_rowsb_colss          r   _check_rows_and_columnsr      s8    QQ6F^NF^NF6))r   c                     X-  R                  5       X-  R                  5       -  nU R                  5       UR                  5       -  nUR                  5       UR                  5       -  nXEU-   U-
  -  $ )z:Jaccard coefficient on the elements of the two biclusters.)sum)r   r   r   r   intersectiona_sizeb_sizes          r   _jaccardr       s`    O((*fo-B-B-DDLZZ\FJJL(FZZ\FJJL(FF?\9::r   c                 ,   [        X5      u  p4pVUR                  S   nUR                  S   n[        R                  " [	        U5       V	V
s/ s H/  n	[	        U5       V
s/ s H  o" X9   XI   XZ   Xj   5      PM     sn
PM1     sn
n	5      nU$ s  sn
f s  sn
n	f )zwComputes pairwise similarity matrix.

result[i, j] is the Jaccard coefficient of a's bicluster i and b's
bicluster j.

r   )r   shapenparrayrange)r   r   
similarityr   r   r   r   n_an_bijresults               r   _pairwise_similarityr,   !   s     &=Q%B"FF
,,q/C
,,q/CXX 3Z	
 NSSVZXZZ	69fiCZX	
F M	 Y	
s   B
B:B
B
jaccard)r   r   r&   T)prefer_skip_nested_validation)r&   c                    US:X  a  [         n[        XU5      n[        SU-
  5      u  pE[        U S   5      n[        US   5      n[	        X4U4   R                  5       [        Xg5      -  5      $ )a  The similarity of two sets of biclusters.

Similarity between individual biclusters is computed. Then the best
matching between sets is found by solving a linear sum assignment problem,
using a modified Jonker-Volgenant algorithm.
The final score is the sum of similarities divided by the size of
the larger set.

Read more in the :ref:`User Guide <biclustering>`.

Parameters
----------
a : tuple (rows, columns)
    Tuple of row and column indicators for a set of biclusters.

b : tuple (rows, columns)
    Another set of biclusters like ``a``.

similarity : 'jaccard' or callable, default='jaccard'
    May be the string "jaccard" to use the Jaccard coefficient, or
    any function that takes four arguments, each of which is a 1d
    indicator vector: (a_rows, a_columns, b_rows, b_columns).

Returns
-------
consensus_score : float
   Consensus score, a non-negative value, sum of similarities
   divided by size of larger set.

See Also
--------
scipy.optimize.linear_sum_assignment : Solve the linear sum assignment problem.

References
----------
* Hochreiter, Bodenhofer, et. al., 2010. `FABIA: factor analysis
  for bicluster acquisition
  <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/>`__.

Examples
--------
>>> from sklearn.metrics import consensus_score
>>> a = ([[True, False], [False, True]], [[False, True], [True, False]])
>>> b = ([[False, True], [True, False]], [[True, False], [False, True]])
>>> consensus_score(a, b, similarity='jaccard')
1.0
r-   g      ?r   )r    r,   r   lenfloatr   max)r   r   r&   matrixrow_indicescol_indicesr'   r(   s           r   r	   r	   4   sn    p Y
!!
3F4S6\BK
ad)C
ad)C[01557#c-GHHr   )numpyr#   scipy.optimizer   utils._param_validationr   r   utils.validationr   r   __all__r   r    r,   tuplecallabler	    r   r   <module>r>      sm     0 B D
*;& WWYK!89
 #' )2 6I6Ir   