
    ڧg(                     >   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                            d          d             Z ed          d             Z ed          d             ZdS )    Nc                  D    t           j                            ddd          S )NtorchvisionIMPLMeta)torchlibraryLibrary     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/_meta_registrations.pyget_meta_libr      s    =  ???r   defaultc                       fd}|S )Nc                     t           j                                        rMt                                          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   sU     ))++ 	eNN	0Ew(O(OQ^ _ _acddd	r   r
   )r   r   r   s   `` r   register_metar      s)         
 Nr   	roi_alignc                 4    t          j                            d          dk    d            t          j         j        j        k     fd                               d          }                     d          }                     ||||f          S )N      c                      dS Nz$rois must have shape as Tensor[K, 5]r
   r
   r   r   <lambda>z meta_roi_align.<locals>.<lambda>       ,R 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>   0    BB B59ZB 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_alignr7      s    	L1"$R$RSSS	Ltz!	
 	
 	
 	
 	
   yy||Hzz!}}H??Hh|LMMMr   _roi_align_backwardc                      t          j         j        j        k     fd                                ||||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>.   0    A
A A48JA A r   r   r-   r(   r/   )r=   r+   r0   r1   r2   
batch_sizer6   heightwidthr3   r4   s   ``         r   meta_roi_align_backwardrC   (   \     
L
dj 	
 	
 	
 	
 	
   >>:x?@@@r   ps_roi_alignc                     t          j                            d          dk    d            t          j         j        j        k     fd                                d          }t          j        |||z  z  dk    d                               d          }||||z  z  ||f}                     |          t          j        |t           j        d          fS )	Nr   r   c                      dS 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+   r0   r1   r2   r3   r6   r5   out_sizes	   ``       r   meta_ps_roi_alignrP   6   s    	L1"$R$RSSS	Ltz!	
 	
 	
 	
 	
   zz!}}H	LML01Q6M  
 yy||H(}|'CDmUabH??8$$ek(%+V\&]&]&]]]r   _ps_roi_align_backwardc                      t          j         j        j        k     fd                                |||	|
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_mappingr0   r1   r2   r3   r@   r6   rA   rB   s   ``         r   meta_ps_roi_align_backwardrU   K   s\     
L
dj 	
 	
 	
 	
 	
   >>:x?@@@r   roi_poolc                 z    t          j                            d          dk    d            t          j         j        j        k     fd                               d          }                     d          }||||f}                     |          t          j        |dt           j                  fS )Nr   r   c                      dS 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   rJ   rK   r(   rL   )r*   r+   r0   r1   r2   r5   r6   rO   s   ``      r   meta_roi_poolr[   c   s    	L1"$R$RSSS	Ltz!	
 	
 	
 	
 	
   yy||Hzz!}}H(M<@H??8$$ek(6QVQ\&]&]&]]]r   _roi_pool_backwardc
                      t          j         j        j        k     fd                                ||||	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+   argmaxr0   r1   r2   r@   r6   rA   rB   s
   ``        r   meta_roi_pool_backwardr`   s   rD   r   ps_roi_poolc                     t          j                            d          dk    d            t          j         j        j        k     fd                                d          }t          j        |||z  z  dk    d                               d          }||||z  z  ||f}                     |          t          j        |dt           j                  fS )	Nr   r   c                      dS 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   rI   rJ   rZ   rL   )r*   r+   r0   r1   r2   r6   r5   rO   s   ``      r   meta_ps_roi_poolre      s    	L1"$R$RSSS	Ltz!	
 	
 	
 	
 	
   zz!}}H	LML01Q6M   yy||H(}|'CDmUabH??8$$ek(6QVQ\&]&]&]]]r   _ps_roi_pool_backwardc
                      t          j         j        j        k     fd                                ||||	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+   rT   r0   r1   r2   r@   r6   rA   rB   s
   ``        r   meta_ps_roi_pool_backwardri      rD   r   ztorchvision::nmsc                 H    t          j                                         dk     fd           t          j                             d          dk     fd           t          j                                        dk    fd           t          j                             d                              d          k     fd           t           j                                        }|                                }                     |t           j        	          S )
N   c                  4    d                                   dS )Nz!boxes should be a 2d tensor, got Ddimdetss   r   r"   zmeta_nms.<locals>.<lambda>   s    *[dhhjj*[*[*[ r   r      c                  4    d                      d           S )Nz1boxes should have 4 elements in dimension 1, got r   r.   rp   s   r   r"   zmeta_nms.<locals>.<lambda>   s     ,n`d`i`ijk`l`l,n,n r   c                  2    d                                   S )Nz"scores should be a 1d tensor, got rn   )scoress   r   r"   zmeta_nms.<locals>.<lambda>   s    ,_QWQ[Q[Q]Q],_,_ r   r   c                  `    d                      d           d                     d           S )NzIboxes and scores should have same number of elements in dimension 0, got r   z and rt   )rq   rv   s   r   r"   zmeta_nms.<locals>.<lambda>   s8    \`\e\efg\h\houozoz{|o}o} r   r'   )	r   r-   ro   r.   _custom_opsget_ctxcreate_unbacked_symintr/   long)rq   rv   iou_thresholdctxnum_to_keeps   ``   r   meta_nmsr      s    	Lq"["["["[\\\	L1"$n$n$n$nooo	L"$_$_$_$_```	L		!A&   

#
#
%
%C,,..K>>+UZ>888r   deform_conv2dc                     |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_channelsr@   s                     r   meta_deform_conv2dr      sJ    $ #L-J	<?LQJ??Jj)LMMMr   _deform_conv2d_backwardc                    |                     |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      sx    & --J""6<00K""6<00Ktz**Itz**I{KIEEr   )r   )	functoolsr   torch._custom_opstorch.librarytorchvision.extensionr   	lru_cacher   r   r7   rC   rP   rU   r[   r`   re   ri   r   register_faker   r   r   r
   r   r   <module>r      sX                    T@ @ @    {N N N $%%
A 
A &%
A ~^ ^ ^( '((A A )(A. z^ ^ ^ #$$
A 
A %$
A }^ ^ ^& &''
A 
A ('
A /00
9 
9 10
9 N N  N. ())F F *)F F Fr   