o
    ?Hhk                     @   sL  d dl Zd dl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 d dl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 d d	l m!Z!m"Z"m#Z#m$Z$ ej%&d
eej%&deej%&dedd Z'ej%&dej(ej)gej%&dee dd Z*ej%&d
eej%&deej%&dedd Z+ej%&g dg dg dgg dg dgg dfg dg dgg dg dgg dfg dg dgg dg dgdfd ej,dgd ej,ej,ggd ej,dgd ej,ej,ggg dfd d gdej,gdd gd d gej,ej,gej,dggg d!ddej,gg d"g d#ej,ej,ej,gej,ej,dggd$d%gfg d&g d'gg d(g d)ge-g d*fgej%&dee ej%&dej(ej)gd+d, Z.ej%&g dg dg dgg dg dgddgfg dg dgg dg dg dgddgfg dg dgg dg dgdfd ej,dgd ej,ej,ggd ej,dgd ej,ej,ggd%d%gfd d dej,dd gd d ej,ej,ej,dggd d dej,dd gd d dej,dd gd d ej,ej,ej,dggd$d%gfg d&g dgg d&g dg dg dge-dd gfgej%&dee ej%&dej(ej)gd-d. Z/ej%&d
eej%&deej%&ded/d0 Z0ej%&dee d1d2 Z1ej%&d3ej2d4dd5d6d d7ej2d8dd5d6d d7fej2d4dd5d6d d7ej3ej4d9ej,d:ej2d8dd5d;d<gd6d=fgej%&ded>d? Z5d@dA Z6dBdC Z7ej%&dDd dgej%&dee dEdF Z8ej%&dedGdH Z9ej%&dedIdJ Z:dKdL Z;dMdN Z<ej%&d
eej%&dedOdP Z=ej%&d
eej%&dedQdR Z>ej%&dej(ej)gej%&dDg dSej%&dTee ej%&dUd ej?ej@dVfej,ejAejBdWfgej%&dXdWdVgdYdZ ZCej%&d
eej%&ded[d\ ZDej%&d
eej%&ded]d^ ZEej%&d
eej%&ded_d` ZFej%&dae#e$fej%&dedbdc ZGej%&dej(ej)gddde ZHejIdfee dgdhdi ZJdjdk ZKdldm ZLdndo ZMdpdq ZNdS )r    N)RandomState)assert_array_almost_equalassert_array_equal)linalg)make_classification)assert_allclose)CSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERS)
_implicit_column_offsetcount_nonzerocsc_median_axis_0incr_mean_variance_axisinplace_column_scaleinplace_row_scaleinplace_swap_columninplace_swap_rowmean_variance_axismin_max_axis)assign_rows_csrcsr_row_normsinplace_csr_row_normalize_l1inplace_csr_row_normalize_l2csc_containercsr_containerlil_containerc                 C   s<  t dddd\}}d|d< d|d< d|d< ||}d|d< d|d< tt t|dd	 W d    n1 s7w   Y  ||}| |}tjtjftjtjftjtjftj	tjfg}|D ]?\}	}
|
|	}||fD ]1}|
|	}t|dd	\}}|j|
ksJ |j|
ksJ t|tj|dd	 t|tj|dd	 qiq\d S )
N      r   random_stater   r         r      r#   r   axisr   pytestraises	TypeErrorr   npfloat32float64int32int64astypedtyper   meanvarr   r   r   X_X_lilX_csrX_cscexpected_dtypesinput_dtypeoutput_dtypeX_testX_sparseX_meansX_vars rC   d/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_sparsefuncs.pytest_mean_variance_axis0   8   





rE   r3   sparse_constructorc                 C   s   t jd}t jdd| d}|jt |jd ddd}t j||df< ||}||jd 	| }t
||dd\}}|t | jk sEJ d S )	Nr   g      Y@)i  r#   )
fill_valueshaper3   
   F)replace)weightsr(   )r-   randomr   fullchoicearangerI   nanrandr2   r   finfoeps)r3   rG   rngr7   missing_indicessample_weightr8   r5   rC   rC   rD   "test_mean_variance_axis0_precisionD   s   rX   c                 C   s<  t dddd\}}d|d< d|d< d|d< ||}d|d< d|d< tt t|d	d
 W d    n1 s7w   Y  ||}| |}tjtjftjtjftjtjftj	tjfg}|D ]?\}	}
|
|	}||fD ]1}|
|	}t|dd
\}}|j|
ksJ |j|
ksJ t|tj|dd
 t|tj|dd
 qiq\d S )Nr   r   r   r   r    r!   r$   r&   r#   r'   r)   r6   rC   rC   rD   test_mean_variance_axis1X   rF   rY   )Xwr7   rL   )r   r   r#   r   r"   r%   )r#   r#   r#   )r   r#   r#   )r   r   r   r#   )r   r#   r#   r#   )r#   r"   r#   r"   )      ?r\   r\   r#   r%   r   r   r   )r"   r"   r   )r   r   r%   g       @r\   )r#   r   r#   )r   r%   r#   )r#   r   r   r   r#   )r   r%   r%   r%   r#   )r#   r%   r#   c                 C   sv  d}||  |}|| |}tjt| d |d}tj||d}	tj|tjd}
t||||	|
d d\}}}t||||	|
|d\}}}|j|ksLJ |j|ksSJ |j|ksZJ t||d\}}t	|| t	|| t	|| t	|| t	|| t|||||d d\}}}t||||||d\}}}t	|| t	|| t	|| |j|ksJ |j|ksJ |j|ksJ d S )Nr#   r   r3   r7   r(   	last_meanlast_varlast_nrL   r7   r(   )
r2   r-   zerosrI   
zeros_liker1   r   r3   r   r   rZ   r7   rL   rG   r3   r(   	Xw_sparser@   r`   ra   rb   means0vars0n_incr0means_w0vars_w0	n_incr_w0means_simplevars_simplemeans1vars1n_incr1means_w1vars_w1	n_incr_w1rC   rC   rD   +test_incr_mean_variance_axis_weighted_axis1}   sj   #		




	
	

