o
    Vh(                     @   s   d dl Z d dlZd dlZd dlZd dlZe ddd Zd(ddZeddd	 Z	ed
dd Z
eddd Zeddd Zeddd Zeddd Zeddd Zeddd Zejdd d! Zed"d#d$ Zed%d&d' ZdS ))    Nc                   C   s   t jdddS )NtorchvisionIMPLMeta)torchlibraryLibrary r   r   S/var/www/vscode/kcb/lib/python3.10/site-packages/torchvision/_meta_registrations.pyget_meta_lib   s   r
   defaultc                    s    fdd}|S )Nc                    s,   t j rt tttjj  |  | S N)r   	extension_has_opsr
   implgetattrr   ops)fnop_nameoverload_namer   r	   wrapper   s   
zregister_meta.<locals>.wrapperr   )r   r   r   r   r   r	   register_meta   s   r   	roi_alignc           	         s^   t ddkdd  t  jjk fdd d} d} ||||fS )N      c                   S      dS Nz$rois must have shape as Tensor[K, 5]r   r   r   r   r	   <lambda>       z meta_roi_align.<locals>.<lambda>c                         d j  dj  S NzMExpected tensor for input to have the same type as tensor for rois; but type  does not equal dtyper   inputroisr   r	   r      
   r   )r   _checksizer#   	new_empty)	r%   r&   spatial_scalepooled_heightpooled_widthsampling_ratioalignednum_roischannelsr   r$   r	   meta_roi_align   s   


r2   _roi_align_backwardc                    s0   t  jjk fdd  ||||fS )Nc                      r   NzLExpected tensor for grad to have the same type as tensor for rois; but type r!   r"   r   gradr&   r   r	   r   .   r'   z)meta_roi_align_backward.<locals>.<lambda>r   r(   r#   r*   )r6   r&   r+   r,   r-   
batch_sizer1   heightwidthr.   r/   r   r5   r	   meta_roi_align_backward(   
   
r;   ps_roi_alignc           	         s   t ddkdd  t  jjk fdd  d}t |||  dkd d}||||  ||f} |t j|t jdd	fS )
Nr   r   c                   S   r   r   r   r   r   r   r	   r   8   r   z#meta_ps_roi_align.<locals>.<lambda>c                      r   r    r"   r   r$   r   r	   r   ;   r'   r   Cinput channels must be a multiple of pooling height * pooling widthmeta)r#   devicer   r(   r)   r#   r*   emptyint32)	r%   r&   r+   r,   r-   r.   r1   r0   out_sizer   r$   r	   meta_ps_roi_align6   s   


rE   _ps_roi_align_backwardc                    s0   t  jjk fdd  |||	|
fS )Nc                      r   r4   r"   r   r5   r   r	   r   [   r'   z,meta_ps_roi_align_backward.<locals>.<lambda>r7   )r6   r&   channel_mappingr+   r,   r-   r.   r8   r1   r9   r:   r   r5   r	   meta_ps_roi_align_backwardK   s
   
rH   roi_poolc                    st   t ddkdd  t  jjk fdd d} d}||||f} |t j|dt jdfS )	Nr   r   c                   S   r   r   r   r   r   r   r	   r   e   r   zmeta_roi_pool.<locals>.<lambda>c                      r   r    r"   r   r$   r   r	   r   h   r'   r   r?   r@   r#   rA   )r%   r&   r+   r,   r-   r0   r1   rD   r   r$   r	   meta_roi_poolc   s   


rK   _roi_pool_backwardc
           
         0   t  jjk fdd  ||||	fS )Nc                      r   r4   r"   r   r5   r   r	   r   y   r'   z(meta_roi_pool_backward.<locals>.<lambda>r7   )
r6   r&   argmaxr+   r,   r-   r8   r1   r9   r:   r   r5   r	   meta_roi_pool_backwards   r<   rO   ps_roi_poolc                    s   t ddkdd  t  jjk fdd  d}t |||  dkd d}||||  ||f} |t j|dt jd	fS )
Nr   r   c                   S   r   r   r   r   r   r   r	   r      r   z"meta_ps_roi_pool.<locals>.<lambda>c                      r   r    r"   r   r$   r   r	   r      r'   r   r>   r?   rJ   rA   )r%   r&   r+   r,   r-   r1   r0   rD   r   r$   r	   meta_ps_roi_pool   s   


rQ   _ps_roi_pool_backwardc
           
         rM   )Nc                      r   r4   r"   r   r5   r   r	   r      r'   z+meta_ps_roi_pool_backward.<locals>.<lambda>r7   )
r6   r&   rG   r+   r,   r-   r8   r1   r9   r:   r   r5   r	   meta_ps_roi_pool_backward   r<   rS   ztorchvision::nmsc                    s   t   dk fdd t  ddk fdd t  dkfdd t  ddk fd	d t j }| } j|t jd
S )N   c                      s   d    dS )Nz!boxes should be a 2d tensor, got Ddimr   detsr   r	   r          zmeta_nms.<locals>.<lambda>r      c                      s   d  d S )Nz1boxes should have 4 elements in dimension 1, got r   r)   r   rX   r   r	   r      rZ   c                      s   d    S )Nz"scores should be a 1d tensor, got rV   r   )scoresr   r	   r      s    r   c                      s   d  d d d S )NzIboxes and scores should have same number of elements in dimension 0, got r   z and r\   r   rY   r]   r   r	   r      s    r"   )	r   r(   rW   r)   _custom_opsget_ctxcreate_unbacked_symintr*   long)rY   r]   iou_thresholdctxnum_to_keepr   r^   r	   meta_nms   s   
rf   deform_conv2dc                 C   s8   |j dd  \}}|j d }| j d }| ||||fS )Nr   )shaper*   )r%   weightoffsetmaskbiasstride_hstride_wpad_hpad_wdil_hdil_wn_weight_grpsn_offset_grpsuse_mask
out_height	out_widthout_channelsr8   r   r   r	   meta_deform_conv2d   s   

rz   _deform_conv2d_backwardc                 C   sJ   | |j}| |j}| |j}| |j}| |j}|||||fS r   )r*   ri   )r6   r%   rj   rk   rl   rm   rn   ro   rp   rq   
dilation_h
dilation_wgroupsoffset_groupsrv   
grad_inputgrad_weightgrad_offset	grad_mask	grad_biasr   r   r	   meta_deform_conv2d_backward   s   r   )r   )	functoolsr   torch._custom_opstorch.librarytorchvision.extensionr   	lru_cacher
   r   r2   r;   rE   rH   rK   rO   rQ   rS   r   register_fakerf   rz   r   r   r   r   r	   <module>   s<    

	










