o
    ?Hh                     @   s  d dl Z d dlZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlZd dlmZ d dlmZ ddlmZ d dlmZ ejjZeejded	d
dgdgZe jdko\ejdk Zed	ddG dd dZG dd dZdd Z dd Z!ejj"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d	d+dd,d- Z,d.d/ Z-d0d1 Z.ed	d2dd3d4 Z/ed	d2dd5d6 Z0d7d8 Z1d9d: Z2ed
d;d<d=d> Z3d?d@ Z4ed
dAd<G dBdC dCZ5dDdE Z6dFdG Z7dHdI Z8dJdK Z9dLdM Z:dNdO Z;dPdQ Z<dRdS Z=dTdU Z>dVdW Z?dXdY Z@dZd[ ZAd\d] ZBd^d_ ZCd`da ZDdbdc ZEddde ZFdfdg ZGdhdi ZHdjdk ZIdldm ZJdndo ZKdpdq ZLdrds ZMdtdu ZNdvdw ZOdxdy ZPdzd{ ZQd|d} ZRd~d ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd ZtddÄ Zuddń ZvddǄ ZwddɄ Zxdd˄ Zydd̈́ Zzddτ Z{ddф Z|ddӄ Z}ddՄ Z~ddׄ Zddل Zddۄ Zed	ddddބ Zdd Zed
dd<G dd dZed	dejdejejgdd ZdS )    N)suppress_warnings)is_jaxis_torcharray_namespacexp_assert_equalxp_assert_closeassert_array_almost_equalassert_almost_equal)raises   )types)array_api_compatibleskip_xp_backendsTcupyz	jax.numpy)cpu_only
exceptionsnt2z test internal numpy-only helpersnp_onlyreasonc                   @   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_statszndimage._measurements._stats() is a utility used by other functions.

        Since internal ndimage/_measurements.py code is NumPy-only,
        so is this this test class.
    c           	      C      g d}g d}ddg}dD ]>}t ||}t ||}tjj|||d\}}tr2dt jini }t|t j	ddgfi | t|t 	d	d
g qd S )Nr   r         r   r   r   r   r   r   )   )r   r   labelsindexdtyper         ?       @
nparrayreshapendimage_measurements_statsIS_WINDOWS_AND_NP1int64r   asarray	selfxpxr    r!   shpcountssums	dtype_arg r7   e/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/ndimage/tests/test_measurements.pytest_a'   s   
zTest_measurements_stats.test_ac           	      C   r   )Nr   r   r   	   r;   r   r;   r   r   r"   r   r#   r$   r%   r/   r7   r7   r8   test_b5   s   
zTest_measurements_stats.test_bc           
      C      g d}g d}ddg}dD ]J}t ||}t ||}tjj|||dd\}}}tr4dt jini }	t|t j	d	d	gfi |	 t|t 	d
dg t|t 	ddg qd S )Nr   r   r   r   r   Tr    r!   centeredr"   r   r#   r$         ?r%   
r0   r1   r2   r    r!   r3   r4   r5   centersr6   r7   r7   r8   test_a_centeredE      z'Test_measurements_stats.test_a_centeredc           
      C   r=   )Nr   r:   r   r;   r   Tr>   r"   r   r#   r$   r@   r%   rA   r7   r7   r8   test_b_centeredT   rD   z'Test_measurements_stats.test_b_centeredc           
      C   r=   )Nr   )        rF         "@rG   rF   rG   r   Tr>   r"   r   r#   r$   r@   r%   rA   r7   r7   r8   test_nonint_labelsc   rD   z*Test_measurements_stats.test_nonint_labelsN)	__name__
__module____qualname____doc__r9   r<   rC   rE   rH   r7   r7   r7   r8   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  g d}g dddgfg dddgfg ddd	gfg}|D ]\}}t jj|||d
}t|dks2J t jj|||dd}t|dksDJ t|d ddg t jj|||dd}t|dks_J t|d ddg t jj|||ddd}t|dks{J t|d ddg t|d ddg |d jjdksJ t jj|||ddd}t|dksJ t|d ddg t|d ddg |d jjdksJ qd S )N)r   r   r   r   r   r   r   r:   r;   )rF   rF         @rN   rF   rN   r   T)r    r!   find_maxr   )r    r!   find_minr   )r    r!   rP   find_min_positions   i)r    r!   rO   find_max_positions)r)   r*   _selectlenr   r"   kind)r0   r1   r2   casesr    r!   resultr7   r7   r8   
test_basicv   sJ   z#Test_measurements_select.test_basicN)rI   rJ   rK   rL   rZ   r7   r7   r7   r8   rM   s   s    rM   c                 C   4   |  g }t|\}}|dksJ |dksJ d S Nr   )onesr)   labelr1   dataoutnr7   r7   r8   test_label01      
rc   c                 C   r[   )Nr   )zerosr)   r^   r_   r7   r7   r8   test_label02   rd   rf   c                 C   s<   |  dg}t|\}}t|| dg |dksJ d S r\   r]   r)   r^   r   r.   r_   r7   r7   r8   test_label03   s   rh   c                 C   s<   |  dg}t|\}}t|| dg |dksJ d S )Nr   r   )re   r)   r^   r   r.   r_   r7   r7   r8   test_label04   s   ri   c                 C   s>   |  dg}t|\}}t|| g d |dksJ d S )N   )r   r   r   r   r   r   rg   r_   r7   r7   r8   test_label05   s   rk   c                 C   s@   |  g d}t|\}}t||  g d |dksJ d S )N)r   r   r   r   r   r   r   r   r   r   r   rR   rR   r.   r)   r^   r   r_   r7   r7   r8   test_label06   s   rn   c                 C   s   |  g dg dg dg dg dg dg}t|\}}t||  g dg dg dg dg dg dg |dks>J d S )Nr   r   r   r   r   r   r   rm   r_   r7   r7   r8   test_label07   s$   
rp   c                 C   s   |  g dg dg dg dg dg dg}t|\}}t||  g dg dg dg dg dg d	g |d
ks>J d S )N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   rR   rR   r   r   r   r   r   r   r   r   r   r   r   rm   r_   r7   r7   r8   test_label08   s    
rz   c                 C   s   |  g dg dg dg dg dg dg}tdd}|  |}t||\}}t||  g dg dg dg d	g d	g d
g |dksJJ d S )Nrq   rr   rs   rt   ru   r   rv   rw   )r   r   r   r   r   r   )r   r   r   rR   rR   r   rR   r.   r)   generate_binary_structurer^   r   r1   r`   structra   rb   r7   r7   r8   test_label09   s$   

