U
    }hR                     @   sN  d dl Z d dlZd dlmZ d dlZd dlZd dlmZm	Z	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 edd	\ZZee 8 Zee  Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#ej$%d ej&ej&fej'ej'fe(ej'fgd!d" Z)d#d$ Z*ej$%d%d&d'gd(d) Z+dS )*    N)StringIO)
csc_matrix
csr_matrix
lil_matrix)load_digits)BernoulliRBM)assert_allcloseassert_almost_equalassert_array_equal)assert_all_finiteT)Z
return_X_yc                  C   sJ   t  } tdddddd}||  t||  ddd	 t| t  d S )
N@   皙?
      	   )n_componentslearning_rate
batch_sizen_iterrandom_state      5r   decimal)Xdigitscopyr   fitr	   score_samplesmeanr
   )Xrbm r    I/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/neural_network/tests/test_rbm.pytest_fit   s        
r"   c                  C   s   t  } tddddd}| jd }ttt||j }t	| |}t
dD ]}|D ]}|| qVqNt||  ddd	 t| t  d S )
Nr   r      r   r   r   r   r   r   r   r   r   )r   r   r   shapeintnpceilfloatr   Zarray_splitrangepartial_fitr	   r   r   r
   )r   r   Z	n_samplesZ	n_batchesZbatch_slicesibatchr    r    r!   test_partial_fit%   s       
r.   c                  C   sH   t d d } tddddd}||  || }|| }t|| d S )Nd         *   r   r   r   r   )r   r   r   Z	transform_mean_hiddensr
   )r   rbm1ZXt1ZXt2r    r    r!   test_transform6   s    


r6   c                  C   s    t td d } t |  d S )N   )r   r   r   r   )r   r    r    r!   test_small_sparseA   s    r8   c                  C   s   t tfD ]z} | td d }td d  }tddddd}tddddd}|| || t|| || dd qd S )	Nr/   r   r   r   r   r$   r   r   )	r   r   r   r   r   r+   r	   r   r   )sparseZX_sparser   r5   rbm2r    r    r!   test_small_sparse_partial_fitG   s,          

  r;   c                     st   t jdtd d  tddddd   d } t  fddtdD d}t	| |d	d
 d S )Nr   r/      r1   r2   r3   c                    s   g | ]}  d  qS )r   )Z_sample_hiddens.0r,   r   r5   rngr    r!   
<listcomp>b   s     z'test_sample_hiddens.<locals>.<listcomp>   r   )
r'   randomRandomStater   r   r   r4   r   r*   r	   )hZhsr    r?   r!   test_sample_hiddens[   s    
"rF   c                  C   s   t jd} t dgdgg}tddd| d}|| t|jt dgdggdd	 t||| t jd} t	dgdgg}tddd| d}|| t|jt dgdggdd	 t|||
  t|j|j d S )
Nr2                 ?r<   r3   gϾT"?g&r?r7   r   )r'   rC   rD   arrayr   r   r	   components_gibbsr   Ztoarray)r@   r   r5   r:   r    r    r!   test_fit_gibbsg   s*    
  
  rL   c                  C   sX   t } tddddd}||  || }t| || }t||kjddsTtd S )Nr2   (   r#   r3   rB   )Zaxis)	r   r   r   rK   r   r'   allmaxAssertionError)r   r5   Z	X_sampledZ
X_sampled2r    r    r!   test_gibbs_smoke   s    


rQ   c               	   C   s   t jd} t t dt dg}tddd| d}|| ||dk 	 sVt
d|_||}d|_|t|}t|| t jdd |t dd	 g W 5 Q R X d S )
Nr2   i  r   r<   r3   iignore)Zunderr/   )r'   rC   rD   ZvstackzerosZonesr   r   r   rN   rP   r   r   r	   ZerrstateZarange)r@   r   r5   Zd_scoreZs_scorer    r    r!   test_score_samples   s    


rT   c                  C   s6   t ddd} tj}t t_z| t W 5 |t_X d S )Nr<   r   )r   verbose)r   sysstdoutr   r   r   )r   
old_stdoutr    r    r!   test_rbm_verbose   s    rY   c                  C   sr   t j} t t _ddlm} |dgdgg}tdddddd	}z(|| t j }t	d
|sbt
W 5 | t _X d S )Nr   )r   rG   rH   r<   rB   r2   T)r   r   r   r   rU   zS\[BernoulliRBM\] Iteration 1, pseudo-likelihood = -?(\d)+(\.\d+)?, time = (\d|\.)+s)rV   rW   r   scipy.sparser   r   r   getvaluerematchrP   )rX   r   r   r   sr    r    r!   test_sparse_and_verbose   s&        

r_   zdtype_in, dtype_outc                 C   sN   t d d | }tddddd}||}|j|ksJtd|j|jd S )Nr/   r0   r1   r2   r3   z(transform dtype: {} - original dtype: {})r   astyper   fit_transformZdtyperP   format)Zdtype_inZ	dtype_outr   r   ZXtr    r    r!   test_transformer_dtypes_casting   s    
 rc   c                  C   s   t d d tj} tddddd}|| }t d d tj}tddddd}||}t||ddd t|j|jddd t|j	|j	d	dd t|j
|j
d
dd t|j|j d S )Nr/   r0   r1   r2   r3   gư>r   )ZrtolZatolgh㈵>gMbP?)r   r`   r'   float64r   ra   float32r   Zintercept_hidden_Zintercept_visible_rJ   Z
h_samples_)ZX_64Zrbm_64ZXt_64ZX_32Zrbm_32ZXt_32r    r    r!   "test_convergence_dtype_consistency   s*    

      rf   methodr   r+   c                 C   sD   d}t |d}t|| t | }dd t|D }t|| dS )z1Check `get_feature_names_out` for `BernoulliRBM`.r   )r   c                 S   s   g | ]}d | qS )Zbernoullirbmr    r=   r    r    r!   rA      s     z*test_feature_names_out.<locals>.<listcomp>N)r   getattrr   Zget_feature_names_outr*   r
   )rg   r   r   namesZexpected_namesr    r    r!   test_feature_names_out   s    
rj   ),r\   rV   ior   Znumpyr'   ZpytestrZ   r   r   r   Zsklearn.datasetsr   Zsklearn.neural_networkr   Zsklearn.utils._testingr   r	   r
   Zsklearn.utils.validationr   r   _minrO   r"   r.   r6   r8   r;   rF   rL   rQ   rT   rY   r_   markZparametrizere   rd   r&   rc   rf   rj   r    r    r    r!   <module>   s>   

