U
    »mœd½º  ã                   @   sâ  d dl Zd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ ddlmZ G dd„ dƒZG d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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&d0d1„ Z'd2d3„ Z(d4d5„ Z)d6d7„ Z*d8d9„ Z+d:d;„ Z,d<d=„ Z-d>d?„ Z.d@dA„ Z/dBdC„ Z0dDdE„ Z1dFdG„ Z2dHdI„ Z3dJdK„ Z4dLdM„ Z5dNdO„ Z6dPdQ„ Z7dRdS„ Z8dTdU„ Z9dVdW„ Z:dXdY„ Z;dZd[„ Z<d\d]„ Z=d^d_„ Z>d`da„ Z?dbdc„ Z@ddde„ ZAdfdg„ ZBdhdi„ ZCdjdk„ ZDdldm„ ZEdndo„ ZFdpdq„ ZGdrds„ ZHdtdu„ ZIdvdw„ ZJdxdy„ ZKdzd{„ ZLd|d}„ ZMd~d„ ZNd€d�„ ZOd‚dƒ„ ZPd„d…„ ZQd†d‡„ ZRdˆd‰„ ZSdŠd‹„ ZTdŒd�„ ZUdŽd�„ ZVd�d‘„ ZWd’d“„ ZXd”d•„ ZYd–d—„ ZZd˜d™„ Z[dšd›„ Z\dœd�„ Z]dždŸ„ Z^d d¡„ Z_d¢d£„ Z`d¤d¥„ Zad¦d§„ Zbd¨d©„ Zcdªd«„ Zdd¬d­„ Zed®d¯„ Zfd°d±„ Zgd²d³„ Zhd´dµ„ Zid¶d·„ Zjd¸d¹„ Zkdºd»„ Zld¼d½„ Zmd¾d¿„ ZndÀdÁ„ ZodÂdÃ„ ZpdÄdÅ„ ZqdÆdÇ„ ZrdÈdÉ„ ZsdÊdË„ ZtdÌdÍ„ ZudÎdÏ„ ZvdÐdÑ„ ZwdÒdÓ„ ZxdÔdÕ„ ZydÖd×„ ZzdØdÙ„ Z{dÚdÛ„ Z|dÜdÝ„ Z}dÞdß„ Z~dàdá„ ZG dâdã„ dãƒZ€dS )äé    N)Úassert_Úassert_array_almost_equalÚassert_equalÚassert_almost_equalÚassert_array_equalÚsuppress_warnings)Úraisesé   )Útypesc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTest_measurements_statszDndimage._measurements._stats() is a utility used by other functions.c                 C   s€   ddddg}ddddg}ddg}dD ]V}t  |¡ |¡}t  |¡ |¡}tjj|||d�\}}t|ddgƒ t|ddgƒ q$d S )	Nr   r	   é   é   ©)é   ©r   r   ©ÚlabelsÚindexç      ð?ç       @©ÚnpÚarrayÚreshapeÚndimageÚ_measurementsZ_statsr   ©ÚselfÚxr   r   ÚshpÚcountsÚsums© r"   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/ndimage/tests/test_measurements.pyÚtest_a   s      ÿ
zTest_measurements_stats.test_ac                 C   s€   ddddg}ddddg}ddg}dD ]V}t  |¡ |¡}t  |¡ |¡}tjj|||d�\}}t|ddgƒ t|dd	gƒ q$d S )
Nr   r	   r   r   é	   r   r   r   r   r   r   r"   r"   r#   Útest_b   s      ÿ
zTest_measurements_stats.test_bc                 C   s’   ddddg}ddddg}ddg}dD ]h}t  |¡ |¡}t  |¡ |¡}tjj|||dd�\}}}t|ddgƒ t|dd	gƒ t|d
d	gƒ q$d S )Nr   r	   r   r   r   T©r   r   Zcenteredr   r   ç      à?r   ©r   r   r   r   r   r    r!   Zcentersr"   r"   r#   Útest_a_centered,   s       ÿz'Test_measurements_stats.test_a_centeredc                 C   s’   ddddg}ddddg}ddg}dD ]h}t  |¡ |¡}t  |¡ |¡}tjj|||dd�\}}}t|ddgƒ t|d	d
gƒ t|dd
gƒ q$d S )Nr   r	   r   r   r%   r   Tr'   r   r   r(   r   r)   r"   r"   r#   Útest_b_centered9   s       ÿz'Test_measurements_stats.test_b_centeredc                 C   s’   ddddg}ddddg}ddg}dD ]h}t  |¡ |¡}t  |¡ |¡}tjj|||dd	�\}}}t|ddgƒ t|d
dgƒ t|ddgƒ q$d S )Nr   r	   r   r   ç        g      "@r   Tr'   r   r   r(   r   r)   r"   r"   r#   Útest_nonint_labelsF   s       ÿz*Test_measurements_stats.test_nonint_labelsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r&   r*   r+   r-   r"   r"   r"   r#   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTest_measurements_selectzEndimage._measurements._select() is a utility used by other functions.c                 C   s   ddddg}ddddgddgfddddgddgfddddgddgfg}|D �]N\}}t jj|||d�}tt|ƒdkƒ t jj|||d	d
�}tt|ƒdkƒ t|d ddgƒ t jj|||d	d�}tt|ƒdkƒ t|d ddgƒ t jj|||d	d	d�}tt|ƒdkƒ t|d ddgƒ t|d ddgƒ t|d jjdƒ t jj|||d	d	d�}tt|ƒdkƒ t|d ddgƒ t|d ddgƒ t|d jjdƒ qJd S )Nr   r	   r   r   r%   r,   ç      @r   T)r   r   Úfind_max)r   r   Úfind_min)r   r   r5   Zfind_min_positionsé   Úi)r   r   r4   Zfind_max_positions)	r   r   Ú_selectr   Úlenr   r   ÚdtypeÚkind)r   r   Zcasesr   r   Úresultr"   r"   r#   Ú
test_basicW   sd    ý  ÿ   ÿ   ÿ   þ   þz#Test_measurements_select.test_basicN)r.   r/   r0   r1   r=   r"   r"   r"   r#   r2   T   s   r2   c                  C   s0   t  g ¡} t | ¡\}}t|dƒ t|dƒ d S ©Nr	   ©r   Úonesr   Úlabelr   r   ©ÚdataÚoutÚnr"   r"   r#   Útest_label01z   s    