r   c              	   C   s   |  g dg dg dg dg}tdd}|  |}t||\}}t||  g dg dg dg dg |dks>J d S )Nro   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r{   r}   r7   r7   r8   test_label10   s   

r   c              	   C   s   t D ]K}t| |}| jg dg dg dg dg dg dg|d}t|\}}g dg dg dg d	g d	g d
g}| |}t|| |dksMJ qd S )Nrq   rr   rs   rt   ru   r"   rv   rw   rx   ry   r   r   getattrr.   r)   r^   r   r1   typer"   r`   ra   rb   expectedr7   r7   r8   test_label11	  s.   



r   z inplace output is numpy-specificc              	   C   s   t D ]K}t| |}| jg dg dg dg dg dg dg|d}tj||d}g dg dg d	g d
g d
g dg}| |}t|| |dksMJ qd S )Nrq   rr   rs   rt   ru   r   outputrv   rw   rx   ry   r   r   )r1   r   r"   r`   rb   r   r7   r7   r8   test_label11_inplace  s.   



r   c                 C   s   t D ]E}t| |}| jg dg dg dg dg dg|d}t|\}}g dg dg dg dg dg}| |}t|| |dksGJ qd S )N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   ru   r   r   r   r   r7   r7   r8   test_label124  s*   



r   c                 C   s   t D ]?}t| |}| jg dg dg dg dg|d}t|\}}g dg dg dg dg}| |}t|| |dksAJ qd S )N)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   r7   r7   r8   test_label13G  s&   



r   zoutput=dtype is numpy-specificc                 C   sf   |  dg}tD ](}t| |}| jdg|d}tj||d}t|| j |j|jd |dks0J qd S )Nrj   r   r   r   )	r]   r   r   re   r)   r^   r   shaper"   r1   r`   tr"   r   rb   r7   r7   r8   test_label_output_typedY  s   
r   c                 C   s\   |  dg}tD ]#}t| |}tj||d\}}t|| j |j|jd |j|ks+J qd S )Nrj   r   r   )r]   r   r   r)   r^   r   r   r"   r   r7   r7   r8   test_label_output_dtypee  s   
r   c                 C   s\   t | r	td | dg}tD ]}t| |}| jdg|d}ttt	ft
j||d qd S )NzJAX does not raiserj   
   r   r   )r   pytestxfailr]   r   r   re   assert_raises
