
    9j,                        d dl Z d dlZ d dlZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Ze j                  j!                  e j                  j"                  j$                        e j                  j!                  e j                  j"                  j&                        z  e j                  j!                  e j                  j"                  j(                        z  Zd Zd Zd Zd Zd Zd Zd Zej:                  j=                         re j>                  jA                  dee       e j>                  jA                  dee       e j>                  jA                  de	e       e j>                  jA                  dee
       e j>                  jA                  dee       e j>                  jA                  d ed             e j>                  jA                  d ed             e j>                  jA                  d ed             e j>                  jA                  d  ed!             e j>                  jA                  d" ed#             e j>                  jC                  d$d%      Z"d&D ](  Z#e"jI                  d'ee#       e"jI                  dee#       * e"jI                  ded(       e"jI                  ded(       e"jI                  d!ed(       e"jI                  d#ed(       yy))    Nc                     |\  }}}}}}}	| j                  |       |j                  | _        || _        || _        || _        || _        |	| _        y N)save_for_backwardshapeinput_shapespatial_scalepooled_heightpooled_widthsampling_ratioaligned)
ctxinputsoutputinputroisr   r	   r
   r   r   s
             c/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torchvision/_autograd_registrations.py_roi_align_setup_contextr      sV    W]TE4|^W$kkCO%C%C#C'CCK    c                    | j                   \  }| j                  \  }}}}t        j                  j                  j                  ||| j                  | j                  | j                  ||||| j                  | j                        }|d d d d d d fS r   )saved_tensorsr   torchopstorchvision_roi_align_backwardr   r	   r
   r   r   )r   grad_outputr   
batch_sizechannelsheightwidth
grad_inputs           r   r   r      s    GT*-//'J&%&&::J tT4tT99r   c                     |\  }}}}}|\  }}	| j                  ||	       |j                  | _        || _        || _        || _        y r   r   r   r   r   r	   r
   )
r   r   r   r   r   r   r	   r
   pooledargmaxs
             r   _roi_pool_setup_contextr%   -   sN    >D;E4|NFF$'kkCO%C%C#Cr   c                     | j                   \  }}| j                  \  }}}}t        j                  j                  j                  |||| j                  | j                  | j                  ||||
      }	|	d d d d fS r   )	r   r   r   r   r   _roi_pool_backwardr   r	   r
   )
r   r   _grad_argmaxr   r$   r   r   r   r   r    s
             r   r'   r'   7   s    $$LD&*-//'J&%&&99J tT4--r   c                     |\  }}}}}}|\  }	}
| j                  ||
       |j                  | _        || _        || _        || _        || _        y r   )r   r   r   r   r	   r
   r   )r   r   r   r   r   r   r	   r
   r   r#   channel_mappings              r   _ps_roi_align_setup_contextr+   J   sY    NTKE4|^$FO$0kkCO%C%C#C'Cr   c                    | j                   \  }}| j                  \  }}}}t        j                  j                  j                  |||| j                  | j                  | j                  | j                  ||||      }	|	d d d d d fS r   )
r   r   r   r   r   _ps_roi_align_backwardr   r	   r
   r   