rF   c                  C   s0   t  g ¡} t | ¡\}}t|dƒ t|dƒ d S ©Nr   ©r   Úzerosr   rA   r   r   rB   r"   r"   r#   Útest_label02�   s    

rJ   c                  C   s4   t  dg¡} t | ¡\}}t|dgƒ t|dƒ d S r>   r?   rB   r"   r"   r#   Útest_label03ˆ   s    rK   c                  C   s4   t  dg¡} t | ¡\}}t|dgƒ t|dƒ d S ©Nr	   r   rH   rB   r"   r"   r#   Útest_label04�   s    rM   c                  C   s<   t  dg¡} t | ¡\}}t|dddddgƒ t|dƒ d S )Né   r	   r?   rB   r"   r"   r#   Útest_label05–   s    rO   c                  C   sH   t  ddddddg¡} t | ¡\}}t|ddddddgƒ t|dƒ d S ©Nr	   r   r   r6   ©r   r   r   rA   r   r   rB   r"   r"   r#   Útest_label06�   s    rR   c                  C   sØ   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t | ¡\}}t|ddddddgddddddgddddddgddddddgddddddgddddddggƒ t|dƒ d S rG   rQ   rB   r"   r"   r#   Útest_label07¤   s     ûûrS   c                  C   sØ   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t | ¡\}}t|ddddddgddddddgddddddgddddddgddddddgddddddggƒ t|dƒ d S ©Nr	   r   r   r6   r   rQ   rB   r"   r"   r#   Útest_label08µ   s     ûûrU   c                  C   sæ   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t dd¡}t | |¡\}}t|ddddddgddddddgddddddgddddddgddddddgddddddggƒ t|dƒ d S rP   ©r   r   r   Úgenerate_binary_structurerA   r   r   ©rC   ÚstructrD   rE   r"   r"   r#   Útest_label09Æ   s"    ûûrZ   c                  C   s®   t  ddddddgddddddgddddddgddddddgg¡} t dd¡}t | |¡\}}t|ddddddgddddddgddddddgddddddggƒ t|dƒ d S )Nr   r	   r   rV   rX   r"   r"   r#   Útest_label10Ø   s    ýýr[   c                  C   sè   t D ]Þ} t ddddddgddddddgddddddgddddddgddddddgddddddgg| ¡}t |¡\}}ddddddgddddddgddddddgddddddgddddddgddddddgg}t||ƒ t|dƒ qd S rT   ©r
   r   r   r   rA   r   r   ©ÚtyperC   rD   rE   Úexpectedr"   r"   r#   Útest_label11æ   s(    ûûû