ValueError	TypeErrorr)   r^   )r1   r`   r   r"   r   r7   r7   r8   test_label_output_wrong_sizep  s   

r   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 ]<}||d d d d f }t	|j
d D ]'}||d d d d f }tt||d ||d d d d f dd	 |d
7 }qhqTd S )Nr`   zlabel_inputs.txtzlabel_strels.txtzlabel_results.txt)   r   )r   rR   rR   r   Fcheck_dtyper   )r&   loadtxtospathjoindirname__file__r(   r.   ranger   r   r)   r^   )	r1   r`   strelsresultsrrS   djsr7   r7   r8   test_label_structuring_elements}  s4   







,
r   z2`cupyx.scipy.ndimage` does not have `find_objects`r   c                    sZ   d fdd	}t t jt dkr+d}t jt ||} |}|| d S d S )Nffffff?r   c           	         sF   | |k}t |j}t||} |}t||\}}t|}d S )N)rV   r   r)   r|   r.   r^   find_objects)	imgthreshsizemaskrankr~   laco_r1   r7   r8   SE  s   

ztest_ticket_742.<locals>.SErS   )rR     r   )r   r   )r&   r"   intprandomrandprodr(   r.   )r1   r   r   ar7   r   r8   test_ticket_742  s   	
r   c                 C   sv   t d}d|ddddf< d|ddddf< d|d< d|d< d|d< | |}t|| d	d dks9J dS )
z/Github issue #3025 - improper merging of labels)<   i@  r   N  i  )$   r   )#   i  )r   i  )rR   rR   )r&   re   r.   r)   r^   r]   )r1   r   r7   r7   r8   test_gh_issue_3025  s   

"r   z-cupyx.scipy.ndimage does not have find_objectc                   @   s\   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d Zdd ZdS )TestFindObjectsc                 C   sN   t jdd}||}t|dk\}}|j|j|jfv s J t	| d S )Nr   r@   )
r&   r   r   r.   r)   r^   r"   int32r-   r   )r0   r1   
test_arrayr^   no_featuresr7   r7   r8   test_label_default_dtype  s
   
z(TestFindObjects.test_label_default_dtypec                 C   s,   |j g |jd}t|}|dgksJ d S )Nr   r7   )r]   r-   r)   r   r0   r1   r`   ra   r7   r7   r8   test_find_objects01  s   
z#TestFindObjects.test_find_objects01c                 C   s*   |j g |jd}t|}|g ksJ d S )Nr   re   r-   r)   r   r   r7   r7   r8   test_find_objects02  s   
z#TestFindObjects.test_find_objects02c                 C   8   |j dg|jd}t|}|tddd fgksJ d S )Nr   r   r   r]   r-   r)   r   slicer   r7   r7   r8   test_find_objects03     
z#TestFindObjects.test_find_objects03c                 C   s,   |j dg|jd}t|}|g ksJ d S )Nr   r   r   r   r7   r7   r8   test_find_objects04  s   
z#TestFindObjects.test_find_objects04c                 C   r   )Nrj   r   r   r   r   r7   r7   r8   test_find_objects05  r   z#TestFindObjects.test_find_objects05c                 C   sL   | g d}t|}|tddd ftddd ftddd fgks$J d S )Nrl   r   r   r   r   rj   r   r.   r)   r   r   r   r7   r7   r8   test_find_objects06  s   
z#TestFindObjects.test_find_objects06c              	   C   sH   | g dg dg dg dg dg dg}t|}|g ks"J d S )Nro   )r.   r)   r   r   r7   r7   r8   test_find_objects07  s   

z#TestFindObjects.test_find_objects07c              	   C   s   | g dg dg dg dg dg dg}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ksNJ d S )Nrq   rv   rw   rx   ry   r   r   rR   r   rj   r   r   r   r7   r7   r8   test_find_objects08  s   

z#TestFindObjects.test_find_objects08c              	   C   s   | g dg dg dg dg dg dg}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ksDJ d S )Nrq   rv   rw   ro   ry   r   r   rR   r   rj   r   r   r   r7   r7   r8   test_find_objects09  s   

z#TestFindObjects.test_find_objects09N)rI   rJ   rK   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r     s    	r   c           
   	   C   s
  |  g dg dg dg dg dg dg}tj|dd}g d}t| |ks,J t| r4d	d
ini }i }|D ]}| j||kfi |||< q:tj|dd}| | ks[J | D ]#}t|| t|| ksoJ t|| || D ]	\}}	t	||	 qxq_dS )z Test dictionary keys and entriesrq   rv   rw   ro   ry   r   )ignore_value)r   r   r   as_tupleTN)
r.   r)   value_indiceslistkeysr   nonzerorV   zipr   )
r1   r`   vi	true_keysnnz_kwdtruevikkeyvtrue_vr7   r7   r8   test_value_indices01  s,   
r   c                 C   sP   | j d| jd}d}tt|d t| W d   dS 1 s!w   Y  dS )zTest input checking)rj   r   r   z(Parameter 'arr' must be an integer array)matchN)re   float32r   r   r)   r   )r1   r`   msgr7   r7   r8   test_value_indices02&  s
   "r   c                 C   s   dD ]s}| j ddg ddg  ddg  | jd}| ||}t| r'ddini }t|j}||}t|}t|	 t|ksCJ d	d
 |D D ]*}| j
||kfi |}t|| t|kscJ t|| |D ]	\}	}
t|	|
 qjqJqdS )z2Test different input array shapes, from 1-D to 4-D))r   )   r   )rR   rR   r   )rR   rR   r   r      r   r   rR   r   r   Tc                 S   s   g | ]}t |qS r7   )int).0r2   r7   r7   r8   
