o
    ?Hh                  
   @   s  d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ej./de(e) e* e, dd Z0dd Z1dd Z2ej./dej3ej4ej5ej6fdd Z7ej./dej3ej4ej5ej6fdd Z8ej./dddd Z9ej./dg ddd Z:ej./dej5ej6fej./de*d d! Z;d"d# Z<d$d% Z=d&d' Z>d(d) Z?ej./de+e, d*d+ Z@d,d- ZAej./d.d/d0gd1d2 ZBd3d4 ZCd5d6 ZDej./d7g d8ej./d9g d8ej./dg d:ej./d;eEd<d=d> ZFd?d@ ZGej./dAejHg dBej3dCejHdDd<gej4dCgeIej4fejHg dBej3dCejHdDd<gej6dCgeIej6fejHg dBej3dCejHdEdFgeJdCgeIeJfgdGdH ZKeL dIdJ ZMej./dej5ej6gdKdL ZNej./dMg dNej./dOg dPej./dQg dRdSdT ZOej./dej5ej6gdUdV ZPdWdX ZQdYdZ ZRed[d\ ZSd]d^ ZTd_d` ZUdadb ZVdcdd ZWej.j/deejHge*dfgdgdh e*D  diej.j/djejHge*dfgdkdh e*D  didldm ZXej./de*dndo ZYej.j/dpejHge*dfgdqdh e*D  didrds ZZej./dtdudvgdwdx Z[dydz Z\dS ){    N)linalgsparse)eigh)eigsh)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)assert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalskip_if_32bit)_approximate_mode_deterministic_vector_sign_flip_incremental_mean_and_var_randomized_eigsh_safe_accumulator_op	cartesiandensityrandomized_svd	row_normssafe_sparse_dotsoftmaxstable_cumsumsvd_flipweighted_mode)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS_modesparse_containerc                 C   sF   t jd}|jddd}d|d< d|d< t| |t|ks!J d S )Nr   
   r%      size)      )r'      )nprandomRandomStaterandintr   )r$   rngX r3   `/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_extmath.pytest_density/   s
   r5   c                  C   sh   t jd} | jddd}t |j}dD ]}t||\}}t|||d\}}t|| t|| qd S )Nr   r%   r&   r(   )Nr   r*   axis)	r-   r.   r/   r0   onesshaper#   r   r   )r1   xweightsr7   modescoremode2score2r3   r3   r4   test_uniform_weights<   s   