r`   c                  C   sè   t D ]Þ} t ddddddgddddddgddddddgddddddgddddddgddddddgg| ¡}tj||d�}ddddddgddddddgddddddgddddddgddddddgddddddgg}t||ƒ t|dƒ qd S )Nr	   r   ©Úoutputr   r6   r   r\   )r^   rC   rE   r_   r"   r"   r#   Útest_label11_inplaceù   s(    ûûû
rc   c                  C   sÌ   t D ]Â} t ddddddgddddddgddddddgddddddgddddddgg| ¡}t |¡\}}ddddddgddddddgddddddgddddddgddddddgg}t||ƒ t|dƒ qd S ©Nr   r	   r\   r]   r"   r"   r#   Útest_label12  s$    üüü
re   c                  C   s   t D ]ö} t dddddddddddgdddddddddddgdddddddddddgdddddddddddgg| ¡}t |¡\}}dddddddddddgdddddddddddgdddddddddddgdddddddddddgg}t||ƒ t|dƒ qd S rL   r\   r]   r"   r"   r#   Útest_label13  s     ýüý
rf   c                  C   sL   t  dg¡} tD ]6}t jdg|d�}tj| |d�}t|dƒ t|dƒ qd S )NrN   ©r:   ra   r	   )r   r@   r
   rI   r   rA   r   r   ©rC   Útrb   rE   r"   r"   r#   Útest_label_output_typed-  s    
rj   c                  C   sD   t  dg¡} tD ].}tj| |d�\}}t|dƒ |j|kst‚qd S )NrN   ra   r	   )r   r@   r
   r   rA   r   r:   ÚAssertionErrorrh   r"   r"   r#   Útest_label_output_dtype6  s
    
rl   c                  C   s>   t  dg¡} tD ](}t  dg|¡}tttftj| |d� qd S )NrN   é
   ra   )	r   r@   r
   rI   Úassert_raisesÚRuntimeErrorÚ
ValueErrorr   rA   )rC   ri   rb   r"   r"   r#   Útest_label_output_wrong_size>  s      ÿrq   c               	   C   s  t  tj tj t¡dd¡¡} t  tj tj t¡dd¡¡}t  tj tj t¡dd¡¡}|  d¡} | d¡}| d¡}d}t| j	d ƒD ]t}| |d d …d d …f }t|j	d ƒD ]J}||d d …d d …f }t
t ||¡d ||d d …d d …f ƒ |d7 }q²qŠd S )	NrC   zlabel_inputs.txtzlabel_strels.txtzlabel_results.txt)éÿÿÿÿé   rs   )rr   r6   r6   r   r	   )r   ZloadtxtÚosÚpathÚjoinÚdirnameÚ__file__r   ÚrangeÚshaper   r   rA   )rC   ZstrelsÚresultsÚrr7   ÚdÚjÚsr"   r"   r#   Útest_label_structuring_elementsF  s4    ÿ ÿ

  ÿ

  ÿ


(r€   c                  C   sH   ddd„} t  t j¡t  d¡krDd}t j t  |¡¡ |¡}| |ƒ d S )Nçffffffæ?r   c                 S   s8   | |k}t |jƒ}t |t ||¡¡\}}t |¡}d S )N)r9   rz   r   rA   rW   Úfind_objects)ZimgZthreshÚsizeÚmaskZrankZlaÚcoÚ_r"   r"   r#   ÚSEZ  s    

ÿztest_ticket_742.<locals>.SEr7   )r6   éØ  rˆ   )r�   r   )r   r:   ZintpÚrandomÚrandÚprodr   )r‡   rz   Úar"   r"   r#   Útest_ticket_742Y  s
    
r�   c                  C   sl   t  d¡} d| dd…dd…f< d| dd…dd…f< d| d< d| d< d| d< t | t  d	¡¡d dksht‚dS )
z/Github issue #3025 - improper merging of labels)é<   i@  r	   Né  i  )é$   r�   )é#   i  )r‘   i  )r6   r6   )r   rI   r   rA   r@   rk   )r}   r"   r"   r#   Útest_gh_issue_3025h  s    
r’   c                  C   sD   t j dd¡} t | dk¡\}}t|jt jt jfkƒ t 	|¡ d S )Nrm   r(   )
r   r‰   rŠ   r   rA   r   r:   Úint32Zint64r‚   )Z
test_arrayrA   Zno_featuresr"   r"   r#   Útest_label_default_dtypes  s    r”   c                  C   s*   t jg td�} t | ¡}t|dgkƒ d S )Nrg   r"   )r   r@   Úintr   r‚   r   ©rC   rD   r"   r"   r#   Útest_find_objects01{  s    
r—   c                  C   s(   t jg td�} t | ¡}t|g kƒ d S )Nrg   )r   rI   r•   r   r‚   r   r–   r"   r"   r#   Útest_find_objects02�  s    
r˜   c                  C   s4   t jdgtd�} t | ¡}t|tddd ƒfgƒ d S )Nr	   rg   r   ©r   r@   r•   r   r‚   r   Úslicer–   r"   r"   r#   Útest_find_objects03‡  s    
r›   c                  C   s(   t jdgtd�} t | ¡}t|g ƒ d S )Nr	   rg   )r   rI   r•   r   r‚   r   r–   r"   r"   r#   Útest_find_objects04�  s    
rœ   c                  C   s4   t jdgtd�} t | ¡}t|tddd ƒfgƒ d S )NrN   rg   r   r™   r–   r"   r"   r#   Útest_find_objects05“  s    
r�   c                  C   sR   t  ddddddg¡} t | ¡}t|tddd ƒftddd ƒftddd ƒfgƒ d S ©Nr	   r   r   r6   r   rN   r   ©r   r   r   r‚   r   rš   r–   r"   r"   r#   Útest_find_objects06™  s    
þr    c                  C   sv   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t | ¡}t|g ƒ d S rG   )r   r   r   r‚   r   r–   r"   r"   r#   Útest_find_objects07¡  s    û
r¡   c                  C   sÎ   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t | ¡}t|tddd ƒtddd ƒftddd ƒtddd ƒftddd ƒtddd ƒftddd ƒtddd ƒfgƒ d S rž   rŸ   r–   r"   r"   r#   Útest_find_objects08¬  s    û
ýr¢   c                  C   sº   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} t | ¡}t|tddd ƒtddd ƒftddd ƒtddd ƒfd tddd ƒtddd ƒfgƒ d S )Nr	   r   r   r   r6   rN   r   rŸ   r–   r"   r"   r#   Útest_find_objects09º  s    û
ýr£   c                  C   sÄ   t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡} tj| dd�}dddg}tt| ¡ ƒ|ƒ i }|D ]}t  | |k¡||< q�tj| dd�}t||ƒ dS )z Test dictionary keys and entriesr	   r   r   r   )Zignore_valueN)r   r   r   Úvalue_indicesr   ÚlistÚkeysÚwhere)rC   ÚviZ	true_keysZtrueviÚkr"   r"   r#   Útest_value_indices01È  s    û
rª   c               	   C   s:   t jdt jd�} d}tt|d�� t | ¡ W 5 Q R X dS )zTest input checking)rN   r   rg   z(Parameter 'arr' must be an integer array)ÚmatchN)r   rI   Zfloat32rn   rp   r   r¤   )rC   Úmsgr"   r"   r#   Útest_value_indices02Ü  s    r­   c                  C   sŽ   dD ]„} t jddg ddg  ddg  t jd� | ¡}t  |¡}t |¡}tt| 	¡ ƒt|ƒƒ |D ] }t  
||k¡}t|| |ƒ qfqdS )z2Test different input array shapes, from 1-D to 4-D))r�   )é   r   )r6   r6   r   )r6   r6   r   r   é   r	   r   r6   rg   N)r   r   r“   r   Úuniquer   r¤   r   r¥   r¦   r§   )rz   rŒ   ZtrueKeysr¨   r©   ZtrueNdxr"   r"   r#   Útest_value_indices03ä  s    0

r±   c                  C   s.   t D ]$} t g | ¡}t |¡}t|dƒ qd S )Nr,   )r
   r   r   r   Úsumr   ©r^   Úinputrb   r"   r"   r#   Ú
test_sum01ð  s    
rµ   c                  C   s2   t D ](} t ddg| ¡}t |¡}t|dƒ qd S )Nr   r   r,   )r
   r   rI   r   r²   r   r³   r"   r"   r#   Ú
test_sum02÷  s    
r¶   c                  C   s.   t D ]$} t g | ¡}t |¡}t|dƒ qd S )Nr   )r
   r   r@   r   r²   r   r³   r"   r"   r#   Ú
test_sum03þ  s    
r·   c                  C   s2   t D ](} t ddg| ¡}t |¡}t|dƒ qd S )Nr	   r   ç      @©r
   r   r   r   r²   r   r³   r"   r"   r#   Ú
test_sum04  s    
rº   c                  C   s:   t D ]0} t ddgddgg| ¡}t |¡}t|dƒ qd S )Nr	   r   r6   r   g      $@r¹   r³   r"   r"   r#   Ú
test_sum05  s    
r»   c                  C   s>   t  g t¡} tD ](}t  g |¡}tj|| d�}t|dƒ qd S )N©r   r,   ©r   r   Úboolr
   r   r²   r   ©r   r^   r´   rb   r"   r"   r#   Ú
test_sum06  s
    rÀ   c                  C   sF   t  ddgt¡} tD ],}t  ddg|¡}tj|| d�}t|dƒ qd S )Nr   r   r¼   r,   )r   r@   r¾   r
   rI   r   r²   r   r¿   r"   r"   r#   Ú
test_sum07  s
    rÁ   c                  C   sF   t  ddgt¡} tD ],}t  ddg|¡}tj|| d�}t|dƒ qd S )Nr	   r   r   r¼   r   r½   r¿   r"   r"   r#   Ú
test_sum08#  s
    rÂ   c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S )Nr	   r   r   r6   r   r¼   ç      @)r   r   r¾   r
   r   r²   r   r¿   r"   r"   r#   Ú
test_sum09+  s
    rÄ   c                  C   sD   t  ddgt¡} t  ddgddggt¡}tj|| d�}t|dƒ d S ©Nr	   r   r   r6   r   r¼   ç       @)r   r   r¾   r   r²   r   ©r   r´   rb   r"   r"   r#   Ú
test_sum103  s    rÈ   c                  C   sR   t  ddgt j¡} tD ]6}t  ddgddgg|¡}tj|| dd�}t|dƒ qd S )Nr	   r   r6   r   r   ç      @)r   r   Úint8r
   r   r²   r   r¿   r"   r"   r#   Ú
test_sum11:  s    ÿrË   c                  C   sf   t  ddgddggt j¡} tD ]B}t  ddgddgg|¡}tj|| dddgd�}t|ddd	gƒ qd S ©
Nr	   r   r   r6   é   r   rÃ   r,   g      @)r   r   rÊ   r
   r   r²   r   r¿   r"   r"   r#   Ú
test_sum12C  s
    rÎ   c                  C   sŒ   t  ddgddggt j¡} tD ]h}t  ddgddgg|¡}tj|| dddgd�}tj|| dddgd�}||k ¡ svt‚t	|ddd	gƒ qd S rÌ   )
r   r   rÊ   r
   r   r²   Z
sum_labelsÚallrk   r   )r   r^   r´   Z
output_sumZoutput_labelsr"   r"   r#   Útest_sum_labelsK  s      ÿrÐ   c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S rÅ   )r   r   r¾   r
   r   Úmeanr   r¿   r"   r"   r#   Útest_mean01W  s
    rÒ   c                  C   sD   t  ddgt¡} t  ddgddggt¡}tj|| d�}t|dƒ d S ©Nr	   r   r   r6   r   r¼   r   )r   r   r¾   r   rÑ   r   rÇ   r"   r"   r#   Útest_mean02_  s    rÔ   c                  C   sN   t  ddg¡} tD ]6}t  ddgddgg|¡}tj|| dd�}t|dƒ qd S )Nr	   r   r6   r   r   r¸   )r   r   r
   r   rÑ   r   r¿   r"   r"   r#   Útest_mean03f  s    ÿrÕ   c               	   C   s–   t  ddgddggt j¡} t jdd��f tD ]Z}t  ddgddgg|¡}tj|| dddgd�}t|d	dg d
dgƒ tt  	|d ¡ƒ q,W 5 Q R X d S )Nr	   r   r   Úignore©rÏ   r6   rÍ   r   r   rÃ   ç      @)
r   r   rÊ   Úerrstater
   r   rÑ   r   r   Úisnanr¿   r"   r"   r#   Útest_mean04o  s    ÿrÛ   c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S rÓ   )r   r   r¾   r
   r   Úminimumr   r¿   r"   r"   r#   Útest_minimum01z  s
    rÝ   c                  C   sD   t  ddgt¡} t  ddgddggt¡}tj|| d�}t|dƒ d S ©Nr	   r   r   r   r¼   r   )r   r   r¾   r   rÜ   r   rÇ   r"   r"   r#   Útest_minimum02‚  s    rß   c                  C   sN   t  ddg¡} tD ]6}t  ddgddgg|¡}tj|| dd�}t|dƒ qd S )Nr	   r   r6   r   r   rÆ   )r   r   r
   r   rÜ   r   r¿   r"   r"   r#   Útest_minimum03‰  s    ÿrà   c                  C   sb   t  ddgddgg¡} tD ]B}t  ddgddgg|¡}tj|| dddgd�}t|ddd	gƒ qd S )
Nr	   r   r6   r   rÍ   r   rÆ   rÃ   r,   )r   r   r
   r   rÜ   r   r¿   r"   r"   r#   Útest_minimum04’  s    ÿrá   c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S )Nr	   r   r   r6   r   r¼   r¸   )r   r   r¾   r
   r   Úmaximumr   r¿   r"   r"   r#   Útest_maximum01›  s
    rã   c                  C   sD   t  ddgt¡} t  ddgddggt¡}tj|| d�}t|dƒ d S rÞ   )r   r   r¾   r   râ   r   rÇ   r"   r"   r#   Útest_maximum02£  s    rä   c                  C   sN   t  ddg¡} tD ]6}t  ddgddgg|¡}tj|| dd�}t|dƒ qd S )Nr	   r   r6   r   r   rÃ   )r   r   r
   r   râ   r   r¿   r"   r"   r#   Útest_maximum03ª  s    ÿrå   c                  C   sb   t  ddgddgg¡} tD ]B}t  ddgddgg|¡}tj|| dddgd�}t|ddd	gƒ qd S )
Nr	   r   r6   r   rÍ   r   r¸   rÃ   r,   )r   r   r
   r   râ   r   r¿   r"   r"   r#   Útest_maximum04³  s    ÿræ   c                  C   s$   t  dddg¡} tt | ¡dƒ d S )Néýÿÿÿéþÿÿÿrr   )r   r   r   r   râ   )r   r"   r"   r#   Útest_maximum05¼  s    ré   c               	   C   sŽ   t  ddddgddddgddddgddddgg¡} t  ddddgddddgddddgddddgg¡}tj| |dddgd	�}t|d
ddgƒ d S )Nr	   r   r   rN   r6   r   rs   r%   r   rØ   rÃ   rÉ   )r   r   r   Úmedianr   ©rŒ   r   rb   r"   r"   r#   Útest_median01Â  s    


ý


ýrì   c               	   C   sJ   t  ddddgddddgddddgddddgg¡} t | ¡}t|d	ƒ d S )
Nr	   r   r   rN   r6   r   rs   r%   r   ©r   r   r   rê   r   ©rŒ   rb   r"   r"   r#   Útest_median02Ï  s    


ý
rï   c               	   C   s€   t  ddddgddddgddddgddddgg¡} t  ddddgddddgddddgddddgg¡}tj| |d	�}t|d
ƒ d S )Nr	   r   r   rN   r6   r   rs   r%   r¼   r¸   rí   rë   r"   r"   r#   Útest_median03Ø  s    


ý


ýrð   c                  C   s:   t jddgtd�} tj| t  d¡dgd�}t|dgƒ d S )Nr	   rg   ©r   r   r   )r   Úasarrayr¾   r   rê   r@   r   rî   r"   r"   r#   Útest_median_gh12836_boolå  s    ró   c                  C   s<   t jddgt jd�} tj| t  d¡dgd�}t|dgƒ d S )NéA   éF   rg   rñ   r	   r   g     àP@)r   rò   rÊ   r   rê   r@   r   rî   r"   r"   r#   Útest_median_no_int_overflowì  s    rö   c                  C   sh   t jdd��R tD ]F} t  g | ¡}tƒ �}| td¡ t |¡}W 5 Q R X t	t  
|¡ƒ qW 5 Q R X d S ©NrÖ   r×   zMean of empty slice)r   rÙ   r
   r   r   ÚfilterÚRuntimeWarningr   Úvariancer   rÚ   ©r^   r´   Úsuprb   r"   r"   r#   Útest_variance01ó  s    rý   c                  C   s0   t D ]&} t dg| ¡}t |¡}t|dƒ qd S ©Nr	   r,   ©r
   r   r   r   rú   r   r³   r"   r"   r#   Útest_variance02ý  s    
r   c                  C   s2   t D ](} t ddg| ¡}t |¡}t|dƒ qd S ©Nr	   r6   r   rÿ   r³   r"   r"   r#   Útest_variance03  s    
r  c                  C   s(   t  ddgt¡} t | ¡}t|dƒ d S )Nr	   r   g      Ð?)r   r   r¾   r   rú   r   ©r´   rb   r"   r"   r#   Útest_variance04  s    
r  c                  C   sB   dddg} t D ].}t dddg|¡}t || d¡}t|dƒ qd S ©Nr   r6   r	   rÍ   r   rÿ   r¿   r"   r"   r#   Útest_variance05  s
    
r  c               	   C   sn   dddddg} t jdd��J tD ]>}t  dddddg|¡}t || dddg¡}t|d	d	d
gƒ q W 5 Q R X d S ©Nr   r6   r   rÖ   r×   r	   rÍ   rm   r   r,   )r   rÙ   r
   r   r   rú   r   r¿   r"   r"   r#   Útest_variance06  s    r  c                  C   sh   t jdd��R tD ]F} t  g | ¡}tƒ �}| td¡ t |¡}W 5 Q R X t	t  
|¡ƒ qW 5 Q R X d S r÷   )r   rÙ   r
   r   r   rø   rù   r   Ústandard_deviationr   rÚ   rû   r"   r"   r#   Útest_standard_deviation01"  s    r
  c                  C   s0   t D ]&} t dg| ¡}t |¡}t|dƒ qd S rþ   ©r
   r   r   r   r	  r   r³   r"   r"   r#   Útest_standard_deviation02,  s    
r  c                  C   s8   t D ].} t ddg| ¡}t |¡}t|t d¡ƒ qd S r  )r
   r   r   r   r	  r   Úsqrtr³   r"   r"   r#   Útest_standard_deviation033  s    
r  c                  C   s(   t  ddgt¡} t | ¡}t|dƒ d S )Nr	   r   r(   )r   r   r¾   r   r	  r   r  r"   r"   r#   Útest_standard_deviation04:  s    
r  c                  C   sB   dddg} t D ].}t dddg|¡}t || d¡}t|dƒ qd S r  r  r¿   r"   r"   r#   Útest_standard_deviation05@  s
    
r  c               	   C   sn   dddddg} t jdd��J tD ]>}t  dddddg|¡}t || dddg¡}t|d	d	d
gƒ q W 5 Q R X d S r  ©r   rÙ   r
   r   r   r	  r   r¿   r"   r"   r#   Útest_standard_deviation06H  s    r  c               	   C   sV   dg} t jdd��: tD ].}t  dg|¡}t || dg¡}t|dgƒ qW 5 Q R X d S )Nr	   rÖ   r×   gl�§ `y¿r   r  r¿   r"   r"   r#   Útest_standard_deviation07Q  s    r  c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S )Nr	   r   r   r6   r   r¼   ©r   r   )r   r   r¾   r
   r   Úminimum_positionr   r¿   r"   r"   r#   Útest_minimum_position01Z  s
    r  c               	   C   sL   t D ]B} t ddddgddddgddddgg| ¡}t |¡}t|dƒ qd S ©	NrN   r   r   r6   rs   r   r	   ©r	   r   ©r
   r   r   r   r  r   r³   r"   r"   r#   Útest_minimum_position02b  s    

