a
    d$                     @   s   d dl Z e  dd ZdS )    Nc                    s  |    tj fddt| jd D dd}|dk}tj| t| dddddgf gdd|d  }| |	dd	 }	|dddd
dd
f |	 |dddd
d
gf  }
|
dddddf }||
 	dd	}|ddddddf |dddddgf d  }jd	d
 \}}|dddddf dk|dddddf |d	 k  |ddddd	f dk |ddddd	f |d	 k  }| d| ddf< tjfddtjd D dd}|| | 
 dk }|| | }||fS )a'  Warp kpts0 from I0 to I1 with depth, K and Rt Also check covisibility and depth consistency. Depth is
    consistent if relative error < 0.2 (hard-coded).

    Args:
        kpts0 (torch.Tensor): [N, L, 2] - <x, y>,
        depth0 (torch.Tensor): [N, H, W],
        depth1 (torch.Tensor): [N, H, W],
        T_0to1 (torch.Tensor): [N, 3, 4],
        K0 (torch.Tensor): [N, 3, 3],
        K1 (torch.Tensor): [N, 3, 3],
    Returns:
        calculable_mask (torch.Tensor): [N, L]
        warped_keypoints0 (torch.Tensor): [N, L, 2] <x0_hat, y1_hat>
    c              	      s6   g | ].} ||d d df |d d df f qS N   r    .0i)depth0
kpts0_longr   l/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/kornia/feature/loftr/utils/geometry.py
<listcomp>       zwarp_kpts.<locals>.<listcomp>r   )ZdimN).N   r      g-C6?c              	      s6   g | ].} ||d d df |d d df f qS r   r   r   )depth1w_kpts0_longr   r
   r   1   r   g?)roundlongtorchstackrangeshapecatZ	ones_likeZinverseZ	transposeabs)Zkpts0r   r   ZT_0to1ZK0ZK1Zkpts0_depthZnonzero_maskZkpts0_hZ	kpts0_camZw_kpts0_camZw_kpts0_depth_computedZ	w_kpts0_hZw_kpts0hwZcovisible_maskZw_kpts0_depthZconsistent_maskZ
valid_maskr   )r   r   r	   r   r
   	warp_kpts   s,    466nr   )r   Zno_gradr   r   r   r   r
   <module>   s   