<listcomp>:  s    z(test_value_indices03.<locals>.<listcomp>N)r.   r   r(   r   r   unique_valuesr)   r   r   r   r   rV   r   r   )r1   r   r   r   r   trueKeysr   r   trueNdxviktrue_vikr7   r7   r8   test_value_indices03.  s    *

r   c                 C   s<   t D ]}t| |}| jg |d}t|}|dksJ qd S )Nr   r   )r   r   r.   r)   sumr1   r   r"   inputr   r7   r7   r8   
test_sum01A  s   

r   c                 C   s@   t D ]}t| |}| jddg|d}t|}|dksJ qd S )Nr   r   r   )r   r   re   r)   r   r   r7   r7   r8   
test_sum02I  s   

r   c                 C   sD   t D ]}t| |}| jg |d}t|}t|| ddd qd S )Nr   r#   Fcheck_0d)r   r   r]   r)   r   r	   r.   r   r7   r7   r8   
test_sum03Q  s   

r   c                 C   H   t D ]}t| |}| jddg|d}t|}t|| ddd qd S )Nr   r   r         @Fr   r   r   r.   r)   r   r	   r   r7   r7   r8   
test_sum04Y     

r  c                 C   sP   t D ]#}t| |}| jddgddgg|d}t|}t|| ddd qd S )	Nr   r   rR   r   r   g      $@Fr   r  r   r7   r7   r8   
test_sum05a  s   

r  c                 C   sX   t jg td}| |}tD ]}t| |}| jg |d}tj||d}|dks)J qd S )Nr   r    r   r&   r.   boolr   r   r)   r   r1   r    r   r"   r   r   r7   r7   r8   
test_sum06i  s   

r
  c                 C   s`   t jddgtd}| |}tD ]}t| |}| jddg|d}tj||d}|dks-J qd S )Nr   r   r   r  )	r&   r]   r  r.   r   r   re   r)   r   r	  r7   r7   r8   
test_sum07s     

r  c                 C   s`   t jddgtd}| |}tD ]}t| |}| jddg|d}tj||d}|dks-J qd S )Nr   r   r   r   r  r  r	  r7   r7   r8   
test_sum08}  r  r  c                 C   p   t jddgtd}| |}tD ]%}t| |}| jddgddgg|d}tj||d}t|| dd	d
 qd S )Nr   r   r   r   rR   r   r        @Fr   )r&   r.   r  r   r   r)   r   r	   r	  r7   r7   r8   
test_sum09     

r  c                 C   f   t jddgtd}t jddgddggtd}| |}| |}tj||d}t|| dd	d
 d S Nr   r   r   r   rR   r   r         @Fr   )r&   r.   r  r)   r   r	   r1   r    r   r   r7   r7   r8   
test_sum10     

r  c                 C   sj   | j ddg| jd}tD ]&}t| |}| j ddgddgg|d}tj||dd}t||  ddd	 qd S )
Nr   r   r   rR   r   r         @Fr   )r.   int8r   r   r)   r   r	   r	  r7   r7   r8   
test_sum11  s   
r  c                 C   s|   | j ddgddgg| jd}tD ]+}t| |}| j ddgddgg|d}tj|||  g dd}t||  g d qd S 	Nr   r   r   r   rR   r      r   r   )r  rF   g      @)r.   r  r   r   r)   r   r   r	  r7   r7   r8   
test_sum12  s   
r  c                 C   s   | j ddgddgg| jd}tD ]A}t| |}| j ddgddgg|d}tj|||  g dd}tj|||  g dd}| ||ksGJ t||  g d qd S r  )	r.   r  r   r   r)   r   
sum_labelsallr   )r1   r    r   r"   r   
output_sumoutput_labelsr7   r7   r8   test_sum_labels  s   
r#  c                 C   r  r  )r&   r.   r  r   r   r)   meanr	   r	  r7   r7   r8   test_mean01  r  r%  c                 C   r  Nr   r   r   r   rR   r   r  r#   Fr   )r&   r.   r  r)   r$  r	   r  r7   r7   r8   test_mean02  r  r'  c                 C   d   |  ddg}tD ]&}t| |}| j ddgddgg|d}tj||dd}t||  ddd	 q	d S )
Nr   r   rR   r   r   r   r  Fr   )r.   r   r   r)   r$  r	   r	  r7   r7   r8   test_mean03     
r)  c              	   C   s   | j ddgddgg| jd}tjddF tD ]:}t| |}| j ddgddgg|d}tj|||  g dd	}|d
 dks@J |d dksHJ | |d sQJ qW d    d S 1 s]w   Y  d S )Nr   r   r   r   ignorer   rR   r  r   r   r        @)	r.   r  r&   errstater   r   r)   r$  isnanr	  r7   r7   r8   test_mean04  s   