þþ
r  c                  C   sB   t  ddddgddddgddddggt¡} t | ¡}t|dƒ d S r  ©r   r   r¾   r   r  r   r  r"   r"   r#   Útest_minimum_position03k  s    

þþ
r  c                  C   sB   t  ddddgddddgddddggt¡} t | ¡}t|dƒ d S )NrN   r   r   r6   rs   r	   r  r  r  r"   r"   r#   Útest_minimum_position04s  s    

þþ
r  c               	   C   sZ   ddddg} t D ]D}t ddddgddddgddddgg|¡}t || ¡}t|dƒ qd S )	Nr	   r   r   r   rN   r6   rs   )r   r   r  r¿   r"   r"   r#   Útest_minimum_position05{  s    

þþr  c               	   C   s\   ddddg} t D ]F}t ddddgddddgddddgg|¡}t || d¡}t|dƒ qd S )	Nr	   r   r6   r   rN   rs   r   ©r   r	   r  r¿   r"   r"   r#   Útest_minimum_position06…  s    

þþr   c               	   C   sr   ddddg} t D ]\}t ddddgddddgddddgg|¡}t || ddg¡}t|d dƒ t|d d	ƒ qd S )
Nr	   r   r6   r   rN   rs   r   r  r  r  r¿   r"   r"   r#   Útest_minimum_position07�  s    

