Ë
    êÿæiA  ã                   óŒ   — d dl mZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d„ Zd„ Z e
d	d
gd	gdœd¬«      d„ «       Zd„ Zd„ Zy)é    )ÚsuppressN)Úsparse)Úis_scalar_nan)Úvalidate_params)Ú_object_dtype_isnanc                 óÊ  — t        t        t        «      5  dd l}||j                  u r|j                  | «      cd d d «       S 	 d d d «       t        |«      r|| j                  j                  dk(  rt        j                  | «      }|S | j                  j                  dv r't        j                  | j                  t        ¬«      }|S t        | «      }|S | |k(  }|S # 1 sw Y   Œ—xY w)Nr   Úf)ÚiÚu©Údtype)r   ÚImportErrorÚAttributeErrorÚpandasÚNAÚisnar   r   ÚkindÚnpÚisnanÚzerosÚshapeÚboolr   )ÚXÚvalue_to_maskr   ÚXts       úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sklearn/utils/_mask.pyÚ_get_dense_maskr      sÂ   € Ü	”+œ~Õ	.ó 	à˜FŸI™IÑ%Ø—;‘;˜q“>÷ 
/Ñ	.ð
 &÷ 
/ô �]Ô#Ø�7‰7�<‰<˜3ÒÜ—‘˜!“ˆBð €Ið �W‰W�\‰\˜ZÑ'ä—‘˜!Ÿ'™'¬Ô.ˆBð €Iô	 % QÓ'ˆBð €Ið �-Ñˆà€I÷) 
/Ð	.ús   •#CÃC"c                 ój  — t        j                  | «      st        | |«      S t        | j                  |«      }| j                  dk(  rt         j
                  nt         j                  } ||| j                  j                  «       | j                  j                  «       f| j                  t        ¬«      }|S )aÏ  Compute the boolean mask X == value_to_mask.

    Parameters
    ----------
    X : {ndarray, sparse matrix} of shape (n_samples, n_features)
        Input data, where ``n_samples`` is the number of samples and
        ``n_features`` is the number of features.

    value_to_mask : {int, float}
        The value which is to be masked in X.

    Returns
    -------
    X_mask : {ndarray, sparse matrix} of shape (n_samples, n_features)
        Missing mask.
    Úcsr)r   r   )ÚspÚissparser   ÚdataÚformatÚ
csr_matrixÚ
csc_matrixÚindicesÚcopyÚindptrr   r   )r   r   r   Úsparse_constructorÚ	Xt_sparses        r   Ú	_get_maskr+   &   s‚   € ô" �;‰;�qŒ>ô ˜q -Ó0Ð0ä	˜Ÿ™ Ó	/€Bà*+¯(©(°eÒ*;œŸšÄÇÁÐÙ"Ø	ˆQ�Y‰Y�^‰^Ó˜qŸx™xŸ}™}›Ð/°q·w±wÄdô€Ið Ðó    z
array-likezsparse matrix)r   ÚmaskT)Úprefer_skip_nested_validationc                 óö   — t        j                  |«      }t        j                  |j                  t         j                  «      r|S t        | d«      r't        j                  |j                  d   «      }||   }|S )as  Return a mask which is safe to use on X.

    Parameters
    ----------
    X : {array-like, sparse matrix}
        Data on which to apply mask.

    mask : array-like
        Mask to be used on X.

    Returns
    -------
    mask : ndarray
        Array that is safe to use on X.

    Examples
    --------
    >>> from sklearn.utils import safe_mask
    >>> from scipy.sparse import csr_matrix
    >>> data = csr_matrix([[1], [2], [3], [4], [5]])
    >>> condition = [False, True, True, False, True]
    >>> mask = safe_mask(data, condition)
    >>> data[mask].toarray()
    array([[2],
           [3],
           [5]])
    Útoarrayr   )r   ÚasarrayÚ
issubdtyper   ÚsignedintegerÚhasattrÚaranger   )r   r-   Úinds      r   Ú	safe_maskr7   F   s^   € ôF �:‰:�dÓ€DÜ	‡}�}�T—Z‘Z¤×!1Ñ!1Ô2Øˆäˆq�)ÔÜ�i‰i˜Ÿ
™
 1™Ó&ˆØ�4‰yˆØ€Kr,   c                 ó|   — |dk7  r| t        | |«      dd…f   S t        j                  d| j                  d   f¬«      S )a’  Return a mask which is safer to use on X than safe_mask.

    This mask is safer than safe_mask since it returns an
    empty array, when a sparse matrix is sliced with a boolean mask
    with all False, instead of raising an unhelpful error in older
    versions of SciPy.

    See: https://github.com/scipy/scipy/issues/5361

    Also note that we can avoid doing the dot product by checking if
    the len_mask is not zero in _huber_loss_and_gradient but this
    is not going to be the bottleneck, since the number of outliers
    and non_outliers are typically non-zero and it makes the code
    tougher to follow.

    Parameters
    ----------
    X : {array-like, sparse matrix}
        Data on which to apply mask.

    mask : ndarray
        Mask to be used on X.

    len_mask : int
        The length of the mask.

    Returns
    -------
    mask : ndarray
        Array that is safe to use on X.
    r   Né   )r   )r7   r   r   r   )r   r-   Úlen_masks      r   Úaxis0_safe_slicer;   s   s>   € ð@ �1‚}Ø”˜1˜dÓ#¢QÐ&Ñ'Ð'Ü�8‰8˜1˜aŸg™g a™j˜/Ô*Ð*r,   c                 óŒ   — |t        j                  | «      k  rt        d«      ‚t        j                  |t        ¬«      }d|| <   |S )aY  Convert list of indices to boolean mask.

    Parameters
    ----------
    indices : list-like
        List of integers treated as indices.
    mask_length : int
        Length of boolean mask to be generated.
        This parameter must be greater than max(indices).

    Returns
    -------
    mask : 1d boolean nd-array
        Boolean array that is True where indices are present, else False.

    Examples
    --------
    >>> from sklearn.utils._mask import indices_to_mask
    >>> indices = [1, 2 , 3, 4]
    >>> indices_to_mask(indices, 5)
    array([False,  True,  True,  True,  True])
    z-mask_length must be greater than max(indices)r   T)r   ÚmaxÚ
ValueErrorr   r   )r&   Úmask_lengthr-   s      r   Úindices_to_maskr@   ˜   s>   € ð. ”b—f‘f˜W“oÒ%ÜÐHÓIÐIä�8‰8�K¤tÔ,€DØ€Dˆ�Mà€Kr,   )Ú
contextlibr   Únumpyr   Úscipyr   r    Úsklearn.utils._missingr   Úsklearn.utils._param_validationr   Úsklearn.utils.fixesr   r   r+   r7   r;   r@   © r,   r   Ú<module>rH      s`   ðõ  ã Ý å 0Ý ;Ý 3òò0ñ@ à˜OÐ,Ø�ñð #'ôñ#óð#òL"+óJr,   