o
    ip                     @   s  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 d dl	m
Z
 d dlmZmZ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ejdedd Zejdee dd Zdd Z ejdedd Z!dd Z"ejdedd Z#d d! Z$ejde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)load_digits)BernoulliRBM)assert_allcloseassert_almost_equalassert_array_equal)CSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERS)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    _/home/kim/smarthome/.venv/lib/python3.10/site-packages/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 ]}|| q+q't||  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   	transform_mean_hiddensr   )r   rbm1ZXt1ZXt2r    r    r!   test_transform6   s   


r7   csr_containerc                 C   s    | t d d }t | d S )N   )r   r   r   )r8   r   r    r    r!   test_small_sparseA   s   r:   sparse_containerc                 C   sz   | t d d }t d d  }tddddd}tddddd}|| || t|| || dd d S )	Nr/   r   r   r   r   r$   r   r   )r   r   r   r+   r   r   r   )r;   ZX_sparser   r6   rbm2r    r    r!   test_small_sparse_partial_fitH   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   r6   rngr    r!   
<listcomp>c   s    z'test_sample_hiddens.<locals>.<listcomp>   r   )
r'   randomRandomStater   r   r   r5   r   r*   r   )hhsr    rA   r!   test_sample_hiddens\   s   
"rI   csc_containerc                 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}| 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?r9   r   )
r'   rE   rF   arrayr   r   r   components_gibbsZtoarray)rJ   rB   r   r6   r<   r    r    r!   test_fit_gibbsh   s"   

rP   c                  C   sX   t } tddddd}||  || }t| || }t||kjdds*J d S )Nr2   (   r#   r3   rD   )Zaxis)r   r   r   rO   r   r'   allmax)r   r6   Z	X_sampledZ
X_sampled2r    r    r!   test_gibbs_smoke   s   


rT   lil_containersc                 C   s   t jd}t t dt dg}tddd|d}|| ||dk 	 s+J d|_
||}d|_
|| |}t|| t jdd |t dd	 g W d    d S 1 s_w   Y  d S )
Nr2   i  r   r>   r3   iignore)Zunderr/   )r'   rE   rF   ZvstackZzerosZonesr   r   r   rR   r   r   ZerrstateZarange)rU   rB   r   r6   Zd_scoreZs_scorer    r    r!   test_score_samples   s   


"rW   c                  C   s:   t ddd} tj}t t_z| t W |t_d S |t_w )Nr>   r   )r   verbose)r   sysstdoutr   r   r   )r   
old_stdoutr    r    r!   test_rbm_verbose   s   r\   c                 C   sj   t j}t t _| dgdgg}tdddddd}z|| t j }td|s+J W |t _d S |t _w )	NrK   rL   r>   rD   r2   T)r   r   r   r   rX   zS\[BernoulliRBM\] Iteration 1, pseudo-likelihood = -?(\d)+(\.\d+)?, time = (\d|\.)+s)rY   rZ   r   r   r   getvaluerematch)rJ   r[   r   r   sr    r    r!   test_sparse_and_verbose   s   



ra   zdtype_in, dtype_outc                 C   sN   t d d | }tddddd}||}|j|ks%J d|j|jd S )Nr/   r0   r1   r2   r3   z(transform dtype: {} - original dtype: {})r   astyper   fit_transformZdtypeformat)Zdtype_inZ	dtype_outr   r   ZXtr    r    r!   test_transformer_dtypes_casting   s   

re   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   rb   r'   float64r   rc   float32r   Zintercept_hidden_Zintercept_visible_rN   Z
h_samples_)ZX_64Zrbm_64ZXt_64ZX_32Zrbm_32ZXt_32r    r    r!   "test_convergence_dtype_consistency   s   

rh   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!   rC      s    z*test_feature_names_out.<locals>.<listcomp>N)r   getattrr   Zget_feature_names_outr*   r   )ri   r   r   namesZexpected_namesr    r    r!   test_feature_names_out   s   
rl   ),r^   rY   ior   numpyr'   ZpytestZsklearn.datasetsr   Zsklearn.neural_networkr   Zsklearn.utils._testingr   r   r   Zsklearn.utils.fixesr   r	   r
   Zsklearn.utils.validationr   r   _minrS   r"   r.   r7   markZparametrizer:   r=   rI   rP   rT   rW   r\   ra   rg   rf   r&   re   rh   rl   r    r    r    r!   <module>   sJ    






