o
    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   e/home/www/facesmatcher.com/frenv_anti/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   	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      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   


r.   Z_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&   )r1   r"   r'   r(   r)   
batch_sizer-   heightwidthr*   r+   r   r0   r   meta_roi_align_backward(   
   
r6   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   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&   emptyZ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                      r   r/   r   r   r0   r   r   r   [   r#   z,meta_ps_roi_align_backward.<locals>.<lambda>r2   )r1   r"   channel_mappingr'   r(   r)   r*   r3   r-   r4   r5   r   r0   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   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   r9   r:   r   r;   )r!   r"   r'   r(   r)   r,   r-   r=   r   r    r   meta_roi_poolc   s   


rB   Z_roi_pool_backwardc
           
         0   t  jjk fdd  ||||	fS )Nc                      r   r/   r   r   r0   r   r   r   y   r#   z(meta_roi_pool_backward.<locals>.<lambda>r2   )
r1   r"   Zargmaxr'   r(   r)   r3   r-   r4   r5   r   r0   r   meta_roi_pool_backwards   r7   rD   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   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   r8   r9   rA   r;   )r!   r"   r'   r(   r)   r-   r,   r=   r   r    r   meta_ps_roi_pool   s   


rE   Z_ps_roi_pool_backwardc
           
         rC   )Nc                      r   r/   r   r   r0   r   r   r      r#   z+meta_ps_roi_pool_backward.<locals>.<lambda>r2   )
r1   r"   r?   r'   r(   r)   r3   r-   r4   r5   r   r0   r   meta_ps_roi_pool_backward   r7   rF   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   rK   r   r   r      rM   c                      s   d    S )Nz"scores should be a 1d tensor, got rI   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 rO   r   rL   rP   r   r   r      s    r   )	r   r$   rJ   r%   Z_custom_opsZget_ctxZcreate_unbacked_symintr&   long)rL   rP   Ziou_thresholdctxZnum_to_keepr   rQ   r   meta_nms   s   
rT   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_channelsr3   r   r   r   meta_deform_conv2d   s   

r`   Z_deform_conv2d_backwardc                 C   sJ   | |j}| |j}| |j}| |j}| |j}|||||fS r
   )r&   rV   )r1   r!   rW   rX   rY   rZ   r[   r\   r]   r^   Z
dilation_hZ
dilation_wgroupsZoffset_groupsr_   Z
grad_inputZgrad_weightZgrad_offsetZ	grad_maskZ	grad_biasr   r   r   meta_deform_conv2d_backward   s   rb   )r	   )	functoolsr   Ztorch._custom_opsZtorch.libraryZtorchvision.extensionr   	lru_cacher   r   r.   r6   r>   r@   rB   rD   rE   rF   r   Zregister_fakerT   r`   rb   r   r   r   r   <module>   s<    

	