rv   c                 C   sp  d}||  |}|| |}tjt| d|d}t|}	tj|tjd}
t||||	|
d d\}}}t||||	|
|d\}}}|j|ksIJ |j|ksPJ |j|ksWJ t||d\}}t	|| t	|| t	|| t	|| t	|| t|||||d d\}}}t||||||d\}}}t	|| t	|| t	|| |j|ksJ |j|ksJ |j|ksJ d S )Nr   r#   r^   r_   rc   )
r2   r-   rd   sizere   r1   r   r3   r   r   rf   rC   rC   rD   +test_incr_mean_variance_axis_weighted_axis0   sj    
		




	
	

rx   c              
      s  dD ]b}t jdd d|dkr  fddtD }nfddt D }|dkr5t  nt }t |}t j|t jd}t |d }t |}|d	krZ|j	n|}||}	||	}
t
t t||||d
 W d    n1 s|w   Y  t
t t|	||||d W d    n1 sw   Y  t|
|\}}t|
||||d\}}}t|| t|| t|j| | | |	}t||\}}t|| t|| t|j| | t |}|d	kr|j	n|}||}	||	}
| |	}t jt jft jt jft jt jft jt jfg}|D ]Q\}}|
|fD ]G}||}||}||}t||\}}t|||||d\}}}|j|ksGJ |j|ksOJ t|| t|| t|j| | qqqd S )N)r   r#   r   2   rJ   c                       g | ]
}j d d dqS r   r"   )rw   randint.0i)
n_featuresrU   rC   rD   
<listcomp>K      z0test_incr_mean_variance_axis.<locals>.<listcomp>c                    rz   r{   r|   r~   )	n_samplesrU   rC   rD   r   M  r   r^   r#   )r7   r(   r`   ra   r(   r`   ra   rb   )r-   rM   r   rangerd   re   r1   array
atleast_2dTr*   r+   r,   r   r   r   r   rI   vstackr.   r/   r0   r2   r3   )r   r   r   r(   data_chunksr`   ra   rb   r7   r9   r:   rA   rB   X_means_incrX_vars_incrn_incrr;   r<   r=   r>   r@   rC   )r   r   rU   rD   test_incr_mean_variance_axisB  s   


















r   c                 C   s:  d\}}t jd}| |||}t |}t |}t j|jt jd}t|||d}t	|fddi|\}	}
}t
t j| dd|	 t
t j| dd|
 tt t	|fddi| W d	   n1 skw   Y  t|d	d
 ||d}tt t	|fddi| W d	   d	S 1 sw   Y  d	S )zCheck that we raise proper error when axis=1 and the dimension mismatch.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/pull/18655
    )<   r   *   r^   )r`   ra   rb   r(   r   r'   r#   N)r-   rM   r   rR   rd   re   rI   r1   dictr   r   r4   toarrayr5   r*   r+   
ValueError)rG   r   r   rU   r7   r`   ra   rb   kwargsmean0var0r8   rC   rC   rD   )test_incr_mean_variance_axis_dim_mismatch  s"   

"r   zX1, X2r   皙?csrdensityformatr      )r   r#   )rH   r   r   r   )r   c                 C   s   || } ||}d}t | jd t | jd }}t j| jd t jd}t| ||||d\}}}	t|||||	d\}}}	t| |g}
t|t j|
	 |d t|t j
|
	 |d t|	t jt |
	  dd d S )Nr   r#   r^   r   r'   )r-   rd   rI   r1   r   spr   r   nanmeanr   nanvarr   isnan)X1X2r   r(   r`   ra   rb   updated_meanupdated_var	updated_nr7   rC   rC   rD   6test_incr_mean_variance_axis_equivalence_mean_variance  s   "

$r   c            	      C   s   d} t jddddd }t jddddd }t|jd t|jd }}tj|jd tjd}t|| |||d\}}}t|| |||d\}}}t|| t|| t|| d S )Nr   r   r#   r   r   r^   r   )	r   rM   tocsrr-   rd   rI   r1   r   r   )	r(   r   r   r`   ra   rb   r   r   r   rC   rC   rD    test_incr_mean_variance_no_new_n  s   "



