o
    i                     @   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)Z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_measurementsZ_statsIS_WINDOWS_AND_NP1int64r   asarray	selfxpxr   r    shpcountssums	dtype_arg r5   _/home/kim/smarthome/.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   	   r9   r   r9   r   r   r!   r   r"   r#   r$   r-   r5   r5   r6   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    Zcenteredr!   r   r"   r#         ?r$   
r.   r/   r0   r   r    r1   r2   r3   Zcentersr4   r5   r5   r6   test_a_centeredE      z'Test_measurements_stats.test_a_centeredc           
      C   r;   )Nr   r8   r   r9   r   Tr<   r!   r   r"   r#   r=   r$   r>   r5   r5   r6   test_b_centeredT   r@   z'Test_measurements_stats.test_b_centeredc           
      C   r;   )Nr   )        rB         "@rC   rB   rC   r   Tr<   r!   r   r"   r#   r=   r$   r>   r5   r5   r6   test_nonint_labelsc   r@   z*Test_measurements_stats.test_nonint_labelsN)	__name__
__module____qualname____doc__r7   r:   r?   rA   rD   r5   r5   r5   r6   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   r8   r9   )rB   rB         @rJ   rB   rJ   r   T)r   r    find_maxr   )r   r    find_minr   )r   r    rL   Zfind_min_positions   i)r   r    rK   Zfind_max_positions)r(   r)   _selectlenr   r!   kind)r.   r/   r0   casesr   r    resultr5   r5   r6   
test_basicv   sJ   z#Test_measurements_select.test_basicN)rE   rF   rG   rH   rT   r5   r5   r5   r6   rI   s   s    rI   c                 C   4   |  g }t|\}}|dksJ |dksJ d S Nr   )onesr(   labelr/   dataoutnr5   r5   r6   test_label01      
r]   c                 C   rU   )Nr   )zerosr(   rX   rY   r5   r5   r6   test_label02   r^   r`   c                 C   s<   |  dg}t|\}}t|| dg |dksJ d S rV   rW   r(   rX   r   r,   rY   r5   r5   r6   test_label03   s   rb   c                 C   s<   |  dg}t|\}}t|| dg |dksJ d S )Nr   r   )r_   r(   rX   r   r,   rY   r5   r5   r6   test_label04   s   rc   c                 C   s>   |  dg}t|\}}t|| g d |dksJ d S )N   )r   r   r   r   r   r   ra   rY   r5   r5   r6   test_label05   s   re   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   rM   rM   r,   r(   rX   r   rY   r5   r5   r6   test_label06   s   rh   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   rg   rY   r5   r5   r6   test_label07   s$   
rj   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   rM   rM   r   r   r   r   r   r   r   r   r   r   r   rg   rY   r5   r5   r6   test_label08   s    
rt   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 )Nrk   rl   rm   rn   ro   r   rp   rq   )r   r   r   r   r   r   )r   r   r   rM   rM   r   rM   r,   r(   generate_binary_structurerX   r   r/   rZ   structr[   r\   r5   r5   r6   test_label09   s$   

ry   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 )Nri   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   ru   rw   r5   r5   r6   test_label10   s   

rz   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 )Nrk   rl   rm   rn   ro   r!   rp   rq   rr   rs   r   r   getattrr,   r(   rX   r   r/   typer!   rZ   r[   r\   expectedr5   r5   r6   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 )Nrk   rl   rm   rn   ro   r{   outputrp   rq   rr   rs   r   r|   )r/   r   r!   rZ   r\   r   r5   r5   r6   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   ro   r{   r   r|   r~   r5   r5   r6   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~   r5   r5   r6   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 )Nrd   r{   r   r   )	rW   r   r}   r_   r(   rX   r   shaper!   r/   rZ   tr!   r   r\   r5   r5   r6   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 )Nrd   r   r{   )rW   r   r}   r(   rX   r   r   r!   r   r5   r5   r6   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 raiserd   
   r{   r   )r   pytestxfailrW   r   r}   r_   assert_raises
ValueError	TypeErrorr(   rX   )r/   rZ   r   r!   r   r5   r5   r6   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 )NrZ   zlabel_inputs.txtzlabel_strels.txtzlabel_results.txt)   r   )r   rM   rM   r   FZcheck_dtyper   )r%   Zloadtxtospathjoindirname__file__r'   r,   ranger   r   r(   rX   )	r/   rZ   ZstrelsresultsrrN   djsr5   r5   r6   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)rP   r   r(   rv   r,   rX   find_objects)	ZimgZthreshsizemaskZrankrx   Zlaco_r/   r5   r6   SE  s   

ztest_ticket_742.<locals>.SErN   )rM     r   )r   r   )r%   r!   Zintprandomrandprodr'   r,   )r/   r   r   ar5   r   r6   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  )rM   rM   )r%   r_   r,   r(   rX   rW   )r/   r   r5   r5   r6   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(   rX   r!   int32r+   r   )r.   r/   Z
test_arrayrX   Zno_featuresr5   r5   r6   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{   r5   )rW   r+   r(   r   r.   r/   rZ   r[   r5   r5   r6   test_find_objects01  s   
z#TestFindObjects.test_find_objects01c                 C   s*   |j g |jd}t|}|g ksJ d S )Nr{   r_   r+   r(   r   r   r5   r5   r6   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   rW   r+   r(   r   slicer   r5   r5   r6   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   r5   r5   r6   test_find_objects04  s   
z#TestFindObjects.test_find_objects04c                 C   r   )Nrd   r{   r   r   r   r5   r5   r6   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 )Nrf   r   r   r   r   rd   r   r,   r(   r   r   r   r5   r5   r6   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 )Nri   )r,   r(   r   r   r5   r5   r6   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 )Nrk   rp   rq   rr   rs   r   r   rM   r   rd   r   r   r   r5   r5   r6   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 )Nrk   rp   rq   ri   rs   r   r   rM   r   rd   r   r   r   r5   r5   r6   test_find_objects09  s   

z#TestFindObjects.test_find_objects09N)rE   rF   rG   r   r   r   r   r   r   r   r   r   r   r5   r5   r5   r6   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 entriesrk   rp   rq   ri   rs   r   )Zignore_value)r   r   r   as_tupleTN)
r,   r(   value_indiceslistkeysr   nonzerorP   zipr   )
r/   rZ   viZ	true_keysnnz_kwdZtruevikkeyvZtrue_vr5   r5   r6   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)rd   r   r{   z(Parameter 'arr' must be an integer array)matchN)r_   Zfloat32r   r   r(   r   )r/   rZ   msgr5   r5   r6   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   )rM   rM   r   )rM   rM   r   r      r   r   rM   r{   r   Tc                 S   s   g | ]}t |qS r5   )int).0r0   r5   r5   r6   
<listcomp>:  s    z(test_value_indices03.<locals>.<listcomp>N)r,   r   r'   r   r   unique_valuesr(   r   r   r   r   rP   r   r   )r/   r   r   r   r   ZtrueKeysr   r   ZtrueNdxZvikZtrue_vikr5   r5   r6   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r/   r   r!   inputr   r5   r5   r6   
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}   r_   r(   r   r   r5   r5   r6   
test_sum02I  s   

r   c                 C   sD   t D ]}t| |}| jg |d}t|}t|| ddd qd S )Nr{   r"   FZcheck_0d)r   r}   rW   r(   r   r	   r,   r   r5   r5   r6   
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   r5   r5   r6   
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   rM   r   r{   g      $@Fr   r   r   r5   r5   r6   
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   r/   r   r   r!   r   r   r5   r5   r6   
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%   rW   r   r,   r   r}   r_   r(   r   r   r5   r5   r6   
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   r5   r5   r6   
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   rM   r   r         @Fr   )r%   r,   r   r   r}   r(   r   r	   r   r5   r5   r6   
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   rM   r   r          @Fr   )r%   r,   r   r(   r   r	   r/   r   r   r   r5   r5   r6   
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{   rM   r   r         @Fr   )r,   int8r   r}   r(   r   r	   r   r5   r5   r6   
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{   rM   r      r   r   )r   rB   g      @)r,   r   r   r}   r(   r   r   r   r5   r5   r6   
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   Z
sum_labelsallr   )r/   r   r   r!   r   Z
output_sumZoutput_labelsr5   r5   r6   test_sum_labels  s   
r  c                 C   r   r   )r%   r,   r   r   r}   r(   meanr	   r   r5   r5   r6   test_mean01  r   r  c                 C   r   Nr   r   r{   r   rM   r   r   r"   Fr   )r%   r,   r   r(   r  r	   r   r5   r5   r6   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   rM   r   r{   r   r   Fr   )r,   r   r}   r(   r  r	   r   r5   r5   r6   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  rM   r  r   r   r         @)	r,   r   r%   errstater   r}   r(   r  isnanr   r5   r5   r6   test_mean04  s   
"r  c                 C   r   r	  )r%   r,   r   r   r}   r(   minimumr	   r   r5   r5   r6   test_minimum01  r   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   r   r   r"   Fr   )r%   r,   r   r(   r  r	   r   r5   r5   r6   test_minimum02  r   r  c                 C   r  )
Nr   r   rM   r   r{   r   r   Fr   )r,   r   r}   r(   r  r	   r   r5   r5   r6   test_minimum03  s   
r  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   rM   r   r{   r   rM   r  r   )r   r   rB   )r,   r   r}   r(   r  r   r   r5   r5   r6   test_minimum04     
r  c                 C   r   )Nr   r   r{   r   rM   r   r   r   Fr   )r%   r,   r   r   r}   r(   maximumr	   r   r5   r5   r6   test_maximum01  r   r  c                 C   r  r  )r%   r,   r   r(   r  r	   r   r5   r5   r6   test_maximum02  s   

r   c                 C   r  )
Nr   r   rM   r   r{   r   r   Fr   )r,   r   r}   r(   r  r	   r   r5   r5   r6   test_maximum03$  r  r!  c                 C   r  )	Nr   r   rM   r   r{   r  r   )r   r   rB   )r,   r   r}   r(   r  r   r   r5   r5   r6   test_maximum04.  r  r"  c                 C   s$   |  g d}t|dksJ d S )N)r   r   )r,   r(   r  )r/   r0   r5   r5   r6   test_maximum058  s   r%  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   rd   rM   r   r   r   r   r   r   r9   rM   r   r   r   r   r   r   r   r   r   r   rM   rM   r   r   )r   r   rM   r   )r  r   r   )r,   r(   medianr   r/   r   r   r   r5   r5   r6   test_median01>  s   

r/  c                 C   sD   |  g dg dg dg dg}t|}t||  ddd d S )Nr&  r'  r(  r)  r"   Fr   r,   r(   r-  r	   r/   r   r   r5   r5   r6   test_median02K  s   

r2  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 )Nr&  r'  r(  r)  r*  r+  r,  r   r   Fr   r0  r.  r5   r5   r6   test_median03T  s   

r3  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(   r-  rW   r   r1  r5   r5   r6   test_median_gh12836_boola  s   
r5  c                 C   sH   | j ddg| jd}tj|| d|  dgd}t||  dg d S )NA   F   r{   r4  r   r   g     P@)r,   r   r(   r-  rW   r   r1  r5   r5   r6   test_median_no_int_overflowi  s   r8  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  r/   r   r!   r   supr   r5   r5   r6   test_variance01p     
"r@  c                 C   F   t D ]}t| |}| jdg|d}t|}t|| ddd qd S Nr   r{   rB   Fr   r   r}   r,   r(   r=  r	   r   r5   r5   r6   test_variance02{     

rE  c                 C   r   Nr   rM   r{   r"   Fr   rD  r   r5   r5   r6   test_variance03  r   rH  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(   r=  r	   r/   r   r   r5   r5   r6   test_variance04     

rK  c                 C   Z   |  g d}tD ]!}t| |}| j g d|d}t||d}t||  ddd q	d S N)r   r   rM   )r   rM   r  r{   r   r"   Fr   )r,   r   r}   r(   r=  r	   r   r5   r5   r6   test_variance05  s   
rO  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   rM   rM   r   r  r  )r   rM   r  r   r  r{   )r   rM   r   )r"   r"   rB   )r,   r%   r  r   r}   r(   r=  r   r   r5   r5   r6   test_variance06  s   
"rR  c              
   C   r9  r:  )r%   r  r   r}   r,   r   r;  r<  r(   standard_deviationr  r>  r5   r5   r6   test_standard_deviation01  rA  rT  c                 C   rB  rC  r   r}   r,   r(   rS  r	   r   r5   r5   r6   test_standard_deviation02  rF  rV  c                 C   r   rG  rU  r   r5   r5   r6   test_standard_deviation03  r   rW  c                 C   rI  )Nr   r   r{   r=   Fr   )r%   r,   r   r(   rS  r	   rJ  r5   r5   r6   test_standard_deviation04  rL  rX  c                 C   rM  rN  )r,   r   r}   r(   rS  r	   r   r5   r5   r6   test_standard_deviation05  s   
rY  c              
   C   rP  rQ  )r,   r%   r  r   r}   r(   rS  r   r   r5   r5   r6   test_standard_deviation06  s   
"rZ  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(   rS  r   r   r5   r5   r6   test_standard_deviation07  s   

"r\  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   rM   r   r   r   r   )r%   r,   r   r   r}   r(   minimum_positionr   r5   r5   r6   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rd   r   r   rd   rM   r   r   r   r   rd   r   r   r{   r   r   )r   r}   r,   r(   r_  r   r5   r5   r6   test_minimum_position02     


rg  c                 C   D   t jg dg dg dgtd}| |}t|}|dks J d S rb  r%   r,   r   r(   r_  rJ  r5   r5   r6   test_minimum_position03     


rk  c                 C   ri  )Nrc  )rM   r   r   r   re  r{   r^  rj  rJ  r5   r5   r6   test_minimum_position04  rl  rm  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   rc  rd  )r   rd   r   rM   r{   )r   r   r,   r   r}   r(   r_  r   r5   r5   r6   test_minimum_position05     

rq  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   rM   r   rc  rd  re  r{   r   r   r   rp  r   r5   r5   r6   test_minimum_position06     

rv  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 )Nrt  rc  rd  re  r{   r   rM   r   ru  r   rf  rp  r   r5   r5   r6   test_minimum_position07&     

rx  c                 C   r]  )	Nr   r   r{   r   rM   r   r   r   r   )r%   r,   r   r   r}   r(   maximum_positionr   r5   r5   r6   test_maximum_position013  s   

r|  c                 C   ra  )Nrc  rM   r   r  r   re  r{   rf  )r   r}   r,   r(   r{  r   r5   r5   r6   test_maximum_position02>  rh  r~  c                 C   ri  )Nrc  r}  re  r{   r^  )r%   r,   r   r(   r{  rJ  r5   r5   r6   test_maximum_position03H  rl  r  c                 C   rn  )Nro  rc  r}  re  r{   r   r   r,   r   r}   r(   r{  r   r5   r5   r6   test_maximum_position04Q  rr  r  c                 C   rs  )Nro  rc  r}  re  r{   r   r^  r  r   r5   r5   r6   test_maximum_position05\  rw  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 )Nro  rc  r}  re  r{   r   r   r   r^  r  r  r   r5   r5   r6   test_maximum_position06g  ry  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  rB         @rc  r}  re  r{   r"   r  r   r^  r   )r   rM   )r   r   r   r,   r   r}   r(   r{  r   r5   r5   r6   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   rM   r   r   )r%   r,   r   r   r}   r(   extremar  r  r_  r{  
r/   r   r   r!   r   Zoutput1Zoutput2Zoutput3Zoutput4Zoutput5r5   r5   r6   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   rM   r   r{   r   )	r,   r   r}   r(   r  r  r  r_  r{  r  r5   r5   r6   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   rM   uint16Zuint32Zuint64/https://github.com/pytorch/pytorch/issues/58734r   r{   r  r   r   r,   r   r   r   r   r}   r(   r  r  r  r_  r{  r   r  r5   r5   r6   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 )Nro  r  r  rc  r}  re  r{   r   r   r   rM   r  r  r5   r5   r6   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)rB   rB   r   r   r{   r   r}   r,   r(   center_of_massr/   r   r   r!   r   r   r5   r5   r6   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 )Nrz  r   r   r{   r  r  r5   r5   r6   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 )Nru  r   r   r{   r  r  r5   r5   r6   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  r5   r5   r6   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  r5   r5   r6   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   rM   r{   )r%   r,   r   r(   r  r/   r   r   r   r5   r5   r6   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=   rB   r   rM   r{   r,   r%   r   r(   r  r/   r   r   r   r   r5   r5   r6   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"   rd   rM   r{   r  r  r5   r5   r6   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 )Nrf  r  r  r{   r   r   )r,   float64r%   r   r(   r  r   r  r5   r5   r6   test_center_of_mass09!  s   

r  c                 C   s2   |  d}| d}t|ddd}t|| d S )Nr   r   )rW   Zaranger(   	histogramr   r  r5   r5   r6   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   rM   r   rM   rM   rM   rM   r   r   rd   r   r,   r(   r  r   r  r5   r5   r6   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   rM   r   )r   r   rM   r   rM   rd   rM   rM   r   r   rd   rf  r   r  )r/   r   Z	expected1Z	expected2r   r   r5   r5   r6   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)rd   r   r   r   r   )r  r9   r   r   r   )r   r   r   rM   rd   )r   r   r   r   r   )r   r   r   r   r   r   r   r   rJ   r   r{   r  r"   rd   rM   Fr   r9   )r,   r(   r  r   r  r=  rS  r   sqrtr-  r  r  )	r/   r   Zlblr  varZstdZmedminmaxr5   r5   r6   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,   r[  r   r(   watershed_iftr   r.   r/   rZ   markersr  r[   r   r5   r5   r6   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  r.   r/   rZ   r  r[   r   r5   r5   r6   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   rM   r   r   r   r   r   r   r   r   r   r  )r   r   r   r   rM   r   r   r   r   r   rM   rM   rM   r   r  r  r5   r5   r6   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  r5   r5   r6   test_watershed_ift04  sD   


	z%TestWatershedIft.test_watershed_ift04c              	   C   r  )Nr  r  r  r{   )r   r   rM   r   r   r   r   r  r  r  r  )r   rM   rM   r   r   r   r   r  r  r5   r5   r6   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  r5   r5   r6   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%   r_   r[  Z	transposer,   r   Zint16Tr(   r  r   )r.   r/   r   rZ   r  r[   r  r   r5   r5   r6   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  r5   r5   r6   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,   Ziinfor  r  r   r(   r  r   r  r5   r5   r6   test_watershed_ift095  s   
z%TestWatershedIft.test_watershed_ift09N)rE   rF   rG   r  r  r  r  r  r  r   r  r  r  r5   r5   r5   r6   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   Zdefault_rngZintegersZastyper(   r   rP   r   )r  r/   rngZmax_valimageZval_idxr5   r5   r6   test_gh_19423B  s
   
r  )r   Zos.pathnumpyr%   Znumpy.testingr   Zscipy._lib._array_apir   r   r   r   r   r   r	   r   r
   r   Zscipy.ndimager(    r   Zscipy.conftestr   markr   ZusefixturesZ
pytestmarkname__version__r*   r   rI   r]   r`   Zthread_unsaferb   rc   re   rh   rj   rt   ry   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  r  r  r  r  r   r!  r"  r%  r/  r2  r3  r5  r8  r@  rE  rH  rK  rO  rR  rT  rV  rW  rX  rY  rZ  r\  r`  rg  rk  rm  rq  rv  rx  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  ZparametrizeZintcZuintcr  r5   r5   r5   r6   <module>   s   $

R&









W





	






	

	

	

		
									


 e