
    Ph)                     <   d dl mZmZmZ d dlZd dlZd dlmZ d dl	m
Z d dlmZ d dlmZ ddlmZmZmZ d	ej(                  d
ee   fdZ eeej(                         eeej.                  d      dej(                  d
ee   fd              Z  eeej.                  j.                        ej,                        Z eeej4                  d      dej(                  d
ee   fd       Zd	ej(                  d
efdZ eeej(                         eeej.                  d      dej(                  d
efd              Z  eeej.                  j.                        ej<                        Z eeej4                  d      dej(                  d
efd       Z eZd	ej(                  d
ee   fdZ! ee!ej(                         ee!ej.                  d      dej(                  d
ee   fd              Z" ee!ej.                  j.                        dej.                  j.                  d
ee   fd       Z# ee!ej4                  d      dej(                  d
ee   fd       Z$ ee!ejJ                  d      dej(                  d
ee   fd       Z& ee!ejN                  d      dejN                  d
ee   fd       Z(d	ej(                  d
efdZ) ee)ej(                         ee)ej4                  d      dej(                  d
efd              Z*dej(                  d e+d
ej(                  fd!Z,d"ej(                  d e+d
ej(                  fd#Z-d$ej(                  d e+d
ej(                  fd%Z.d"ej(                  d e+d
ej(                  fd&Z/	 d0d'ej(                  d(ed)ed e+d
ej(                  f
d*Z0	 	 	 d1d	ej(                  d(ee   d)ee   d e+d
ej(                  f
d+Z1d'ej(                  d,ed-eeef   d
ej(                  fd.Z2	 	 d2d	ej(                  d,ee   d-eeeef      d
ej(                  fd/Z3y)3    )ListOptionalTupleN)
tv_tensors)_functional_pil)BoundingBoxFormat)_log_api_usage_once   )_get_kernel_register_kernel_internalis_pure_tensorinptreturnc                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S N)torchjitis_scriptingget_dimensions_imager	   get_dimensionsr   typer   kernels     uC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchvision/transforms/v2/functional/_meta.pyr   r      ?    yy#D))'d4F$<    F)tv_tensor_wrapperimagec                     t        | j                  dd        }t        |      }|dk(  r|S |dk(  r|j                  dd       |S t	        d|       )N      r   r
   :Input tensor should have at least two dimensions, but got )listshapeleninsert	TypeErrorr   chwndimss      r   r   r      s]     u{{23
 CHEz
	!

1a
TUZT[\]]r   videoc                     t        |       S r   )r   r,   s    r   get_dimensions_videor/   )   s    &&r   c                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S r   )r   r   r   get_num_channels_imager	   get_num_channelsr   r   r   s     r   r2   r2   .   sA    yy%d++())4:6F$<r   c                 r    | j                   dd  }t        |      }|dk(  r|d   S |dk(  ryt        d|       )Nr    r!   r   r"   r
   r#   )r%   r&   r(   r)   s      r   r1   r1   8   sL     ++bc
CHEz1v	!TUZT[\]]r   c                     t        |       S r   )r1   r.   s    r   get_num_channels_videor5   H   s    !%((r   c                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S r   )r   r   r   get_size_imager	   get_sizer   r   r   s     r   r8   r8   R   s?    yyd##!4:.F$<r   c                 r    t        | j                  dd        }t        |      }|dk(  r|S t        d|       )Nr"   r#   )r$   r%   r&   r(   )r   hwr+   s      r   r7   r7   \   sC     
ekk"#	BGEz	TUZT[\]]r   c                 :    t        j                  |       \  }}||gS r   )_FPget_image_size)r   widthheights      r   _get_size_image_pilrA   g   s     &&u-ME6E?r   c                     t        |       S r   r7   r.   s    r   get_size_videorD   m   s    %  r   maskc                     t        |       S r   rC   )rE   s    r   get_size_maskrG   r   s    $r   bounding_boxc                 ,    t        | j                        S r   )r$   canvas_size)rH   s    r   get_size_bounding_boxesrK   w   s    (())r   c                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S r   )r   r   r   get_num_frames_videor	   get_num_framesr   r   r   s     r   rN   rN   |   r   r   c                      | j                   d   S )N)r%   r.   s    r   rM   rM      s     ;;r?r   xywhinplacec                 ^    |r| n| j                         }|ddd fxx   |dd df   z  cc<   |S N.r"   clone)rQ   rR   xyxys      r   _xywh_to_xyxyrX      6    4

DabMT#rr']"MKr   rW   c                 ^    |r| n| j                         }|ddd fxx   |dd df   z  cc<   |S rT   rU   )rW   rR   rQ   s      r   _xyxy_to_xywhr[      rY   r   cxcywhc                    |s| j                         } | ddd f   j                  d| j                         rd nd      j                         }| dd df   j	                  |       | ddd f   j                  | dd df          | S )N.r"   r:   floorrounding_mode)rV   divis_floating_pointabs_sub_add_)r\   rR   half_whs      r   _cxcywh_to_xyxyrg      s     S!"Wo!!"F<T<T<VD\c!diikG
37O!
37ORaR)Mr   c                 
   |s| j                         } | ddd f   j                  | dd df          | dd df   j                  d      j                  | ddd f         j	                  d| j                         rd nd       | S )N.r"   r^   r_   )rV   rd   mul_re   div_rb   )rW   rR   s     r   _xyxy_to_cxcywhrk      s    zz| 	abMtC!G}%bqbMqtCG}-221DLbLbLdDjq2rKr   bounding_boxes
old_format
new_formatc                    ||k(  r| S |t         j                  k(  rt        | |      } n|t         j                  k(  rt	        | |      } |t         j                  k(  rt        | |      } | S |t         j                  k(  rt        | |      } | S r   )r   XYWHrX   CXCYWHrg   r[   rk   )rl   rm   rn   rR   s       r   _convert_bounding_box_formatrr      s     Z &+++&~w?	(//	/(A&+++&~w?  
(//	/(Ar   c                    |t        d      t        j                  j                         st	        t
               t        j                  j                         st        |       r|t        d      t        | |||      S t        | t        j                        r[|t        d      t        | j                  t        j                        | j                  ||      }t        j                  || |      S t        dt!        |        d      )zLSee :func:`~torchvision.transforms.v2.ConvertBoundingBoxFormat` for details.zGconvert_bounding_box_format() missing 1 required argument: 'new_format'z6For pure tensor inputs, `old_format` has to be passed.rm   rn   rR   zCFor bounding box tv_tensor inputs, `old_format` must not be passed.)likeformatHInput can either be a plain tensor or a bounding box tv_tensor, but got 	 instead.)r(   r   r   r   r	   convert_bounding_box_formatr   
ValueErrorrr   
isinstancer   BoundingBoxesas_subclassTensorrv   wrapr   )r   rm   rn   rR   outputs        r   ry   ry      s     abb99!!#78yy>$#7UVV+DZT^hopp	D*22	3!bcc-U\\*t{{zcj
 vDDDVW[\`WaVbbkl
 	
r   rv   rJ   c                    | j                   }| j                         r| j                         n| j                         } t	        | |t
        j                  j                  d      }|ddd df   j                  d|d          |ddd df   j                  d|d          t	        |t        j                  |d      }|j                  |      S )NTrt   .r   r"   r
   )minmax)
dtyperb   rV   floatry   r   r   XYXYclamp_to)rl   rv   rJ   in_dtype
xyxy_boxes	out_boxess         r   _clamp_bounding_boxesr      s    
 ##H/=/O/O/Q^))+WeWkWkWmN,6j6R6R6W6WaeJ sADqDy  QKN ;sADqDy  QKN ;+055&RVI <<!!r   c                    t         j                  j                         st        t               t         j                  j                         st        |       r||t        d      t        | ||      S t        | t        j                        re||t        d      t        | j                  t         j                        | j                  | j                        }t        j                  ||       S t!        dt#        |        d      )zFSee :func:`~torchvision.transforms.v2.ClampBoundingBoxes` for details.zEFor pure tensor inputs, `format` and `canvas_size` have to be passed.)rv   rJ   zQFor bounding box tv_tensor inputs, `format` and `canvas_size` must not be passed.)ru   rw   rx   )r   r   r   r	   clamp_bounding_boxesr   rz   r   r{   r   r|   r}   r~   rv   rJ   r   r(   r   )r   rv   rJ   r   s       r   r   r      s     99!!#01yy>$#7>[0dee$T&kRR	D*22	3!8pqq&t'7'7'EdkkgkgwgwxvD11VW[\`WaVbbkl
 	
r   )F)NNF)NN)4typingr   r   r   	PIL.ImagePILr   torchvisionr   torchvision.transformsr   r=   torchvision.tv_tensorsr   torchvision.utilsr	   _utilsr   r   r   r~   intr   Imager   _get_dimensions_image_pilVideor/   r2   r1   get_image_num_channels_get_num_channels_image_pilr5   r8   r7   rA   rD   MaskrG   r|   rK   rN   rM   boolrX   r[   rg   rk   rr   ry   r   r    r   r   <module>r      s   ( (   " 9 4 1 J J $s)  >5<<8>:+;+;uU	^ 	^c 	^ V 9	^ W5nciiooVWZWiWij  >:+;+;uU' 'c ' V'5<< C  +U\\:+Z-=-=QVW^%,, ^3 ^ X ;^ [78H#))//Z[^[u[uv  +Z-=-=QVW)%,, )3 ) X) * 5<< DI  8U\\28Z%5%5O^%,, ^49 ^ P 3^ 8SYY__5syy 49  6
 8Z%5%5O!%,, !49 ! P! 8Z__N   c   O  8Z%=%=QVW***B*B *tCy * X* #  >5<<8>:+;+;uU   V 9 t   t  ELL 4 ELL 	%,, 	 	%,, 	 qvLL.?M^im
\\. /3.2	

,,
*+
 *+
 	

 \\
D"LL"*;"JOPSUXPX/"
\\"( +/-1

,,
&'
 %S/*
 \\	
r   