r   c                  C   sz   d} t jddddd }t|jd t|jd }}d}t|| |||d\}}}t|t|jd |jd  d S )Nr   r   r"   r   r   r#   r   )	r   rM   r   r-   rd   rI   r   r   rN   )r(   r7   r`   ra   rb   r8   new_nrC   rC   rD   test_incr_mean_variance_n_float  s   "
"r   r(   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}| rO|j}|j}t|| | | | d\}}}	t|| | | | d\}
}}t|
| t|| t||	 d S )N)     @r   r   r   )     @r   r   r   )r"   r"   r"   r"   r^   )   r   r   r   )  r   r   r   ),  r   r   r   r   r   r   r   )r-   r   r1   rQ   r   r   copyr   )r(   rG   	old_meansold_variancesold_sample_countr7   X_nanrA   rB   X_sample_countX_nan_means
X_nan_varsX_nan_sample_countrC   rC   rD   'test_incr_mean_variance_axis_ignore_nan  sF   

r   c                 C   s  t dddd\}}d|d< d|d< d|d< | |}tt t|dd	 W d    n1 s/w   Y  tt t|d
d	 W d    n1 sJw   Y  tt t|dd	 W d    n1 sew   Y  tt t|dd d d d W d    n1 sw   Y  tt t|d
d d d d W d    n1 sw   Y  tt t|dd d d d W d    d S 1 sw   Y  d S )Nr   r   r   r   r    r!   r$   r'   r"   r   r   )r   r*   r+   r   r   r   )r   r7   r8   r:   rC   rC   rD   test_mean_variance_illegal_axis-  s:   


"r   c                 C   s   t jt jfD ]T}| g dg dg dg dg dg|d}t jg dt jd}t jd|jd	 f|d}t jg d
t jd}t |}||d d f  ||< t	|||| t
|| qd S )Nr   r%   r   r"   r   r   r]   	         r   r   r   r^   r[      r#   )r#   r%   r   )r-   r.   r/   r   intponesrI   	ones_liker   r   r   )r   r3   r7   X_rowsoutout_rowsexpectrC   rC   rD   test_densify_rowsL  s   "
r   c                  C   sv  t jd} tddd}| }| }| }| d}||9 }t|| t|| t	| |  t	||  t	||  t
t t| | W d    n1 sZw   Y  |t j}|t j}| }| }| }||9 }t|| t|| t	| |  t	||  t	||  t
t t| | W d    d S 1 sw   Y  d S )Nr   d      皙?)r-   rM   r   r   rR   r   tocscr   r   r   r*   r+   r,   tolilr2   r.   rU   r7   XrXcXAscalerC   rC   rD   test_inplace_column_scale]  s:   