r@   c                  C   s   d} t jd}|j| dd}||j}| |d d d df< |d d d df  d7  < t||dd\}}t||  t|	 |d d d df 
d d S )N   r   d   r%   r(   r'   r*   r6   )r-   r.   r/   r0   random_sampler9   r   r   r   ravelsum)mode_resultr1   r:   wr<   r=   r3   r3   r4   test_random_weightsJ   s   
(rI   dtypec              	   C   s`  d}d}d}d}| t jkrdnd}t | } t|||dddj| d	d
}|j||fks-J tj|d	d\}}}	|j| d	d
}|j| d	d
}|	j| d	d
}	dD ]}
t|||
dd\}}}| j	dkrv|j| ksgJ |j| ksnJ |j| ksuJ n|jt j
ks~J |jt j
ksJ |jt j
ksJ |j||fksJ |j|fksJ |j||fksJ t|d | ||d tt |d d d |f |	d |d d f t |||d tD ]X}||}t|||
dd\}}}| j	dkr|j| ksJ |j| ksJ |j| ksJ n|jj	dksJ |jj	dksJ |jj	dksJ t|d | |d | |d qqNd S )NrC     r'   r%              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrS   fdecimal)r-   float32rJ   r   astyper9   r   svdr   kindfloat64r   dotr    )rJ   rO   rP   rankkr_   r2   UsVt
normalizerUasaVacsr_containerr3   r3   r4   'test_randomized_svd_low_rank_all_dtypes\   sj   

6 rp   c                 C   s   t jd}t t jg d| d}t j|j|jdd }|| |j	 }t
|ddd\}}|jd	ks6J t|d
dg |jdksDJ tt t
|ddd W d   dS 1 s\w   Y  dS )z@Test that `_randomized_eigsh` returns the appropriate components*   )      ?       rM         @rJ   r(   r   r+   module)n_components	selection)r+   rt   rs   )   r+   valueN)r-   r.   r/   diagarrayr   qrnormalr9   Tr   r   pytestraisesNotImplementedError)rJ   r1   r2   rand_roteigvalseigvecsr3   r3   r4   test_randomized_eigsh   s   "r   rg   )r%   2   rC         c              	   C   s  d}t |dd}t|| dddd\}}t|| dddddd	\}}t|||  |d
 fd\}}| ddd }	||	 }|dd|	f }|j| fksKJ t||dd t||dd |j|| fksbJ t|j}
t	||
\}}t	||
\}}t	||
\}}t||dd t||dd | |k rt
|dd}t|| ddd|d\}}| ddd }	||	 }t||dd |dd|	f }t	||
\}}t||dd dS dS )a&  Check that `_randomized_eigsh` is similar to other `eigsh`

    Tests that for a random PSD matrix, `_randomized_eigsh` provides results
    comparable to LAPACK (scipy.linalg.eigh) and ARPACK
    (scipy.sparse.linalg.eigsh).

    Note: some versions of ARPACK do not support k=n_features.
    r   r   )rS   rv      )rw   rx   n_iterrS      rZ   )rw   r   n_oversamplesrS   r\   rx   r*   )subset_by_indexNrA   r^   ry   LA)whichtolmaxiterv0r%      )r   r   r   argsortr9   r   r-   
zeros_liker   r   r	   r   )rg   rP   r2   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpackr3   r3   r4   (test_randomized_eigsh_compared_to_others   sT   




r   zn,rank))r%   rL   rB   )rC   P   )rK   r%   )rK      )rK   i  c                 C   s   || k sJ t jd}|| |}||j }t|||d\}}tt jj|ddt 	|j
 t|j| t t 	|j
 |t | |j }t||dd dS )a  Check that randomized_eigsh is able to reconstruct a low rank psd matrix

    Tests that the decomposition provided by `_randomized_eigsh` leads to
    orthonormal eigenvectors, and that a low rank PSD matrix can be effectively
    reconstructed with good accuracy using it.
    E   )rw   rS   r   r6   rA   r^   N)r-   r.   r/   randnr   r   r   r   normr8   r9   r{   )nrf   r1   r2   ASVA_reconstructr3   r3   r4   &test_randomized_eigsh_reconst_low_rank  s   
r   ro   c                 C   s
  t jddd}| t ju rd}nd}|j| dd}|d jdd	}t|t|d
d| tt 	|t|| t j
t jfD ]D}||| d}|t ju r]|jj|dd|_|jj|dd|_|jj|kseJ |jj|ksmJ t|t|d
d| tt 	|t|| q>d S )Nrq   rC   ry   r'   FrT   r+   r*   r6   T)squaredru   )r-   r.   r/   r   r`   ra   rF   r   r   sqrtint32int64indptrr   rJ   )rJ   ro   r2   	precisionsq_normcsr_index_dtypeXcsrr3   r3   r4   test_row_norms0  s$   

r   c            
      C   s   d} d}d}d}t | ||ddd}|j| |fksJ tj|dd	\}}}d
D ]5}t||d|dd\}}}t|d | |  dksEJ t|||dd\}}	}t|d | |	dd q&d S )NrC   rK   r'   r%   皙?r   rN   FrV   rX   nonerY   rZ   r   r\   rS   g{Gz?r[   r,   r^   	r   r9   r   rb   r   r-   absmaxr   
rO   rP   rf   rg   r2   r   ri   rk   rm   sapr3   r3   r4   'test_randomized_svd_low_rank_with_noiseL  s.   
"r   c            
      C   s   d} d}d}d}t | ||ddd}|j| |fksJ tj|dd	\}}}d
