a
    d                     @   sZ   d dl Z d dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dlm
Z
 G dd dZdS )    N)	gradcheck)normalize_pixel_coordinates)assert_closec                   @   s   e Zd ZdZdd Zejdddd Zejdddd	 Z	ejddd
d Z
ejdddd Zejdddd Zejdddd Zejdddd ZdS )TestDepthWarpergư>c                 C   s   d\}}d\}}|d |d  }}	d\}
}}t jjjj||||	|||
|||||d}t jjjj||||	|||
|||||d}||fS )N)      ?r            )r   r   r   devicedtype)korniageometryZcameraZPinholeCameraZfrom_parameters)self
batch_sizer   r   ZfxZfyheightwidthcxcytxtytzpinhole_srcpinhole_dst r   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/test/geometry/test_depth_warper.py_create_pinhole_pair   s    


z$TestDepthWarper._create_pinhole_pairr   )   r
   c                 C   s   d\}}|  |||\}}| jd7  _tjj|||}|jd u sHJ || |jd us`J |j}	tj	d||dd  
|dd}
|
d  |j7  < |
d  |j7  < |
d  d7  < t|	|
 d S )	Nr   r      r   r   ).r   ).r   r    ).r   )r   r   r   r   depthDepthWarperZ_dst_proj_srccompute_projection_matrixtorchZeyerepeatr   r   r   )r   r   r   r   r   r   r   r   warperZdst_proj_srcZdst_proj_src_expectedr   r   r   test_compute_projection_matrix   s    
z.TestDepthWarper.test_compute_projection_matrixc                 C   s   d\}}|  |||\}}| jd7  _tj|d||||d}tjj|||}	|	| |		|}
|
j
|||dfkszJ |	jdd df j||d}t|||}t|
d |d |dd	d	d
 t|
d |d |dd	d	d d S )Nr   r   r   r   r
   ..r    r   .r!   r   -C6?atolrtol).r!   r   r.   r-   )r   r   r%   onesr   r   r"   r#   r$   	warp_gridshapegridtor   r   r&   r   r   r   r   r   r   r   r   	depth_srcr'   Zgrid_warpedr3   Z	grid_normr   r   r   test_warp_grid_offset_x1_depth14   s    

 z/TestDepthWarper.test_warp_grid_offset_x1_depth1c                 C   s  d\}}|  |||\}}| jd7  _| jd7  _tj|d||||d}tjj|||}	|		| |	
|}
|
j|||dfksJ |	jdd df j||d}t|||}t|
d |d |dd	d	d
 t|
ddd d df |ddd d df |dd	d	d d S )Nr   r   r   r   r
   .r)   r*   r+   r,   r    r!   r/   )r   r   r   r%   r0   r   r   r"   r#   r$   r1   r2   r3   r4   r   r   r&   r5   r   r   r   !test_warp_grid_offset_x1y1_depth1M   s    

 z1TestDepthWarper.test_warp_grid_offset_x1y1_depth1c                 C   s   d\}}}|  |||\}}| jd7  _| jd7  _tj|d||||d}	tjj|||}
|
	| tj
t|| ||ddd||||dd}|
|	|}t|ddd dd f |dd dd df d	d	d
 d S )Nr   r   r	   r   r   r   r!   .r
   r   r+   r,   )r   r   r   r%   r0   r   r   r"   r#   r$   Zarangefloatviewexpandr   )r   r   r   r   channelsr   r   r   r   r6   r'   Z	patch_dstZ	patch_srcr   r   r   test_warp_tensor_offset_x1y1g   s    


z,TestDepthWarper.test_warp_tensor_offset_x1y1c           
      C   sZ   d\}}|  |||\}}tjj|||}|| |ddd}	|	j|dfksVJ d S )Nr   g        r   r
   )r   r   r   r"   r#   r$   Z_compute_projectionr2   )
r   r   r   r   r   r   r   r   r'   Zxy_projectedr   r   r   test_compute_projection   s    
z'TestDepthWarper.test_compute_projectionc           
      C   sV   d\}}|  |||\}}tjj|||}|| | }	t|	 dddd d S )Nr   gʡE?gMbP?r/   )	r   r   r   r"   r#   r$   Zcompute_subpixel_stepr   item)
r   r   r   r   r   r   r   r   r'   Zsubpixel_stepr   r   r   test_compute_subpixel_step   s    
z*TestDepthWarper.test_compute_subpixel_stepc                 C   s   d\}}}|  |||\}}tj|d||||d}	t|	}	tj||||||d}
t|
}
ttjjj	|||	|
||fddsJ d S )Nr9   r   r   T)Zraise_exception)
r   r%   r0   utilsZtensor_to_gradcheck_varr   r   r   r"   Z
depth_warp)r   r   r   r   r=   r   r   r   r   r6   Zimg_dstr   r   r   test_gradcheck   s    


zTestDepthWarper.test_gradcheckN)__name__
__module____qualname__Zepsr   pytestmarkZparametrizer(   r7   r8   r>   r?   rA   rC   r   r   r   r   r      s    





r   )rG   r%   Ztorch.autogradr   r   Zkornia.testingZtestingrB   Zkornia.geometry.conversionsr   r   r   r   r   r   r   <module>   s   