
    kh(                        d dl Z d dlZd dlZd dlZd dlZ e j                  d      d        ZddZ ed      d        Z	 ed      d        Z
 ed      d	        Z ed
      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zej"                  j%                  d      d        Z ed      d        Z ed      d        Zy)    Nc                  D    t         j                  j                  ddd      S )NtorchvisionIMPLMeta)torchlibraryLibrary     [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/_meta_registrations.pyget_meta_libr      s    ==  ??r   c                       fd}|S )Nc                     t         j                  j                         rFt               j	                  t        t        t        j                  j                               |        | S N)r   	extension_has_opsr   implgetattrr   ops)fnop_nameoverload_names    r   wrapperzregister_meta.<locals>.wrapper   sF      ))+N		0E0Ew(OQ^ _acd	r   r
   )r   r   r   s   `` r   register_metar      s    
 Nr   	roi_alignc                 (    t        j                  j                  d      dk(  d        t        j                   j                  j                  k(   fd       j                  d      } j                  d      } j	                  ||||f      S )N      c                       yNz$rois must have shape as Tensor[K, 5]r
   r
   r   r   <lambda>z meta_roi_align.<locals>.<lambda>       r   c                  <    d j                    dj                    S NzMExpected tensor for input to have the same type as tensor for rois; but type  does not equal dtypeinputroiss   r   r!   z meta_roi_align.<locals>.<lambda>   '    }$4TZZLB r   r   )r   _checksizer'   	new_empty)	r)   r*   spatial_scalepooled_heightpooled_widthsampling_ratioalignednum_roischannelss	   ``       r   meta_roi_alignr6      st    	LL1"$RS	LLtzz!	
 yy|Hzz!}H??Hh|LMMr   _roi_align_backwardc                      t        j                   j                  j                  k(   fd        j                  ||||f      S )Nc                  <    d j                    dj                    S NzLExpected tensor for grad to have the same type as tensor for rois; but type r%   r&   gradr*   s   r   r!   z)meta_roi_align_backward.<locals>.<lambda>.   '    

|#3DJJ<A r   r   r,   r'   r.   )r<   r*   r/   r0   r1   
batch_sizer5   heightwidthr2   r3   s   ``         r   meta_roi_align_backwardrB   (   @     
LL

djj 	
 >>:x?@@r   ps_roi_alignc                     t        j                  j                  d      dk(  d        t        j                   j                  j                  k(   fd        j                  d      }t        j                  |||z  z  dk(  d       j                  d      }||||z  z  ||f} j	                  |      t        j
                  |t         j                  d      fS )	Nr   r   c                       yr    r
   r
   r   r   r!   z#meta_ps_roi_align.<locals>.<lambda>8   r"   r   c                  <    d j                    dj                    S r$   r&   r(   s   r   r!   z#meta_ps_roi_align.<locals>.<lambda>;   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/   r0   r1   r2   r5   r4   out_sizes	   ``       r   meta_ps_roi_alignrO   6   s    	LL1"$RS	LLtzz!	
 zz!}H	LLML01Q6M
 yy|H(}|'CDmUabH??8$ekk(%++V\&]]]r   _ps_roi_align_backwardc                      t        j                   j                  j                  k(   fd        j                  |||	|
f      S )Nc                  <    d j                    dj                    S r:   r&   r;   s   r   r!   z,meta_ps_roi_align_backward.<locals>.<lambda>[   r=   r   r>   )r<   r*   channel_mappingr/   r0   r1   r2   r?   r5   r@   rA   s   ``         r   meta_ps_roi_align_backwardrT   K   s@     
LL

djj 	
 >>:x?@@r   roi_poolc                 x    t        j                  j                  d      dk(  d        t        j                   j                  j                  k(   fd       j                  d      } j                  d      }||||f} j	                  |      t        j
                  |dt         j                        fS )Nr   r   c                       yr    r
   r
   r   r   r!   zmeta_roi_pool.<locals>.<lambda>e   r"   r   c                  <    d j                    dj                    S r$   r&   r(   s   r   r!   zmeta_roi_pool.<locals>.<lambda>h   r+   r   r   rI   rJ   r'   rK   )r)   r*   r/   r0   r1   r4   r5   rN   s   ``      r   meta_roi_poolrZ   c   s    	LL1"$RS	LLtzz!	
 yy|Hzz!}H(M<@H??8$ekk(6QVQ\Q\&]]]r   _roi_pool_backwardc
                      t        j                   j                  j                  k(   fd        j                  ||||	f      S )Nc                  <    d j                    dj                    S r:   r&   r;   s   r   r!   z(meta_roi_pool_backward.<locals>.<lambda>y   r=   r   r>   )