D ]6}t||d|dd\}}}t|d | |  dksEJ t||d|dd\}}	}t|d | |	dd q&d S )NrC   rK   r'   r%   rr   r   rN   FrV   r   r   r   r,   r^   r   r   r3   r3   r4   !test_randomized_svd_infinite_ranku  s.   
"
r   c               	   C   s\  d} d}d}d}t | ||ddd}|j| |fksJ t||dd	dd
\}}}t||dddd
\}}	}
t||dddd
\}}}tj|d	d\}}}t||d | dd t|	|d | dd t||d | dd tt||t|d d d |f |d |d d f dd tt||
t|d d d |f |d |d d f dd t|	| d S )NrC   rK   ry   r%   g      ?r   rN   r,   F)r   	transposerS   TrX   rV   r^   r+   )r   r9   r   r   rb   r   r-   re   )rO   rP   rf   rg   r2   U1s1V1U2s2V2U3s3V3U4s4V4r3   r3   r4   )test_randomized_svd_transpose_consistency  s,   >>r   c               	   C   s~  t jd} tddd| d}|d| jdd|jd	 7 }d}t||dd
dd\}}}||t || }t	j
|dd}t||dd
dd\}}}||t || }t	j
|dd}t || dkshJ dD ]R}	t||d|	dd\}}}||t || }t	j
|dd}dD ]-}
t|||
|	dd\}}}||t || }t	j
|dd}dt || ksJ qqjd S )Nrq   rC   rK   r   rQ   rS   r,   r   r+   r(   r   r   fro)ordr   )rY   rZ   rX   )r'   r%   r      )r-   r.   r/   r   r0   r9   r   re   r{   r   r   r   )r1   r2   rw   rh   ri   rj   r   error_2error_20rk   ierrorr3   r3   r4   .test_randomized_svd_power_iteration_normalizer  sL   

