o
    h                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlmZ dddZ	ej
d	ejejejgd
d Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)_supported_float_type)optical_flow_tvl1)warp      @   c                 C   sz   t jdd | jD ddi}t |}t j|td}|t |d |d   | t j  |d< t	| || dd	}||fS )
a  Generate a synthetic ground truth optical flow with a sinusoid as
      first component.

    Parameters:
    ----
    image0: ndarray
        The base image to be warped.
    max_motion: float
        Maximum flow magnitude.
    npics: int
        Number of sinusoid pics.

    Returns
    -------
    flow, image1 : ndarray
        The synthetic ground truth optical flow with a sinusoid as
        first component and the corresponding warped image.

    c                 S   s   g | ]}t |qS  )nparange).0nr   r   _/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/registration/tests/test_tvl1.py
<listcomp>   s    z!_sin_flow_gen.<locals>.<listcomp>indexingijdtyper   )r   .edge)mode)
r   meshgridshapestack
zeros_likefloatsinmaxpir   )image0
max_motionnpicsgridgt_flowimage1r   r   r   _sin_flow_gen	   s   
,r"   r   c                 C   s   t jd}|jdd}t|\}}|j| dd}t| }t||d|d}|j|ks,J t	|| 
 dk s8J | |kr\tt t||d| d W d    d S 1 sUw   Y  d S d S )	Nr      r$   sizeF)copyr   
attachmentr         ?)r   randomdefault_rngnormalr"   astyper   r   r   absmeanpytestraises
ValueError)r   rngr   r    r!   float_dtypeflowr   r   r   test_2d_motion%   s   "r7   c                  C   sN   t jd} | jdd}t|\}}t||dd}t||  dk s%J d S )Nr   )d   r8   r8   r%   
   )r)   r*   )r   r+   r,   r-   r"   r   r/   r0   )r4   r   r    r!   r6   r   r   r   test_3d_motion7   s
   r:   c                  C   8   t jd} | jdd}t||}t |dksJ d S )Nr   r#   r%   r   r+   r,   r-   r   allr4   imgr6   r   r   r   test_no_motion_2dB      
r@   c                  C   r;   )Nr   )@   rB   rB   r%   r<   r>   r   r   r   test_no_motion_3dK   rA   rC   c                  C   s   t jd} | jdd}t|\}}t||dt jd}|jt jks#J t||dt jd}|jt jks4J t 	|| 
 dk sAJ d S )Nr   r#   r%   r   r(   gMbP?)r   r+   r,   r-   r"   r   float64r   float32r/   r0   )r4   r   r    r!   flow_f64flow_f32r   r   r   test_optical_flow_dtypeT   s   rH   c                  C   sb   t jd} | jdd}| jdd}tt t||\}}W d    d S 1 s*w   Y  d S )Nr   r#   r%   )   r$   )r   r+   r,   r-   r1   r2   r3   r   )r4   I0I1uvr   r   r   test_incompatible_shapesi   s   "rN   c                  C   s\   t jd} | jdd}tt t||t jd\}}W d    d S 1 s'w   Y  d S )Nr   r#   r%   r   )	r   r+   r,   r-   r1   r2   r3   r   int64)r4   r?   rL   rM   r   r   r   test_wrong_dtypeq   s
   "rP   )r   r   )numpyr   r1   skimage._shared.utilsr   skimage.registrationr   skimage.transformr   r"   markparametrizefloat16rE   rD   r7   r:   r@   rC   rH   rN   rP   r   r   r   r   <module>   s    

		