þþÿr!  c                  C   sN   t  ddgt¡} tD ]4}t  ddgddgg|¡}tj|| d�}t|dƒ qd S )Nr	   r   r   r6   r   r¼   )r	   r   )r   r   r¾   r
   r   Úmaximum_positionr   r¿   r"   r"   r#   Útest_maximum_position01›  s    ÿr#  c               	   C   sL   t D ]B} t ddddgddddgddddgg| ¡}t |¡}t|dƒ qd S )	NrN   r   r   r6   rs   rÍ   r	   r  ©r
   r   r   r   r"  r   r³   r"   r"   r#   Útest_maximum_position02¤  s    

þþ
r%  c                  C   sB   t  ddddgddddgddddggt¡} t | ¡}t|dƒ d S )	NrN   r   r   r6   rs   rÍ   r	   r  )r   r   r¾   r   r"  r   r  r"   r"   r#   Útest_maximum_position03­  s    

þþ
r&  c               	   C   sZ   ddddg} t D ]D}t ddddgddddgddddgg|¡}t || ¡}t|d	ƒ qd S )
Nr	   r   r   r   rN   r6   rs   rÍ   ©r	   r	   r$  r¿   r"   r"   r#   Útest_maximum_position04µ  s    

þþr(  c               	   C   s\   ddddg} t D ]F}t ddddgddddgddddgg|¡}t || d¡}t|d	ƒ qd S )
Nr	   r   r   r   rN   r6   rs   rÍ   r  r$  r¿   r"   r"   r#   Útest_maximum_position05¿  s    