"r0  c                 C   r  r&  )r&   r.   r  r   r   r)   minimumr	   r	  r7   r7   r8   test_minimum01  r  r2  c                 C   f   t jddgtd}t jddgddggtd}| |}| |}tj||d}t|| ddd	 d S 
Nr   r   r   r   r   r  r#   Fr   )r&   r.   r  r)   r1  r	   r  r7   r7   r8   test_minimum02  r  r5  c                 C   r(  )
Nr   r   rR   r   r   r   r  Fr   )r.   r   r   r)   r1  r	   r	  r7   r7   r8   test_minimum03  s   
r6  c                 C   v   |  ddgddgg}tD ]+}t| |}| j ddgddgg|d}tj|||  g dd}t||  g d qd S )	Nr   r   rR   r   r   r   rR   r  r   )r  r  rF   )r.   r   r   r)   r1  r   r	  r7   r7   r8   test_minimum04     
r9  c                 C   r  )Nr   r   r   r   rR   r   r  r  Fr   )r&   r.   r  r   r   r)   maximumr	   r	  r7   r7   r8   test_maximum01  r  r<  c                 C   r3  r4  )r&   r.   r  r)   r;  r	   r  r7   r7   r8   test_maximum02  s   

r=  c                 C   r(  )
Nr   r   rR   r   r   r   r  Fr   )r.   r   r   r)   r;  r	   r	  r7   r7   r8   test_maximum03$  r*  r>  c                 C   r7  )	Nr   r   rR   r   r   r8  r   )r  r  rF   )r.   r   r   r)   r;  r   r	  r7   r7   r8   test_maximum04.  r:  r?  c                 C   s$   |  g d}t|dksJ d S )N)r   r   )r.   r)   r;  )r1   r2   r7   r7   r8   test_maximum058  s   rB  c                 C   sv   |  g dg dg dg dg}|  g dg dg dg dg}tj|||  g dd	}t||  g d
 d S )Nr   r   r   r   rj   rR   r   r   r   r   r   r   r;   rR   r   r   r   r   r   r   r   r   r   r   rR   rR   r   r   )r   r   rR   r   )r-  r  r  )r.   r)   medianr   r1   r   r    r   r7   r7   r8   test_median01>  s   

rL  c                 C   sD   |  g dg dg dg dg}t|}t||  ddd d S )NrC  rD  rE  rF  r#   Fr   r.   r)   rJ  r	   r1   r   r   r7   r7   r8   test_median02K  s   

rO  c                 C   sj   |  g dg dg dg dg}|  g dg dg dg dg}tj||d}t||  d	d
d d S )NrC  rD  rE  rF  rG  rH  rI  r  r  Fr   rM  rK  r7   r7   r8   test_median03T  s   

rP  c                 C   sP   t jddgtd}| |}tj|| d| dgd}t|| dg d S )Nr   r   r   r   r#   )r&   r.   r  r)   rJ  r]   r   rN  r7   r7   r8   test_median_gh12836_boola  s   
rR  c                 C   sH   | j ddg| jd}tj|| d|  dgd}t||  dg d S )NA   F   r   rQ  r   r   g     P@)r.   r  r)   rJ  r]   r   rN  r7   r7   r8   test_median_no_int_overflowi  s   rU  c              
   C      t jdd? tD ]3}t| |}| jg |d}t }|td t	|}W d    n1 s0w   Y  | 
|s<J q	W d    d S 1 sHw   Y  d S Nr+  r,  r   zMean of empty slice)r&   r.  r   r   r.   r   filterRuntimeWarningr)   variancer/  r1   r   r"   r   supr   r7   r7   r8   test_variance01p     
"r]  c                 C   F   t D ]}t| |}| jdg|d}t|}t|| ddd qd S Nr   r   rF   Fr   r   r   r.   r)   rZ  r	   r   r7   r7   r8   test_variance02{     

rb  c                 C   r   Nr   rR   r   r#   Fr   ra  r   r7   r7   r8   test_variance03  r  re  c                 C   >   t jddgtd}| |}t|}t|| ddd d S )Nr   r   r   g      ?Fr   )r&   r.   r  r)   rZ  r	   r1   r   r   r7   r7   r8   test_variance04     

rh  c                 C   Z   |  g d}tD ]!}t| |}| j g d|d}t||d}t||  ddd q	d S N)r   r   rR   )r   rR   r  r   r   r#   Fr   )r.   r   r   r)   rZ  r	   r	  r7   r7   r8   test_variance05  s   
rl  c              
   C      |  g d}tjdd2 tD ]&}t| |}| j g d|d}t|||  g d}t||  g d qW d    d S 1 sBw   Y  d S N)r   r   rR   rR   r   r+  r,  )r   rR   r  r   r  r   )r   rR   r   )r#   r#   rF   )r.   r&   r.  r   r   r)   rZ  r   r	  r7   r7   r8   test_variance06  s   
