a
    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torchvisionZIMPLZMeta)torchlibraryLibrary r   r   M/var/www/auris/lib/python3.9/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   	extensionZ_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   Z	roi_alignc           	         s^   t ddkdd  t  jjk fdd d} d} ||||fS )N      c                   S   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                      s   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      s
    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    


r+   Z_roi_align_backwardc                    s0   t  jjk fdd  ||||fS )Nc                      s   d j  dj  S NzLExpected tensor for grad to have the same type as tensor for rois; but type r   r   r   gradr    r   r   r   .   s
    z)meta_roi_align_backward.<locals>.<lambda>r   r!   r   r#   )r.   r    r$   r%   r&   
batch_sizer*   heightwidthr'   r(   r   r-   r   meta_roi_align_backward(   s
    
r3   Z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   s   dS r   r   r   r   r   r   r   8   r   z#meta_ps_roi_align.<locals>.<lambda>c                      s   d j  dj  S r   r   r   r   r   r   r   ;   s
    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'   r*   r)   out_sizer   r   r   meta_ps_roi_align6   s    


r;   Z_ps_roi_align_backwardc                    s0   t  jjk fdd  |||	|
fS )Nc                      s   d j  dj  S r,   r   r   r-   r   r   r   [   s
    z,meta_ps_roi_align_backward.<locals>.<lambda>r/   )r.   r    channel_mappingr$   r%   r&   r'   r0   r*   r1   r2   r   r-   r   meta_ps_roi_align_backwardK   s
    
r=   Z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   s   dS r   r   r   r   r   r   r   e   r   zmeta_roi_pool.<locals>.<lambda>c                      s   d j  dj  S r   r   r   r   r   r   r   h   s
    r   r5   r6   r   r7   )r   r    r$   r%   r&   r)   r*   r:   r   r   r   meta_roi_poolc   s    


r?   Z_roi_pool_backwardc
           
         s0   t  jjk fdd  ||||	fS )Nc                      s   d j  dj  S r,   r   r   r-   r   r   r   y   s
    z(meta_roi_pool_backward.<locals>.<lambda>r/   )
r.   r    Zargmaxr$   r%   r&   r0   r*   r1   r2   r   r-   r   meta_roi_pool_backwards   s
    
r@   Z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   s   dS r   r   r   r   r   r   r      r   z"meta_ps_roi_pool.<locals>.<lambda>c                      s   d j  dj  S r   r   r   r   r   r   r      s
    r   r4   r5   r>   r7   )r   r    r$   r%   r&   r*   r)   r:   r   r   r   meta_ps_roi_pool   s    


rA   Z_ps_roi_pool_backwardc
           
         s0   t  jjk fdd  ||||	fS )Nc                      s   d j  dj  S r,   r   r   r-   r   r   r      s
    z+meta_ps_roi_pool_backward.<locals>.<lambda>r/   )
r.   r    r<   r$   r%   r&   r0   r*   r1   r2   r   r-   r   meta_ps_roi_pool_backward   s
    
rB   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      r   zmeta_nms.<locals>.<lambda>r      c                      s   d  d S )Nz1boxes should have 4 elements in dimension 1, got r   r"   r   rG   r   r   r      r   c                      s   d    S )Nz"scores should be a 1d tensor, got rE   r   )scoresr   r   r      r   r   c                      s   d  d d d S )NzIboxes and scores should have same number of elements in dimension 0, got r   z and rJ   r   rH   rK   r   r   r      r   r   )	r   r!   rF   r"   Z_custom_opsZget_ctxZcreate_unbacked_symintr#   long)rH   rK   Ziou_thresholdctxZnum_to_keepr   rL   r   meta_nms   s    
rO   Z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_wZdil_hZdil_wZn_weight_grpsZn_offset_grpsuse_maskZ
out_heightZ	out_widthZout_channelsr0   r   r   r   meta_deform_conv2d   s    

r[   Z_deform_conv2d_backwardc                 C   sJ   | |j}| |j}| |j}| |j}| |j}|||||fS r
   )r#   rQ   )r.   r   rR   rS   rT   rU   rV   rW   rX   rY   Z
dilation_hZ
dilation_wgroupsZoffset_groupsrZ   Z
grad_inputZgrad_weightZgrad_offsetZ	grad_maskZ	grad_biasr   r   r   meta_deform_conv2d_backward   s    r]   )r	   )	functoolsr   Ztorch._custom_opsZtorch.libraryZtorchvision.extensionr   	lru_cacher   r   r+   r3   r;   r=   r?   r@   rA   rB   r   Zregister_fakerO   r[   r]   r   r   r   r   <module>   s:   

	