"r   c                  C   s  t jd} tddd}| }| }| }| d}||dd9 }t	|| t	|| t
| |  t
||  t
||  tt t| | W d    n1 s^w   Y  |t j}|t j}| }| }| }||dd9 }t	|| t	|| t
| |  t
||  t
||  tt t| | W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r#   )r-   rM   r   r   rR   r   r   r   reshaper   r   r*   r+   r,   r   r   r2   r.   r   rC   rC   rD   test_inplace_row_scale}  s:   




"r   c                 C   s  t jg dg dg dg dg dgt jd}||}| |}td|f}|d }||d |d	 \|d< |d	< t|dd	 t|dd	 t| |  t||  t||  ||d
 |d \|d
< |d< t|d
d t|d
d t| |  t||  t||  t	t
 t|  W d    n1 sw   Y  t jg dg dg dg dg dgt jd}||}| |}td|f}|d }||d |d	 \|d< |d	< t|dd	 t|dd	 t| |  t||  t||  ||d
 |d \|d
< |d< t|d
d t|d
d t| |  t||  t||  t	t
 t|  W d    d S 1 sOw   Y  d S )Nr   r   r]   r   r   r^   swapr   r   r"   r%   )r-   r   r/   r   get_blas_funcsr   r   r   r*   r+   r,   r   r.   r   r   r7   r:   r;   r   rC   rC   rD   test_inplace_swap_row  sX   $$$r   c                 C   s,  t jg dg dg dg dg dgt jd}||}| |}td|f}|d }||d d df |d d d	f \|d d df< |d d d	f< t|dd	 t|dd	 t| |  t||  t||  ||d d df |d d d
f \|d d df< |d d d
f< t|dd
 t|dd
 t| |  t||  t||  t	t
 t|  W d    n1 sw   Y  t jg dg dg dg dg dgt jd}||}| |}td|f}|d }||d d df |d d d	f \|d d df< |d d d	f< t|dd	 t|dd	 t| |  t||  t||  ||d d df |d d d
f \|d d df< |d d d
f< t|dd
 t|dd
 t| |  t||  t||  t	t
 t|  W d    d S 1 sw   Y  d S )Nr   r   r]   r   r   r^   r   r   r   r#   )r-   r   r/   r   r   r   r   r   r*   r+   r,   r   r.   r   rC   rC   rD   test_inplace_swap_column  sX   $>>$>>$r   )r   r#   Nsparse_formatz.missing_values, min_func, max_func, ignore_nanFTlarge_indicesc                 C   s   t jg ddd|gg dd|dgg dg| d}||}	|r,|	jd	|	_|	jd	|	_t|	||d
\}
}t|
|||d t||||d d S )Nr   r"   r   r]   r   r   r   r^   r1   )r(   
ignore_nanr'   )r-   r   indicesr2   indptrr   r   )r3   r(   r   missing_valuesmin_funcmax_funcr   r   r7   r@   mins_sparsemaxs_sparserC   rC   rD   test_min_max  s    
r   c                 C   s   t jg dg dg dg dg dgt jd}||}| |}tt t| dd W d    n1 s7w   Y  tt t|d	d W d    n1 sRw   Y  tt t|d
d W d    d S 1 snw   Y  d S )Nr   r"   r   r   r]   r   r   r^   r   r'   r"   r   )	r-   r   r/   r*   r+   r,   r   r   r   )r   r   r7   r:   r;   rC   rC   rD   test_min_max_axis_errors(  s   $"r   c           
   
   C   s  t jg dg dg dg dg dgt jd}||}| |}|dk}g d}|t |d d d f  }d	D ]}tt||d
|j|d
 tt|||d|j|d
 q6tt t| W d    n1 shw   Y  tt	 t|dd
 W d    n1 sw   Y  t|dd