þþr)  c               	   C   sr   ddddg} t D ]\}t ddddgddddgddddgg|¡}t || ddg¡}t|d d	ƒ t|d d
ƒ qd S )Nr	   r   r   r   rN   r6   rs   rÍ   r  r'  r$  r¿   r"   r"   r#   Útest_maximum_position06É  s    

þþÿr*  c               	   C   sx   t  ddddg¡} tD ]\}t  ddddgdd	d
dgddddgg|¡}t || ddg¡}t|d dƒ t|d dƒ qd S )Nr   rØ   r,   g      @rN   r   r   r6   rs   rÍ   r	   r   r  )r   r6   )r   r   r
   r   r"  r   r¿   r"   r"   r#   Útest_maximum_position07Õ  s    

þþÿr+  c                  C   sŽ   t  ddgt¡} tD ]t}t  ddgddgg|¡}tj|| d�}tj|| d�}tj|| d�}tj|| d�}tj	|| d�}t
|||||fƒ qd S )Nr	   r   r   r6   r   r¼   )r   r   r¾   r
   r   ÚextremarÜ   râ   r  r"  r   ©r   r^   r´   Zoutput1Zoutput2Zoutput3Zoutput4Zoutput5r"   r"   r#   Útest_extrema01â  s    ÿÿr.  c                  C   s–   t  ddg¡} tD ]~}t  ddgddgg|¡}tj|| dd�}tj|| dd�}tj|| dd�}tj|| dd�}tj|| dd�}t	|||||fƒ qd S )Nr	   r   r6   r   r   )