"ro  c              
   C   rV  rW  )r&   r.  r   r   r.   r   rX  rY  r)   standard_deviationr/  r[  r7   r7   r8   test_standard_deviation01  r^  rq  c                 C   r_  r`  r   r   r.   r)   rp  r	   r   r7   r7   r8   test_standard_deviation02  rc  rs  c                 C   r   rd  rr  r   r7   r7   r8   test_standard_deviation03  r  rt  c                 C   rf  )Nr   r   r   r@   Fr   )r&   r.   r  r)   rp  r	   rg  r7   r7   r8   test_standard_deviation04  ri  ru  c                 C   rj  rk  )r.   r   r   r)   rp  r	   r	  r7   r7   r8   test_standard_deviation05  s   
rv  c              
   C   rm  rn  )r.   r&   r.  r   r   r)   rp  r   r	  r7   r7   r8   test_standard_deviation06  s   
"rw  c              	   C   s   |  dg}tjdd< tD ]0}t| r|dkrtd t| |}| j dg|d}t	|||  dg}t
||  dg qW d    d S 1 sKw   Y  d S )	Nr   r+  r,  uint8z8value cannot be converted to type uint8 without overflowgl `yr   r   )r.   r&   r.  r   r   r   r   r   r)   rp  r   r	  r7   r7   r8   test_standard_deviation07  s   

"ry  c                 C   h   t jddgtd}| |}tD ]!}t| |}| jddgddgg|d}tj||d}|dks1J qd S )	Nr   r   r   r   rR   r   r  r   r   )r&   r.   r  r   r   r)   minimum_positionr	  r7   r7   r8   test_minimum_position01  s   

r}  c                 C   N   t D ]"}t| |}| jg dg dg dg|d}t|}|dks$J qd S Nrj   r   r   rj   rR   r   r   r   r   rj   r   r   r   r   r   )r   r   r.   r)   r|  r   r7   r7   r8   test_minimum_position02     


r  c                 C   D   t jg dg dg dgtd}| |}t|}|dks J d S r  r&   r.   r  r)   r|  rg  r7   r7   r8   test_minimum_position03     


r  c                 C   r  )Nr  )rR   r   r   r   r  r   r{  r  rg  r7   r7   r8   test_minimum_position04  r  r  c                 C   ^   |  g d}tD ]#}t| |}| j g dg dg dg|d}t||}|dks,J q	d S )Nr   r   r   r   r  r  )r   rj   r   rR   r   )r   r   r.   r   r   r)   r|  r	  r7   r7   r8   test_minimum_position05     