r   c                 C   sz   t jd}tddd|d}d}| |}d| j}tjtj	|d t
||d	d
d W d    d S 1 s6w   Y  d S )Nrq   r   r   r%   r   r'   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr*   r   )r   r\   )r-   r.   r/   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r$   r1   r2   rw   warn_msgr3   r3   r4   #test_randomized_svd_sparse_warnings  s   "r   c                  C   s  t jd} d}d}| ||}tj|dd\}}}t||dd\}}tt || ||dd |j	}	tj|	dd\}}}t||d	d\}
}tt |
| ||	dd t||d	d\}}tt || ||	dd t||dd\}}tt || ||	dd d S )
N  r   r%   FrV   u_based_decisionrA   r^   T)
r-   r.   r/   r   r   rb   r   r   re   r   )rsrO   rP   r2   rh   r   rj   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2r3   r3   r4   test_svd_flip  s   r   zn_samples, n_features)r,   ry   )ry   r,   c                 C   s   t j|}|| |}tj|dd\}}}t||dd\}}t jt |dd}	||	t 	|j
d f dk s;J t||dd\}}
t jt |
dd}|
t 	|
j
d |f dk s`J d S )NFrV   Tr   r   r6   r*   )r-   r.   r/   r   r   rb   r   argmaxr   aranger9   all)rO   rP   global_random_seedr   r2   rh   r   rj   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rowr3   r3   r4   test_svd_flip_max_abs_cols  s   $(r   c                  C   s   t ddgddgg} t| dddd\}}}tdD ]<}t| dd|d\}}}t|| t|| tt || ||  tt |j|t d tt |j|t d qd S )	Ng       @rM   rr   r+   T)   	flip_signrS   r%   )r-   r|   r   ranger   re   r   eye)au1r   v1seedu2r   v2r3   r3   r4   test_randomized_svd_sign_flip$  s   

r   c            	      C   s   dd } t ddd}t|dddd	\}}}| ||\}}|s#J |r'J t|ddddd
\}}}| ||\}}|s>J |rBJ d S )Nc                 S   sL   t | jdd| jddk }t |jdd|jddk }||fS )z
        returns bool tuple indicating if the values maximising np.abs
        are positive across all rows for u and across all columns for v.
        r   r6   r*   )r-   r   r   r   )uvu_basedv_basedr3   r3   r4   max_loading_is_positive5  s   ""zMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiver   r%   r   r,   Tr   r   )r   r   rS   )r-   r   reshaper   )	r  mat	u_flippedr   	v_flippedr   r   u_flipped_with_transposev_flipped_with_transposer3   r3   r4   ,test_randomized_svd_sign_flip_with_transpose0  s   	
r  r   )r   rC   ,  m)r%   r   r   r   r'   c                 C   s   t j|}|| |}t||ddd\}}}t||ddd\}	}
}|j|	jks*J t||	ddd |j|
jks:J t||
ddd |j|jksJJ t||ddd d S )Ngesddr   )svd_lapack_driverrS   gesvdgMbP?)atolrtol)r-   r.   r/   randr   r9   r
   )r   r
  rg   r   r1   r2   r   r   vt1r   r   vt2r3   r3   r4   !test_randomized_svd_lapack_driverQ  s   r  c                  C   s   t g dt ddgt ddgf} t g dg dg dg d	g d
g dg dg dg dg dg dg dg}t| }t|| t d}t|d d t jf t|f d S )Nr*   r+   r,   ry   r'   rA   rL   )r*   ry   rA   )r*   ry   rL   )r*   r'   rA   )r*   r'   rL   )r+   ry   rA   )r+   ry   rL   )r+   r'   rA   )r+   r'   rL   )r,   ry   rA   )r,   ry   rL   )r,   r'   rA   )r,   r'   rL   r,   )r-   r|   r   r   r   newaxis)axestrue_outoutr:   r3   r3   r4   test_cartesiank  s(   (

"r  zarrays, output_dtyper  ru   ry   r:   yc                 C   s   t | }|j|ksJ dS )z8Check that the cartesian product works with mixed types.N)r   rJ   )arraysoutput_dtypeoutputr3   r3   r4   test_cartesian_mix_types  s   r  c                   C   s   t jdS )Nrq   )r-   r.   r/   r3   r3   r3   r4   r1     s   r1   c           
      C   s   d}|  dd|| }|  |jd | }t|ddd|d\}}}tj||dd}tj|d |dd|d  }	t|| t||	 d S )Nr%     r   r   sample_weightr;   r7   r+   )r  ra   r9   r   r-   averager   )
r1   rJ   multr2   r!  meanvarr   expected_meanexpected_varr3   r3   r4   2test_incremental_weighted_mean_and_variance_simple  s   
r)  r%  )r       cAg    cr&  )r*   :0yE>g     j@zweight_loc, weight_scale))r   r*   )r   r+  )r*   r+  )r%   r*   )r*  r*   c                 C   s   dd }d}|j |||d d}|j | ||d}ttj||dd}	ttj||	 d |dd}
||||	|
 |j | ||d}t|d }ttj|dd}	ttj|dd}
||||	|
 d S )	Nc           
   	   S   s   | j d }d|d d |d d |d d |fD ]+}d\}}}t||D ]}	t| |	 |||||	 d\}}}q$t|| t||dd	 qd S )
Nr   r*   r%   ry   r+   )r   r   r   r   ư>)r  )r9   r   r   r
   )
r2   r!  r'  r(  r   
chunk_size	last_meanlast_weight_sumlast_varbatchr3   r3   r4   _assert  s   
*

z<test_incremental_weighted_mean_and_variance.<locals>._assert)rC   r   r   )locscaler)   r"  r+   r6   )r~   r   r-   r#  r8   r%  r&  )r%  r&  
weight_locweight_scaler1   r2  r)   weightr2   r'  r(  ones_weightr3   r3   r4   +test_incremental_weighted_mean_and_variance  s   	r9  c              	   C   s   t g d}t g d}t jg dt jd}t d}t d}t g dg dg d	g| }t d
t jd
d
gt jd
ddgddt jdgdddt jgg| }t|||||d\}}	}
t|||||d\}}}t|| t||	 t||
 d S )N     @r;  r;  r;       @r=  r=  r=  r+   r+   r+   r+   ru   r,   ry      r@  r@  r@    rB  rB  rB  r	  r	  r	  r	  r@  rB  r	  r   )r-   r|   r   r8   ra   nanr   r
   )rJ   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr2   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_countr3   r3   r4   6test_incremental_weighted_mean_and_variance_ignore_nan  s@   

	


rQ  c            
      C   s   t g dg dg dg dgj} d}| d |d d f }| |d d d f }|jdd}|jdd}t j|jd |jd t jd}t||||\}}}	t	|| jddd t	|| jddd t	|	| jd  d S )N)iX  i  r@  rB  r	  r+   r   r6   r*   ru   rA   )
r-   r|   r   r%  r&  fullr9   r   r   r   )
r   idxX1X2rE  rF  old_sample_countfinal_meansfinal_variancesfinal_countr3   r3   r4   )test_incremental_variance_update_formulas  s*   
rZ  c               	   C   s   t g d} t g d}t jg dt jd}t g dg dg dg}t dt jddgt jdd	d	gd	d	t jd
gd
d
d
t jgg}t|| ||\}}}t|| ||\}}	}
t|| t|	| t|
| d S )Nr:  r<  r>  ru   r?  rA  rC  r@  rB  r	  )r-   r|   r   rD  r   r
   )rE  rF  rV  r2   rJ  rK  rL  rM  rN  rO  rP  r3   r3   r4   -test_incremental_mean_and_variance_ignore_nan  s(   	



r[  c                  C   s  dd } dd }dd }dd }d	}d
}d}t jdt jd}t jdt jd}t j|d
 |f|t jd}	t j|d
 |f|t jd}
t |	|
f}t | |||  |ksXJ |	dd d f t ||d
 }}}t	|
j
d D ]}||
|d d f |||\}}}qr||j
d ksJ t |jdd|  dksJ t | ||  |ksJ |	dd d f t |}}t j||d
 t jd}t	|
j
d D ]}t|
|d d f d|
j
d f|||\}}}qt||j
d  t|jdd| |t | ||  ks
J d S )Nc                 S   s   | j ddS )Nr   r6   )r&  )r   r3   r3   r4   np_var=  s   z=test_incremental_variance_numerical_stability.<locals>.np_varc                 S   s:   | j d }| d jdd| }| jdd| d }|| S )Nr   r+   r6   )r9   rF   )r2   r   exp_x2expx_2r3   r3   r4   one_pass_varB  s   
zCtest_incremental_variance_numerical_stability.<locals>.one_pass_varc                 S   s*   | j dd}|  }tj || d ddS )Nr   r6   r+   )r%  rU   r-   )r2   r%  Yr3   r3   r4   two_pass_varK  s   zCtest_incremental_variance_numerical_stability.<locals>.two_pass_varc                 S   sJ   |d }|t | }| | ||  }|| | | | |  |  }|||fS )Nr*   )float)r:   r.  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variancer3   r3   r4   naive_mean_variance_updateS  s   
zQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updater   r+   i'  g    חAru   gh㈵>r   r6   r,  r*   )r-   r|   rd   logrR  vstackr   r   zerosr   r9   r%  r   r   r  r   r   )r\  r_  ra  ri  r   rP   rO   x1x2A0A1r   r%  r&  r   r   r3   r3   r4   -test_incremental_variance_numerical_stability9  s8   	"&""$$rq  c                  C   sZ  t jd} | dd}|j\}}dD ]}t d|jd |}|d |jd kr/t ||g}t|d d |dd  D ]m\}}|||d d f }|dkro|jdd}	|j	dd}
|jd }t j
|jd |jd t jd	}nt||	|
|}|\}	}
}||jd 7 }t j|d | dd}t j	|d | dd}t|	|d
 t|
|d
 t|| q<qd S )Nr   r   r%   )   r   %   r   r   r*   r6   ru   rA   )r-   r.   r/   r   r9   r   hstackzipr%  r&  rR  r   r   r   r   )r1   r2   rO   rP   
batch_sizestepsr   jr1  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancesr3   r3   r4   test_incremental_variance_ddof  s4   
"
 
r  c                  C   s   t jddd} t jt | dd}t| }t j|dd}t|| t | t	| j
d |f }t| ||d d t jf   d S )N$   r'   r*   r6   r   )r-   r.   r/   r   r   r   r   r   signr   r9   r  )datamax_abs_rowsdata_flippedmax_rowssignsr3   r3   r4   test_vector_sign_flip  s   
 r  c                  C   sL   t jd} | dd}t |}t j|ddd}tt|||  d S )Nr   r,   r'   r*   r6   )r   r*   )	r-   r.   r/   r   exprF   r  r   r   )r1   r2   exp_X	sum_exp_Xr3   r3   r4   test_softmax  s
   
r  c                  C   s   t tg dtg d tjdd} tt	 t| ddd W d    n1 s.w   Y  tjdj
ddd}t t|dd	tj|dd	 t t|d
d	tj|d
d	 t t|dd	tj|dd	 d S )Nr  r   i )r  r  r  r  )r'   r'   r'   r(   r6   r*   r+   )r   r   r-   cumsumr.   r/   r  r   r   RuntimeWarningr0   )rr   r3   r3   r4   test_stable_cumsum  s    r  A_containerdensec                 C      g | ]}|j qS r3   r   .0	containerr3   r3   r4   
<listcomp>      r  )idsB_containerc                 C   r  r3   r  r  r3   r3   r4   r    r  c                 C   sX   t jd}|d}|d}t ||}| |}||}t||dd}t|| d S )Nr      r%   )r%   r   Tdense_outputr-   r.   r/   rD   re   r   r
   )r  r  r1   r   Bexpectedactualr3   r3   r4   test_safe_sparse_dot_2d  s   

r  c                 C   s   t jd}|d}|d}t ||}| |}t||}t|| |d}|d}t ||}| |}t||}t|| d S )Nr   )r+   r,   ry   r'   rA   )rA   rL   )r+   r,   )ry   r'   r,   rA   r  )ro   r1   r   r  r  r  r3   r3   r4   test_safe_sparse_dot_nd  s   






r  r  c                 C   r  r3   r  r  r3   r3   r4   r    r  c                 C   sv   t jd}|d}|d}t ||}t| ||}t|| |d}t ||}t|| |}t|| d S )Nr   r%   r  )r%   r  r  )r  r1   r  r   r  r  r3   r3   r4   test_safe_sparse_dot_2d_1d  s   



r  r  TFc                 C   sv   t jd}tjddd|d}tjddd|d}||}t||| d}t||  ks.J | r4| }t|| d S )Nr   r  r%   r   )r   rS   r   r  )	r-   r.   r/   r   re   r   issparsetoarrayr   )r  r1   r   r  r  r  r3   r3   r4   !test_safe_sparse_dot_dense_output  s   
r  c                  C   s4   t jddgt jd} t| ddd}t|ddg d	S )
a  Make sure sklearn.utils.extmath._approximate_mode returns valid
    results for cases where "class_counts * n_draws" is enough
    to overflow 32-bit signed integer.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i r  ru   ia  r   )class_countsn_drawsr1   i`  r   N)r-   r|   r   r   r   )r2   retr3   r3   r4   test_approximate_mode  s   r  )]numpyr-   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   sklearn.datasetsr   r   sklearn.utilsr   sklearn.utils._arpackr	   sklearn.utils._testingr
   r   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.utils.fixesr   r   r    r!   r"   r#   markparametrizer5   r@   rI   r   r   r`   rd   rp   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r|   rJ   objectr  fixturer1   r)  r9  rQ  rZ  r[  rq  r  r  r  r  r  r  r  r  r  r3   r3   r3   r4   <module>   s    @ 

	
O

G
)) -

!&
&
$


&
$
H 





