
    -i                         S SK Jr  S SKrS SKJr  SSKJr  SSK	J
r
  SSKJr  S rS	 r\
" S
S/S
/S.SS9S 5       rS rS rg)    )suppressN)sparse   )is_scalar_nan)validate_params)_object_dtype_isnanc                    [        [        [        5         SS KnXR                  L a  UR                  U 5      sS S S 5        $  S S S 5        [        U5      (       a  U R                  R                  S:X  a  [        R                  " U 5      nU$ U R                  R                  S;   a%  [        R                  " U R                  [        S9nU$ [        U 5      n U$ X:H  nU$ ! , (       d  f       N= f)Nr   f)iudtype)r   ImportErrorAttributeErrorpandasNAisnar   r   kindnpisnanzerosshapeboolr   )Xvalue_to_maskr   Xts       F/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/_mask.py_get_dense_maskr      s    	+~	. 	II%;;q> 
/	.
 & 
/ ]##77<<3!B I WW\\Z'!''.B I	 %Q'B I I) 
/	.s   #C  
C.c                 n   [         R                  " U 5      (       d  [        X5      $ [        U R                  U5      nU R                  S:X  a  [         R
                  O[         R                  nU" X R                  R                  5       U R                  R                  5       4U R                  [        S9nU$ )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*;"	YY^^qxx}}/qwwdI     z
array-likezsparse matrix)r   maskT)prefer_skip_nested_validationc                    [         R                  " U5      n[         R                  " UR                  [         R                  5      (       a  U$ [        U S5      (       a'  [         R                  " UR                  S   5      nX!   nU$ )a  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_maskr8   F   sb    F ::dD	}}TZZ!1!122q)ii

1&yKr-   c                 x    US:w  a  U [        X5      SS24   $ [        R                  " SU R                  S   4S9$ )a6  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   Nr   )r   )r8   r   r   r   )r   r.   len_masks      r   axis0_safe_slicer;   s   s<    @ 1}1#Q&''881aggaj/**r-   c                     U[         R                  " U 5      ::  a  [        S5      e[         R                  " U[        S9nSX '   U$ )a  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<    . bffWo%HII88Kt,DDMKr-   )
contextlibr   numpyr   scipyr   r!   _missingr   _param_validationr   fixesr   r   r,   r8   r;   r@    r-   r   <module>rH      s`        # . &0@ O, #'##L"+Jr-   