r   r   r
   r   r,  rÜ   râ   r  r"  r   r-  r"   r"   r#   Útest_extrema02ð  s*    ÿÿÿ ÿ ÿr/  c                  C   sâ   t  ddgddgg¡} tD ]Â}t  ddgddgg|¡}tj|| dddgd�}tj|| dddgd�}tj|| dddgd�}tj|| dddgd�}tj|| dddgd�}t	|d |ƒ t	|d |ƒ t	|d |ƒ t	|d |ƒ qd S )Nr	   r   r6   r   rÍ   r   r   )
r   r   r
   r   r,  rÜ   râ   r  r"  r   r-  r"   r"   r#   Útest_extrema03  s0    ÿÿÿ ÿ ÿr0  c               	   C   sÖ   ddddg} t D ]À}t ddddgddddgddddgg|¡}t || ddg¡}t || ddg¡}t || ddg¡}t || ddg¡}t || ddg¡}t	|d |ƒ t	|d |ƒ t	|d |ƒ t	|d |ƒ qd S )	Nr	   r   r   r   rN   r6   rs   rÍ   )
r
   r   r   r   r,  rÜ   râ   r  r"  r   r-  r"   r"   r#   Útest_extrema04  s*    

þþÿÿr1  c                  C   sB   ddg} t D ]0}t ddgddgg|¡}t |¡}t|| ƒ qd S )Nr,   r	   r   ©r
   r   r   r   Úcenter_of_massr   ©r_   r^   r´   rb   r"   r"   r#   Útest_center_of_mass01(  s
    
r5  c                  C   sB   ddg} t D ]0}t ddgddgg|¡}t |¡}t|| ƒ qd S rL   r2  r4  r"   r"   r#   Útest_center_of_mass020  s
    
r6  c                  C   sB   ddg} t D ]0}t ddgddgg|¡}t |¡}t|| ƒ qd S rd   r2  r4  r"   r"   r#   Útest_center_of_mass038  s
    
r7  c                  C   sB   ddg} t D ]0}t ddgddgg|¡}t |¡}t|| ƒ qd S rL   r2  r4  r"   r"   r#   Útest_center_of_mass04@  s
    
r8  c                  C   sB   ddg} t D ]0}t ddgddgg|¡}t |¡}t|| ƒ qd S )Nr(   r	   r2  r4  r"   r"   r#   Útest_center_of_mass05H  s
    
r9  c                  C   s8   ddg} t  ddgddggt¡}t |¡}t|| ƒ d S )Nr(   r	   r   r6   ©r   r   r¾   r   r3  r   ©r_   r´   rb   r"   r"   r#   Útest_center_of_mass06P  s    
r<  c                  C   sB   ddg} ddg}t  ddgddggt¡}t || ¡}t||ƒ d S )Nr	   r   r(   r,   r   r6   r:  ©r   r_   r´   rb   r"   r"   r#   Útest_center_of_mass07W  s
    r>  c                  C   sD   ddg} ddg}t  ddgddggt¡}t || d¡}t||ƒ d S )Nr	   r   r(   r   rN   r6   r:  r=  r"   r"   r#   Útest_center_of_mass08_  s
    r?  c                  C   sH   ddg} ddg}t  ddgddggt¡}t || ddg¡}t||ƒ d S )Nr	   r   )r(   r,   )r(   r   r:  r=  r"   r"   r#   Útest_center_of_mass09g  s
    r@  c                  C   s2   t  d¡} t  d¡}t |ddd¡}t|| ƒ d S )Nrm   r   )r   r@   Zaranger   Ú	histogramr   r;  r"   r"   r#   Útest_histogram01o  s    