r  c                 C   `   |  g d}tD ]$}t| |}| j g dg dg dg|d}t||d}|dks-J q	d S )Nr   r   rR   r   r  r  r  r   r   r   r   r  r	  r7   r7   r8   test_minimum_position06     

r  c              	   C   s~   |  g d}tD ]3}t| |}| j g dg dg dg|d}t|||  ddg}|d d	ks4J |d
 dks<J q	d S )Nr  r  r  r  r   r   rR   r   r  r   r  r  r	  r7   r7   r8   test_minimum_position07&     

r  c                 C   rz  )	Nr   r   r   r   rR   r   r  r   r   )r&   r.   r  r   r   r)   maximum_positionr	  r7   r7   r8   test_maximum_position013  s   

r  c                 C   r~  )Nr  rR   r   r  r   r  r   r  )r   r   r.   r)   r  r   r7   r7   r8   test_maximum_position02>  r  r  c                 C   r  )Nr  r  r  r   r{  )r&   r.   r  r)   r  rg  r7   r7   r8   test_maximum_position03H  r  r  c                 C   r  )Nr  r  r  r  r   r   r   r.   r   r   r)   r  r	  r7   r7   r8   test_maximum_position04Q  r  r  c                 C   r  )Nr  r  r  r  r   r   r{  r  r	  r7   r7   r8   test_maximum_position05\  r  r  c              	   C   s~   |  g d}tD ]3}t| |}| j g dg dg dg|d}t|||  ddg}|d d	ks4J |d d
ks<J q	d S )Nr  r  r  r  r   r   r   r   r{  r  r  r	  r7   r7   r8   test_maximum_position06g  r  r  c              	   C   s   t | r	td | g d}tD ]3}t| |}| jg dg dg dg|d}t||| ddg}|d	 d
ks=J |d dksEJ qd S )Nzoutput[1] is wrong on pytorch)r#   r-  rF         @r  r  r  r   r#   r  r   r{  r   )r   rR   )r   r   r   r.   r   r   r)   r  r	  r7   r7   r8   test_maximum_position07t  s"   


r  c           
      C   s   t jddgtd}| |}tD ]A}t| |}| jddgddgg|d}tj||d}tj||d}tj||d}tj	||d}tj
||d}	|||||	fksQJ qd S )Nr   r   r   r   rR   r   r  )r&   r.   r  r   r   r)   extremar1  r;  r|  r  
r1   r    r   r"   r   output1output2output3output4output5r7   r7   r8   test_extrema01  s    

r  c           
      C   s   |  ddg}tD ]F}t| |}| j ddgddgg|d}tj||dd}tj||dd}tj||dd}tj||dd}tj||dd}	|||||	fksOJ q	d S )Nr   r   rR   r   r   r   )	r.   r   r   r)   r  r1  r;  r|  r  r  r7   r7   r8   test_extrema02  s*   
r  c           
      C   s   |  ddgddgg}tD ]}t| r|dv rtd t| |}| j ddgddgg|d}tj|||  g dd	}tj|||  g dd	}tj	|||  g dd	}tj
|||  g dd	}tj|||  g dd	}	t|d
 | t|d | |d |ksJ |d |	ksJ qd S )Nr   r   rR   uint16uint32uint64/https://github.com/pytorch/pytorch/issues/58734r   r   r8  r   r   r.   r   r   r   r   r   r)   r  r1  r;  r|  r  r   r  r7   r7   r8   test_extrema03  s<   

r  c           
   	   C   s  |  g d}tD ]~}t| r|dv rtd t| |}| j g dg dg dg|d}t|||  dd	g}t|||  dd	g}t	|||  dd	g}t
|||  dd	g}t|||  dd	g}	t|d
 | t|d | |d	 |ksJ |d |	ksJ q	d S )Nr  r  r  r  r  r  r   r   r   r   rR   r  r  r7   r7   r8   test_extrema04  s2   


r  c                 C   sL   d}t D ]}t| |}| jddgddgg|d}t|}||ks#J qd S )N)rF   rF   r   r   r   r   r   r.   r)   center_of_massr1   r   r   r"   r   r   r7   r7   r8   test_center_of_mass01     

r  c                 C   sL   d}t D ]}t| |}| jddgddgg|d}t|}||ks#J qd S )Nr  r   r   r   r  r  r7   r7   r8   test_center_of_mass02  r  r  c                 C   sL   d}t D ]}t| |}| jddgddgg|d}t|}||ks#J qd S )Nr  r   r   r   r  r  r7   r7   r8   test_center_of_mass03  r  r  c                 C   sL   d}t D ]}t| |}| jddgddgg|d}t|}||ks#J qd S )Nr  r   r   r   r  r  r7   r7   r8   test_center_of_mass04  r  r  c                 C   sL   d}t D ]}t| |}| jddgddgg|d}t|}||ks#J qd S )Nr@   r@   r   r   r  r  r7   r7   r8   test_center_of_mass05  r  r  c                 C   sB   d}t jddgddggtd}| |}t|}||ksJ d S )Nr  r   r   rR   r   )r&   r.   r  r)   r  r1   r   r   r   r7   r7   r8   test_center_of_mass06  s
   

r  c                 C   sR   |  ddg}d}tj ddgddggtd}|  |}t||}||ks'J d S )Nr   r   r@   rF   r   rR   r   r.   r&   r  r)   r  r1   r    r   r   r   r7   r7   r8   test_center_of_mass07  s   
r  c                 C   sT   |  ddg}d}tj ddgddggtd}|  |}t||d}||ks(J d S )Nr   r   r@   r#   rj   rR   r   r  r  r7   r7   r8   test_center_of_mass08  s   
r  c                 C   st   |  d}| j ddg| jd}tj ddgddggtd}|  |}t|||  ddg}t|  ||  | d S )Nr  r  r  r   r   r   )r.   float64r&   r  r)   r  r   r  r7   r7   r8   test_center_of_mass09!  s   

r  c                 C   s2   |  d}| d}t|ddd}t|| d S )Nr   r   )r]   aranger)   	histogramr   r  r7   r7   r8   test_histogram01*  s   

r  c                 C   sL   |  g d}|  g d}|  g d}t|ddd|d}t|| d S )N)r   r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   rR   r   rR   rR   rR   rR   r   r   rj   r   r.   r)   r  r   r  r7   r7   r8   test_histogram021  s
   r  zobject arraysc                 C   sl   |  g d}|  g d}|  g d}|  g d}t|ddd|d}t|d | t|d	 | d S )
N)r   r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   rR   r   )r   r   rR   r   rR   rj   rR   rR   r   r   rj   r  r   r  )r1   r    	expected1	expected2r   r   r7   r7   r8   test_histogram039  s   r  c           	      C   sv  |  g dg dg dg}|  g dg dg dg}tj|||  ddgd}t|| j d	d
g| jd tj|||  ddgd}t|| j ddg| jd tj|||  ddgd}t|| | j ddg| jd tj	|||  ddgd}t|| j d	d
g| jd tj
|||  ddgd}t||  ddgdd tj|||  ddgd}t||  ddgdd d S )N)rj   r   r   r   r   )r  r;   r   r   r   )r   r   r   rR   rj   )r   r   r   r   r   )r   r   r   r   r   r   r   r   rN   r  r   r-  r#   rj   rR   Fr   r;   )r.   r)   r$  r   r  rZ  rp  r   sqrtrJ  r1  r;  )	r1   r   lblr$  varstdmedminmaxr7   r7   r8   test_stat_funcs_2dF  s    r  no watershed_ift on CuPyc                   @   sx   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	ddddd Z
e	ddddd Ze	ddddd ZdS )TestWatershedIftc              
   C   s   |j g dg dg dg dg dg dg dg dg|jd}|j g dg dg dg dg dg dg dg dg|jd}| g dg dg dg}tj|||d}g d	g d
g d
g d
g d
g d
g d	g d	g}t|| | d S )N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   	structurer   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   rx  r  r)   watershed_iftr   r0   r1   r`   markersr  ra   r   r7   r7   r8   test_watershed_ift01`  sJ   


z%TestWatershedIft.test_watershed_ift01c              
   C   s   |j g dg dg dg dg dg dg dg dg|jd}|j g dg dg dg dg dg dg dg dg|jd}t||}g dg dg d	g d	g d	g dg dg dg}t|| | d S )
Nr  r  r  r   r  r  r  )r   r   r   r   r   r   r   r  r  r0   r1   r`   r  ra   r   r7   r7   r8   test_watershed_ift02  sB   