r<   r*   argmaxr/   r0   r1   r?   r5   r@   rA   s
   ``        r   meta_roi_pool_backwardr_   s   rC   r   ps_roi_poolc                     t        j                  j                  d      dk(  d        t        j                   j                  j                  k(   fd        j                  d      }t        j                  |||z  z  dk(  d       j                  d      }||||z  z  ||f} j	                  |      t        j
                  |dt         j                        fS )	Nr   r   c                       yr    r
   r
   r   r   r!   z"meta_ps_roi_pool.<locals>.<lambda>   r"   r   c                  <    d j                    dj                    S r$   r&   r(   s   r   r!   z"meta_ps_roi_pool.<locals>.<lambda>   r+   r   r   rH   rI   rY   rK   )r)   r*   r/   r0   r1   r5   r4   rN   s   ``      r   meta_ps_roi_poolrd      s    	LL1"$RS	LLtzz!	
 zz!}H	LLML01Q6M yy|H(}|'CDmUabH??8$ekk(6QVQ\Q\&]]]r   _ps_roi_pool_backwardc
                      t        j                   j                  j                  k(   fd        j                  ||||	f      S )Nc                  <    d j                    dj                    S r:   r&   r;   s   r   r!   z+meta_ps_roi_pool_backward.<locals>.<lambda>   r=   r   r>   )
r<   r*   rS   r/   r0   r1   r?   r5   r@   rA   s
   ``        r   meta_ps_roi_pool_backwardrh      rC   r   ztorchvision::nmsc                     t        j                   j                         dk(   fd       t        j                   j                  d      dk(   fd       t        j                  j                         dk(  fd       t        j                   j                  d      j                  d      k(   fd       t         j                  j                         }|j                         } j                  |t         j                  	      S )
N   c                  ,    d j                          dS )Nz!boxes should be a 2d tensor, got Ddimdetss   r   r!   zmeta_nms.<locals>.<lambda>   s    ,Mdhhj\YZ*[ r   r      c                  ,    d j                  d       S )Nz1boxes should have 4 elements in dimension 1, got r   r-   ro   s   r   r!   zmeta_nms.<locals>.<lambda>   s    ._`d`i`ijk`l_m,n r   c                  *    d j                          S )Nz"scores should be a 1d tensor, got rm   )scoress   r   r!   zmeta_nms.<locals>.<lambda>   s    .PQWQ[Q[Q]P^,_ r   r   c                  P    d j                  d       dj                  d       S )NzIboxes and scores should have same number of elements in dimension 0, got r   z and rs   )rp   ru   s   r   r!   zmeta_nms.<locals>.<lambda>   s2    [\`\e\efg\h[iinouozoz{|o}n~ r   r&   )	r   r,   rn   r-   _custom_opsget_ctxcreate_unbacked_symintr.   long)rp   ru   iou_thresholdctxnum_to_keeps   ``   r   meta_nmsr~      s    	LLq"[\	LL1"$no	LL"$_`	LL		!A& 


#
#
%C,,.K>>+UZZ>88r   deform_conv2dc                     |j                   dd  \  }}|j                   d   }| j                   d   }| j                  ||||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_channelsr?   s                     r   meta_deform_conv2dr      sK    $ #LL-J	<<?LQJ??Jj)LMMr   _deform_conv2d_backwardc                    |j                  |j                        }|j                  |j                        }|j                  |j                        }|j                  |j                        }|j                  |j                        }|||||fS r   )r.   r   )r<   r)   r   r   r   r   r   r   r   r   
dilation_h
dilation_wgroupsoffset_groupsr   
grad_inputgrad_weightgrad_offset	grad_mask	grad_biass                       r   meta_deform_conv2d_backwardr      ss    & -J""6<<0K""6<<0Ktzz*Itzz*I{KIEEr   )default)	functoolsr   torch._custom_opstorch.librarytorchvision.extensionr   	lru_cacher   r   r6   rB   rO   rT   rZ   r_   rd   rh   r   register_faker~   r   r   r
   r   r   <module>r      su        T@ @ {N N $%
A &
A ~^ ^( '(A )A. z^ ^ #$
A %
A }^ ^& &'
A (
A /0
9 1
9 N  N. ()F *Fr   