rB  c               
   C   s^   ddddddddg} dddddg}t  ddddddddg¡}t |ddd| d¡}t||ƒ d S )Nr	   r   r   r6   r   rN   ©r   r   r   rA  r   r=  r"   r"   r#   Útest_histogram02v  s
    rD  c               
   C   s~   ddddddddg} dddddg}dddddg}t  ddddddddg¡}t |ddd| d¡}t|d |ƒ t|d |ƒ d S )Nr	   r   r   r6   r   rN   r  rC  )r   Z	expected1Z	expected2r´   rb   r"   r"   r#   Útest_histogram03~  s    rE  c               	   C   s2  t  dddddgdddddgdddddgg¡} t  dddddgdddddgdddddgg¡}tj| |ddgd	�}t|d
dgƒ tj| |ddgd	�}t|ddgƒ tj| |ddgd	�}t|t  ddg¡ƒ tj	| |ddgd	�}t|d
dgƒ tj
| |ddgd	�}t|ddgƒ tj| |ddgd	�}t|ddgƒ d S )NrN   r   r   rÍ   r%   r6   r	   r   r   r3   rÃ   rØ   r   )r   r   r   rÑ   r   rú   r	  r   r  rê   rÜ   râ   )rŒ   ZlblrÑ   ÚvarZstdZmedÚminÚmaxr"   r"   r#   Útest_stat_funcs_2d‰  s    ..rI  c                   @   sL   e Z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S )ÚTestWatershedIftc                 C   sÖ  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}tj||dddgdddgdddggd�}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S ©Nr   r	   rr   ©Ú	structure©r   r   Úuint8rÊ   r   Úwatershed_iftr   ©r   rC   ÚmarkersrD   r_   r"   r"   r#   Útest_watershed_ift01¢  sH    ùùùùþùz%TestWatershedIft.test_watershed_ift01c                 C   sº  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t ||¡}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S )Nr   r	   rr   rN  rQ  r"   r"   r#   Útest_watershed_ift02À  sB    ùùùùùz%TestWatershedIft.test_watershed_ift02c                 C   sŠ  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t ||¡}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S )Nr   r	   r   r6   rr   rN  rQ  r"   r"   r#   Útest_watershed_ift03Ü  s<    úúúúúz%TestWatershedIft.test_watershed_ift03c                 C   s¦  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}tj||dddgdddgdddggd�}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S )Nr   r	   r   r6   rr   rL  rN  rQ  r"   r"   r#   Útest_watershed_ift04õ  sF    úúúùþÿúz%TestWatershedIft.test_watershed_ift04c                 C   s¦  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}tj||dddgdddgdddggd�}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S )Nr   r	   r6   r   rr   rL  rN  rQ  r"   r"   r#   Útest_watershed_ift05  sF    úúúùþÿúz%TestWatershedIft.test_watershed_ift05c                 C   sv  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}tj||dddgdddgdddggd�}dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||ƒ d S rK  rN  rQ  r"   r"   r#   Útest_watershed_ift06/  s@    ûûûûþÿûz%TestWatershedIft.test_watershed_ift06c                 C   s°  d}t j|t jd�}| ¡ }t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡|d< t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t j|t jd�}| ¡ }tj||dddgdddgdddgg|d� dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t	||ƒ d S )N)rs   r   rg   r   r	   .rr   )rM  rb   )
r   rI   rO  Z	transposer   rÊ   Zint16r   rP  r   ©r   rz   rC   rR  rD   r_   r"   r"   r#   Útest_watershed_ift07H  sL    ûûûûþüûz%TestWatershedIft.test_watershed_ift07c                 C   sb   d}t  ddgddggt j¡}t  ddgddggt j¡}t ||¡}ddgddgg}t||ƒ d S )Nr   é   r   r	   )r   r   Zuint16rÊ   r   rP  r   rY  r"   r"   r#   Útest_watershed_ift08g  s     
ÿÿ
ÿÿÿz%TestWatershedIft.test_watershed_ift08N)r.   r/   r0   rS  rT  rU  rV  rW  rX  rZ  r\  r"   r"   r"   r#   rJ     s   rJ  )�Úos.pathrt   Únumpyr   Znumpy.testingr   r   r   r   r   r   Zpytestr   rn   Zscipy.ndimager   Ú r
   r   r2   rF   rJ   rK   rM   rO   rR   rS   rU   rZ   r[   r`   rc   re   rf   rj   rl   rq   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á   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+  r.  r/  r0  r1  r5  r6  r7  r8  r9  r<  r>  r?  r@  rB  rD  rE  rI  rJ  r"   r"   r"   r#   Ú<module>   sè    E&								
	
			

		

