a
    í:bé  ã                   @   s¼   d Z ddlZddlZddlmZmZmZ ddlZ	ddl
mZmZmZmZ ddlZejjde	 d¡dd	„ d
dd„ ƒZdd„ Zdd„ Zej de¡dd„ ƒZdd„ Zej de¡dd„ ƒZdS )zTest replace().é    N)Úassert_equalÚassert_array_equalÚassert_raisesé   )ÚarraysÚarray_orderÚDTYPESÚ
INT_DTYPESÚfuncZ	nonreducec                 C   s   | j S )N)Ú__name__)Úx© r   ú>lib/python3.9/site-packages/bottleneck/tests/nonreduce_test.pyÚ<lambda>   ó    r   )Zidsc                 C   sÚ  d}|d7 }| j }td| ƒ}tj g d¢¡}ddtjtj g}tt|ƒƒD ]†\}}t	dƒD ]r}|j
dkrtd}	n| t|j
dƒ¡}|j| }	|D ]:}
t|jjtjƒsÂt |	¡s¶q”t |
¡sÂq”| ¡ }t ¡ & t d¡ | ||	|
ƒ W d	  ƒ n1 sþ0    Y  | ¡ }t ¡ & t d¡ |||	|
ƒ W d	  ƒ n1 sF0    Y  |d
t|ƒ t|jƒt|jƒ|	|
t|ƒ|f}|| }t|||d |d7 }t|dƒs°t|dƒr”|j}|j}t|||||f ƒ q”q^qLd	S )z1Test that bn.xxx gives the same output as np.xxx.zA
func %s | input %s (%s) | shape %s | old %f | new %f | order %s
z
Input array:
%s
z
bn.slow.%s©r   é   é   r   r   r   ÚignoreNÚa©Úerr_msgz
 dtype mismatch %s %sÚdtype)r   ÚevalÚnpZrandomZRandomStateÚnanÚinfÚ	enumerater   ÚrangeÚsizeZrandintÚmaxZflatÚ
issubclassr   ÚtypeZinexactZisfiniteÚcopyÚwarningsÚcatch_warningsÚsimplefilterÚstrÚshaper   r   Úhasattrr   )r
   ÚmsgÚnameZfunc0ZrsZnewsÚiZarrÚidxÚoldÚnewÚactualÚdesiredÚtupr   ZdaZddr   r   r   Útest_nonreduce   sT    






*

,
ø
r3   c                  C   s|   t } | D ]n}tjd|d}tttj| ¡ ddƒ tttj| ¡ ddƒ tttjj| ¡ ddƒ tttjj| ¡ ddƒ qdS )zTest replace for unsafe castsr   ©r   gš™™™™™¹?r   N)	r	   r   Zzerosr   Ú
ValueErrorÚbnÚreplacer#   Úslow)Zdtypesr   r   r   r   r   Útest_replace_unsafe_castE   s    r9   c                  C   s4   g d¢} t ttj| ddƒ d} t ttj| ddƒ dS )z Test that non-array input raisesr   r   r   N)r   Ú	TypeErrorr6   r7   ©r   r   r   r   Útest_non_arrayP   s    r<   r   c                 C   sz   t jd| d ddd¡}| ¡ }t |t jd¡ | ¡ }d}t|||d | ¡ }tj |t jd¡ d	}t|||d d
S )z'Test replace, int array, old=nan, new=0é   r4   r   r   é   r   z,replace failed on int input looking for nansr   z1slow.replace failed on int input looking for nansN)	r   ZarangeZreshaper#   r6   r7   r   r   r8   )r   r   r0   r1   r*   r   r   r   Útest_replace_nan_int]   s    r?   c               	   C   sÎ  t  d¡} d ddgdg}|D ]|}tjtdd t | |d¡ W d   ƒ n1 sR0    Y  tjtdd t | d|¡ W d   ƒ q1 sŽ0    Y  qtjtdd tj| d	 W d   ƒ n1 sÊ0    Y  tjtd
d tj| d W d   ƒ n1 s0    Y  tjtdd tj| dd W d   ƒ n1 sD0    Y  tjtdd t | d¡ W d   ƒ n1 s€0    Y  tjtdd  t | ddd¡ W d   ƒ n1 sÀ0    Y  d S )N)é
   r@   Ú r   Ú0z`old` must be a number)Úmatchz`new` must be a numberzCannot find `a` keyword input)ZfoozCannot find `old` keyword inputr;   zCannot find `new` keyword input)r   r.   zwrong number of arguments 4)r   ÚonesÚpytestZraisesr:   r6   r7   )ÚarrayZbad_valsZbad_valr   r   r   Útest_replace_bad_argsl   s"    
,.*,.,rG   c                 C   s>   t jd| ddt jf }t |dd¡}|dk ¡  ¡ s:J ‚d S )N)r   r   r4   .r   r   )r   rD   Znewaxisr6   r7   Úall)r   rF   Úresultr   r   r   Útest_replace_newaxis†   s    rJ   )Ú__doc__r$   Znumpyr   Znumpy.testingr   r   r   Z
bottleneckr6   Úutilr   r   r   r	   rE   ZmarkZparametrizeZget_functionsr3   r9   r<   r?   rG   rJ   r   r   r   r   Ú<module>   s"   ÿ
6