z%TestWatershedIft.test_watershed_ift02c              	   C   s   |j g dg dg dg dg dg dg dg|jd}|j g dg dg dg dg dg dg dg|jd}t||}g dg dg d	g d	g d	g dg dg}t|| | d S )
Nr  r  r   r   r   r   r   r   r   r   r   r   r   r   rR   r   r   r   r   r   r   r   r   r   r  )r   r   r   r   rR   r   r   r   r   r   rR   rR   rR   r   r  r  r7   r7   r8   test_watershed_ift03  s<   

z%TestWatershedIft.test_watershed_ift03c              	   C      |j g dg dg dg dg dg dg dg|jd}|j g dg dg dg dg dg dg dg|jd}| g dg dg dg}tj|||d}g d	g d
g d
g d
g d
g d
g d	g}t|| | d S )Nr  r  r  r   r  r  r  r  r  r  r  r  r7   r7   r8   test_watershed_ift04  sD   


	z%TestWatershedIft.test_watershed_ift04c              	   C   r  )Nr  r  r  r   )r   r   rR   r   r   r   r   r  r  r  r  )r   rR   rR   r   r   r   r   r  r  r7   r7   r8   test_watershed_ift05  sD   


z%TestWatershedIft.test_watershed_ift05c                 C   s   |j g dg dg dg dg dg dg|jd}|j g dg dg dg dg dg dg|jd}| g dg dg dg}tj|||d}g d	g d	g d	g d	g d
g d
g}t|| | d S )Nr  r  r  r   r  r  r  r  r  r  r  r  r7   r7   r8   test_watershed_ift06  s>   


z%TestWatershedIft.test_watershed_ift06Tzinplace ops are numpy-specificr   c                 C   s  d}t j|t jd}| }t jg dg dg dg dg dg dgt jd|d< ||}|jg dg dg dg dg dg dg|jd}|j||jd}|j}|g d	g d	g d	g}tj	||||d
 g dg dg dg dg dg dg}t
||| d S )N)r   r   r   r  r  r  .r  r  r  )r  r   r  r  )r&   re   rx  	transposer.   r  int16Tr)   r  r   )r0   r1   r   r`   r  ra   r  r   r7   r7   r8   test_watershed_ift07  sN   





z%TestWatershedIft.test_watershed_ift07r   r  r   c                 C   sh   |j ddgddgg|jd}|j ddgddgg|jd}t||}ddgddgg}t|| | d S )N   r   r   r   )r.   r  r  r)   r  r   r  r7   r7   r8   test_watershed_ift08)  s   

z%TestWatershedIft.test_watershed_ift08c                 C   sv   |j ||jjdgddgg|jd}|j ddgddgg|jd}t||}ddgddgg}t|| |dd d S )Nr   r   r   Fr   )r.   iinfor  r  r  r)   r  r   r  r7   r7   r8   test_watershed_ift095  s   
z%TestWatershedIft.test_watershed_ift09N)rI   rJ   rK   r  r  r  r  r  r  r   r  r  r  r7   r7   r7   r8   r  ]  s    


 

r  )r   dtc                 C   sJ   t jd}d}|jd|ddj| d}t|}t| |ks#J d S )N{   r  r   )r   r   )lowhighr   r   )	r&   r   default_rngintegersastyper)   r   rV   r   )r  r1   rngmax_valimageval_idxr7   r7   r8   test_gh_19423B  s
   
r  )r   os.pathnumpyr&   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r   r	   r   r
   r   scipy.ndimager)    r   scipy.conftestr   markr   usefixtures
pytestmarkname__version__r,   r   rM   rc   rf   thread_unsaferh   ri   rk   rn   rp   rz   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  r2  r5  r6  r9  r<  r=  r>  r?  rB  rL  rO  rP  rR  rU  r]  rb  re  rh  rl  ro  rq  rs  rt  ru  rv  rw  ry  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  parametrizeintcuintcr  r7   r7   r7   r8   <module>   s   $

R&









W





	






	

	

	

		
									


 e