r   r   _grad_channel_mappingr   r*   r   r   r   r   r    s
             r   r-   r-   U   s    --D/*-//'J&%&&==J tT4t33r   c                     |\  }}}}}|\  }}	| j                  ||	       |j                  | _        || _        || _        || _        y r   r"   )
r   r   r   r   r   r   r	   r
   r#   r*   s
             r   _ps_roi_pool_setup_contextr1   i   sO    >D;E4|$FO$0kkCO%C%C#Cr   c                     | j                   \  }}| j                  \  }}}}t        j                  j                  j                  |||| j                  | j                  | j                  ||||
      }	|	d d d d fS r   )	r   r   r   r   r   _ps_roi_pool_backwardr   r	   r
   r.   s
             r   r3   r3   s   s    --D/*-//'J&%&&<<J tT4--r   c                     |\  }}}}}}}	}
}}}}}}| j                  |||||       || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _	        y r   )
r   stride_hstride_wpad_hpad_w
dilation_h
dilation_wgroupsoffset_groupsuse_mask)r   r   r   r   weightoffsetmaskbiasr5   r6   r7   r8   r9   r:   r;   r<   r=   s                    r   _deform_conv2d_setup_contextrB      s      	%t<CLCLCICICNCNCJ%CCLr   c                 t   | j                   \  }}}}}t        j                  j                  j	                  ||||||| j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        \  }}}	}
}|||	|
|d d d d d d d d d fS r   )r   r   r   r   _deform_conv2d_backwardr5   r6   r7   r8   r9   r:   r;   r<   r=   )r   r   r   r>   r?   r@   rA   r    grad_weightgrad_offset	grad_mask	grad_biass               r   rD   rD      s    (+(9(9%E664AFAVAVAnAn				

B>J[)Y$ 	 r   c                       fd}|S )Nc                 "    t        d d      )Nzdouble backwards on z not supported)RuntimeError)r   gradsop_names     r   backwardz%_no_double_backward.<locals>.backward   s    1'.IJJr    )rM   rN   s   ` r   _no_double_backwardrP      s    K Or   c                 ~    | j                         r,| j                  t        j                  ur| j	                         S | S )zCast to float32 matching at::autocast::cached_cast(at::kFloat, ...) behavior.

    Skips non-floating-point tensors and float64 tensors.
    )is_floating_pointdtyper   float64float)tensors    r   _autocast_castrW      s0    
 !fll%--&G||~Mr   c                     t         j                  j                  t              5  t         j                  j
                  j                  t        |       t        |      |      cd d d        S # 1 sw Y   y xY wr   )r   _C_ExcludeDispatchKeyGuard_all_autocast_keysr   r   nmsrW   )detsscoresiou_thresholds      r   _autocast_nmsr`      sU    		*	*+=	> 
yy$$((4 6"

 
 
s   =A++A4c           
      ,   | j                   }t        j                  j                  t              5  t        j
                  j                  j                  t        |       t        |      |||||      j                  |      cd d d        S # 1 sw Y   y xY wr   )
rS   r   rY   rZ   r[   r   r   	roi_alignrW   to)r   r   r   r	   r
   r   r   
orig_dtypes           r   _autocast_roi_alignre      su    J		*	*+=	> 	yy$$..5!4 
 "Z.	 	 	s   AB

Bc                 T   | j                   }t        j                  j                  t              5  t        j
                  j                  j                  t        |       t        |      |||      \  }}|j                  |      |j                  |      fcd d d        S # 1 sw Y   y xY wr   )
rS   r   rY   rZ   r[   r   r   roi_poolrW   rc   )r   r   r   r	   r
   rd   r   r$   s           r   _autocast_roi_poolrh      s    J		*	*+=	> <..775!4 
 yy$fii
&;;< < <   A$BB'c           	      V   | j                   }t        j                  j                  t              5  t        j
                  j                  j                  t        |       t        |      ||||      \  }}|j                  |      |j                  |      fcd d d        S # 1 sw Y   y xY wr   )
rS   r   rY   rZ   r[   r   r   ps_roi_alignrW   rc   )	r   r   r   r	   r
   r   rd   r   r*   s	            r   _autocast_ps_roi_alignrl   	  s    J		*	*+=	> 	E"'))"7"7"D"D5!4 #
 yy$o&8&8&DD	E 	E 	Es   A%BB(c                 T   | j                   }t        j                  j                  t              5  t        j
                  j                  j                  t        |       t        |      |||      \  }}|j                  |      |j                  |      fcd d d        S # 1 sw Y   y xY wr   )
rS   r   rY   rZ   r[   r   r   ps_roi_poolrW   rc   )r   r   r   r	   r
   rd   r   r*   s           r   _autocast_ps_roi_poolro     s    J		*	*+=	> E"'))"7"7"C"C5!4 #
 yy$o&8&8&DDE E Eri   c                 p   | j                   }t        j                  j                  t              5  t        j
                  j                  j                  t        |       t        |      t        |      t        |      t        |      |||||	|
|||      j                  |      cd d d        S # 1 sw Y   y xY wr   )
rS   r   rY   rZ   r[   r   r   deform_conv2drW   rc   )r   r>   r?   r@   rA   r5   r6   r7   r8   r9   r:   r;   r<   r=   rd   s                  r   _autocast_deform_conv2drr   $  s      J		*	*+=	> yy$$225!6"6"4 4 
 "Z.!  s   A2B,,B5ztorchvision::roi_align)setup_contextztorchvision::roi_poolztorchvision::ps_roi_alignztorchvision::ps_roi_poolztorchvision::deform_conv2dz torchvision::_roi_align_backwardrb   ztorchvision::_roi_pool_backwardrg   z#torchvision::_ps_roi_align_backwardrk   z"torchvision::_ps_roi_pool_backwardrn   z$torchvision::_deform_conv2d_backwardrq   r   IMPL)AutocastCUDAAutocastCPUAutocastXPUr\   ru   )%r   torch.librarytorchvision.extensionr   r   r   r%   r'   r+   r-   r1   r3   rB   rD   rP   rY   DispatchKeySetDispatchKeyrv   ru   rw   r[   rW   r`   re   rh   rl   ro   rr   	extension_has_opslibraryregister_autogradLibrary_autocast_lib_keyimplrO   r   r   <module>r      s     :($.&(4($.&:"L 
HHEHH00<<=hhehh22??@Ahhehh22>>?@ 

<E
E!P !!#	MM## "5E] $  
MM##$;=O_v#w	MM###%;Kf $  
MM##"$9Ic $  
MM##$&=Mi $ 
 
MM##$FH[\gHhi	MM##$EGZ[eGfg	MM##$IK^_mKno	MM##$HJ]^kJlm	MM##$JL_`oLpq MM))-@M ? C5-6;(;TBC
 z#5~F~'=~N}&;^L(?PG $r   