j
t|dd
j
ksJ t|d|dj
t|d|dj
ksJ z5|jt j|_|jt j|_t|dd
j
t|dd
j
ksJ t|d|dj
t|d|dj
ksJ W d S  ty }	 zd|	jd v rt  jdk sJ |	W Y d }	~	d S d }	~	ww )Nr   r   r]   r   r   r^   r   )      ?g?g333333?皙?r   )r   r#   r   Nr'   )r(   rW   r"   r#   zaccording to the rule 'safe'r   )r-   r   r/   r   r   sumr*   r+   r,   r   r3   r   r2   r1   r   argsr   nbytes)
r   r   r7   r:   r;   	X_nonzerorW   X_nonzero_weightedr(   erC   rC   rD   test_count_nonzero8  sJ   $

  2r   c                 C   sJ  t jd}|dd}t j|dd}| |}t|}t|| |dd}d||dk < |ddd}||  ||< | |}t j|dd}t|}t|| dd	gd
d
gddgddgg}| |}tt|t ddg dd	gd
dgddgg}| |}tt|t ddg t	
t t|| W d    d S 1 sw   Y  d S )Nr   r   ry   r'   3   g        gffffff?rJ   r   r   r#   r"   r   g      r   )r-   rM   r   rR   medianr   r   r}   r   r*   r+   r,   )r   r   rU   r7   dense_mediancscsparse_medianindrC   rC   rD   test_csc_row_medianf  s.   

"r  inplace_csr_row_normalizec                 C   s   | t ju rtd}ntd}td}tjtjfD ]]}|dd|}| |}tj	tj
fD ]G}|tj
u rD|j||_|j||_|jj|ksLJ |jj|ksTJ || |j|ks_J |tu rj| jdC  _tt|jdd| q/qd S )N)rJ   r#   rJ   r   r"   r#   r'   )r   
csr_matrixr-   r   r   r/   r.   randnr2   r0   r1   r   r   r3   r   datar   absr   )r   r  r   rsr3   r7   r:   index_dtyperC   rC   rD   test_inplace_normalize  s(   


r	  c                 C   sb   t jddd| dd}t jj|ddd }t|}|j| ksJ | tjkr&d	nd
}t|||d d S )Nr   rJ   r   r   )r   r3   r   r#   r'   r"   gư>gHz>)rtol)	r   rM   r   normr   r3   r-   r.   r   )r3   r7   scipy_normsnormsr
  rC   rC   rD   test_csr_row_norms  s   r  module)scopeparamsc                 C   sb   | j }tjd}|tjdddd|d}| }t|jdd }t	||}|| }||fS )	z?Returns equivalent tuple[sp.linalg.LinearOperator, np.ndarray].r   i  r   r   r   r   r   r'   )
paramr-   rM   default_rngr   r   asarrayr4   ravelr   )requestsparse_containerr   r@   X_densemuX_sparse_centeredX_dense_centeredrC   rC   rD   centered_matrices  s   
r  c                 C   sR   |\}}t j| }||jd df}t|| || t|| ||  d S )Nr#   ry   )r-   rM   r  standard_normalrI   r   matmatglobal_random_seedr  r  r  rU   YrC   rC   rD   test_implicit_center_matmat  s
   r"  c                 C   sN   |\}}t j| }||jd }t|| || t|| ||  d S )Nr#   )r-   rM   r  r  rI   r   matvecr   r  r  r  rU   yrC   rC   rD   test_implicit_center_matvec  s
   r&  c                 C   sX   |\}}t j| }||jd df}t|j| || t|j| |j|  d S )Nr   ry   )r-   rM   r  r  rI   r   r   rmatmatr  rC   rC   rD   test_implicit_center_rmatmat  s
   r(  c                 C   sT   |\}}t j| }||jd }t|j| || t|j| |j|  d S )Nr   )r-   rM   r  r  rI   r   r   rmatvecr$  rC   rC   rD   test_implit_center_rmatvec  s
   r*  )Onumpyr-   r*   scipy.sparsesparser   numpy.randomr   numpy.testingr   r   scipyr   sklearn.datasetsr   sklearn.utils._testingr   sklearn.utils.fixesr   r	   r
   sklearn.utils.sparsefuncsr   r   r   r   r   r   r   r   r   r   sklearn.utils.sparsefuncs_fastr   r   r   r   markparametrizerE   r.   r/   rX   rY   rQ   r   rv   rx   r   r   rM   hstackrN   r   r   r   r   r   r   r   r   r   r   minmaxnanminnanmaxr   r   r   r  r	  r  fixturer  r"  r&  r(  r*  rC   rC   rC   rD   <module>   s&   0""$$ .
D$* &
DQ
/

  00 ,"

