o
    oik
                     @   s   d dl mZmZmZ d dlZd dlm  mZ d dl	m
Z
 e 	dde
dee ded	ed
ee
ee
e
f f f
ddZdedededejd
ej
f
ddZdej
deded
ej
fddZdS )    )OptionalTupleUnionN)Tensor'  Tscoremapnum_samplesreturn_scoremapincrease_coveragereturnc                 C   s   | j }| j}| j\}}}|rPtjddd||dd   d }	tj| dddf d d |	d	dddf d
d}
tj|
|	d dddddf }| |d d  } t||||d	||| d}tj
| 	||| |dj}tj|d|d ||dd}|r|tj| 	||| d|dfS |S )z*Sample keypoints from provided candidates.   3   )stepsdevicedtype)NNNgư>r   .)r      )padding).N)r   r   r   g:0yE>g      ࿩r   )k   )dimindex)r   r   shapetorchlinspaceexpFconv2dget_gridreshapetopkindicesgatherexpand)r   r   r	   r
   r   r   BHWweightslocal_density_xlocal_densitygridindskps r.   O/home/ubuntu/.local/lib/python3.10/site-packages/kornia/feature/dedode/utils.pysample_keypoints   s   "2  r0   r%   r&   r'   r   c           	      C   s~   t j||dd | d d }t j||dd | d d }t j||dd\}}t j||fddd|| d}|| ddS )	zGet grid of provided layout.r   g      ?r   r   ij)indexingr   )r   arangemeshgridstackr    r$   )	r%   r&   r'   r   xsysyyxxbaser.   r.   r/   r   0   s
    r   flowhwc                 C   s6   t j|| d d  d || d d  d fdd} | S )zDenormalize pixel coordinates.).r   r   r   ).r   r3   r4   )r   r7   )r=   r>   r?   r.   r.   r/   $dedode_denormalize_pixel_coordinates9   s   r@   )r   TT)typingr   r   r   r   torch.nn.functionalnn
functionalr   kornia.corer   no_gradintboolr0   r   r   r@   r.   r.   r.   r/   <module>   s&   ""	