B
    0d                 @   s   d dl Zd dlmZ d dlZd dlmZ d dlmZm	Z	 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eeddd Zdd ZdS )    N)assert_array_equal)FeatureHasher)ignore_warningsfails_if_pypyc              C   st   t dd} d| jkstdddddd	d
g}t dd|}dd |D }t ddd|}t| |  d S )N   )
n_featuresdictbar*   %   )fooZdadaZtzarabazZstring1)r   Zgagac             s   s   | ]}t | V  qd S )N)iteritems).0d r   f/var/www/html/venv/lib/python3.7/site-packages/sklearn/feature_extraction/tests/test_feature_hasher.py	<genexpr>   s    z,test_feature_hasher_dicts.<locals>.<genexpr>pair)r   
input_type)r   r   AssertionError	transformr   toarray)hraw_XZX1genZX2r   r   r   test_feature_hasher_dicts   s    
r   c              C   s   dddd dgd dddgg} xdD ]}d| }dd	 | D }t|d
dd}||}|jd t| kspt|jd |kst|d  dkst|d  dkst|jdks(tq(W d S )Nr   r	   r   asciiquux)   	      r         c             s   s   | ]
}|V  qd S )Nr   )r   xr   r   r   r       s    z.test_feature_hasher_strings.<locals>.<genexpr>stringF)r   r   alternate_signr               )encoder   r   shapelenr   sumZnnz)r   Zlg_n_featuresr   itr   Xr   r   r   test_feature_hasher_strings   s    

r2   c        	   	   C   s   ddl m}  dddddgddddgg}dd	 |D }| |d
td\}}}dd	 |D }| |d
tddd\}}}t|| t|| dd	 |D }| |d
tddd\}}}tt t|| W d Q R X d S )Nr   )r   r   r	   r   r   r   c             s   s   | ]}d d |D V  qdS )c             s   s   | ]}|d fV  qdS )r(   Nr   )r   fr   r   r   r   :   s    z8test_hashing_transform_seed.<locals>.<genexpr>.<genexpr>Nr   )r   r%   r   r   r   r   :   s    z.test_hashing_transform_seed.<locals>.<genexpr>   Fc             s   s   | ]}d d |D V  qdS )c             s   s   | ]}|d fV  qdS )r(   Nr   )r   r3   r   r   r   r   =   s    z8test_hashing_transform_seed.<locals>.<genexpr>.<genexpr>Nr   )r   r%   r   r   r   r   =   s    )seedc             s   s   | ]}d d |D V  qdS )c             s   s   | ]}|d fV  qdS )r(   Nr   )r   r3   r   r   r   r   B   s    z8test_hashing_transform_seed.<locals>.<genexpr>.<genexpr>Nr   )r   r%   r   r   r   r   B   s    r(   )Z(sklearn.feature_extraction._hashing_fastr   r,   strr   pytestraisesr   )	Z_hashing_transformr   Zraw_X_indicesZindptr_Z	indices_0Zindptr_0Z	indices_1r   r   r   test_hashing_transform_seed0   s    

r;   c              C   s   dd ddddddd	gD } t d
dd}||  \}}tt||dk }tt||dk }ddg|ksztdddg|kstd S )Nc             s   s   | ]}t | V  qd S )N)r   r   )r   r   r   r   r   r   J   s   z,test_feature_hasher_pairs.<locals>.<genexpr>r(   r$   )r   r	   r*   r)   )r   r   r   r   r   )r   r   r   )r   r   r   sortednpabsr   )r   r   x1x2x1_nzx2_nzr   r   r   test_feature_hasher_pairsH   s    rD   c              C   s  dd ddddddd	gD } t d
dd}||  \}}tt||dk }tt||dk }ddg|ksztdddg|kstdd ddiddigD } ||  \}}t||dk }t||dk }dg|kstdg|kstt|| d S )Nc             s   s   | ]}t | V  qd S )N)r   r   )r   r   r   r   r   r   W   s   z?test_feature_hasher_pairs_with_string_values.<locals>.<genexpr>r(   a)r   r	   abcr)   r<   )r   r   r   r   r   )r   r   r   c             s   s   | ]}t | V  qd S )N)r   r   )r   r   r   r   r   r   a   s    Zbax)r   r   r   r=   r>   r?   r   r   )r   r   r@   rA   rB   rC   r   r   r   ,test_feature_hasher_pairs_with_string_valuesU   s    rG   c              C   sJ   d} g dt tdg}t| dd}||}t|jtt|| f d S )Nr   r   r   r&   )r   r   )	r   ranger   r   r   Ar>   Zzerosr.   )r   r   r   r1   r   r   r   test_hash_empty_inputj   s
    
rJ   c           	   C   s   t t tdd W d Q R X t t tdd W d Q R X t t tdd W d Q R X t t tdd W d Q R X ttdd} t t | g  W d Q R X t t | dgg W d Q R X t t | d gg W d Q R X d S )	NZgobbledygook)r   r<   )r   r   Zham@   g      @)	r7   r8   
ValueErrorr   	TypeErrorr>   Zuint16r   	Exception)r   r   r   r   test_hasher_invalid_inputt   s    rO   c           	   C   s6   t  } | jtjd tt |   W d Q R X d S )N)r   )r   Z
set_paramsr>   infr7   r8   rM   fit)Zhasherr   r   r   test_hasher_set_params   s    rR   c              C   s&   t  ddig} | jjdks"td S )Nr   r   )r   )r   r   datar-   r   )r1   r   r   r   test_hasher_zeros   s    rT   )categoryc              C   sd   t dg} tddd| }|j dk r8|j dks<ttddd| }|j dks`td S )NThequickbrownfoxjumpedTr&   )r'   r   r   F)listr   fit_transformrS   minmaxr   )r1   Xtr   r   r   test_hasher_alternate_sign   s
    
 r\   c              C   sn   t dg} tdddd| }t|jd t| d k s<ttdddd| }|jd t| d ksjtd S )NrV   Tr(   r&   )r'   r   r   r   F)rW   r   rX   r?   rS   r.   r   )r1   r[   r   r   r   test_hash_collisions   s    
r]   )numpyr>   Znumpy.testingr   r7   Zsklearn.feature_extractionr   Zsklearn.utils._testingr   r   Z
pytestmarkr   r2   r;   rD   rG   rJ   rO   rR   rT   FutureWarningr\   r]   r   r   r   r   <module>   s    
