
    PhW                    ?   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	 d dl
Zd dlZd dlmZmZ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mZmZm Z m!Z! d dl"m#Z# d	d
l$m%Z%m&Z&m'Z' d	dl(m)Z)m*Z*m+Z+m,Z, de	ee-f   defdZ.dej^                  dej^                  fdZ0 e,e0ej^                         e,e0ejb                        dej^                  dej^                  fd              Z2 e,e0ejb                  jb                        dejb                  jb                  dejb                  jb                  fd       Z3 e,e0ejh                        dej^                  dej^                  fd       Z5dej^                  dejl                  dee-e-f   dej^                  fdZ7 e,e0ejp                  d      dejp                  dejp                  fd       Z9 e,e0ejt                        dej^                  dej^                  fd       Z;dej^                  dej^                  fdZ< e,e<ej^                         e,e<ejb                        dej^                  dej^                  fd               Z= e,e<ejb                  jb                        dejb                  dejb                  fd!       Z> e,e<ejh                        dej^                  dej^                  fd"       Z?dej^                  dejl                  dee-e-f   dej^                  fd#Z@ e,e<ejp                  d      dejp                  dejp                  fd$       ZA e,e<ejt                        dej^                  dej^                  fd%       ZBe0ZCe<ZD	 ddee-e-f   d&ee-   d'ee-   dee-   fd(Zej                  dd)fdej^                  d&ee-   de	ee-f   d'ee-   d*eeF   dej^                  fd+ZGdedeFfd,ZH e,eGej^                         e,eGejb                        ej                  dd)fdej^                  d&ee-   de	ee-f   d'ee-   d*eeF   dej^                  fd-              ZIej                  dfdejb                  jb                  d&e	ee-   e-f   de	ee-f   d'ee-   dejb                  jb                  f
d.ZJ e,eGejb                  jb                        ej                  dd)fdejb                  jb                  d&e	ee-   e-f   de	ee-f   d'ee-   d*eeF   dejb                  jb                  fd/       ZKddej^                  d&ee-   d'ee-   dej^                  fd0ZL e,eGejh                  d      	 ddejh                  d&ee-   d'ee-   d1edejh                  f
d2       ZM	 ddej^                  dee-e-f   d&ee-   d'ee-   deej^                  ee-e-f   f   f
d3ZN e,eGejp                  d      	 ddejp                  d&ee-   d'ee-   d1edejp                  f
d4       ZO e,eGejt                        ej                  dd)fdej^                  d&ee-   de	ee-f   d'ee-   d*eeF   dej^                  fd5       ZPej                  ddfdej^                  d6e	e-eRf   d7eeR   d8eRd9eeR   de	ee-f   d:e)d;eeeR      dej^                  fd<ZSej                  dfd6e	e-eRf   d7eeR   d8eRd9eeR   ded;eeeR      deeReeR   eeR   eeeR      f   fd=ZT	 dd;eeR   d6eRd7eeR   d8eRd9eeR   d>eFdeeR   fd?ZUd@eeR   dAe-dBe-dee-e-f   fdCZVdDej^                  dEej^                  dFeWd:e)dej^                  f
dGZX	 ddej^                  d@eeeR      deWd:e)dHeeW   dIeeeR      ddfdJZYdKej^                  dAe-dBe-dLe-dMe-dej^                  fdNZZ e,eSej^                         e,eSejb                        ej                  ddfdej^                  d6e	e-eRf   d7eeR   d8eRd9eeR   de	ee-f   d:e)d;eeeR      dej^                  fdO              Z[ e,eSejb                  jb                        ej                  ddfdejb                  jb                  d6e	e-eRf   d7eeR   d8eRd9eeR   de	ee-f   d:e)d;eeeR      dejb                  jb                  fdP       Z\	 	 ddej^                  dejl                  dee-e-f   d6e	e-eRf   d7eeR   d8eRd9eeR   d;eeeR      dQeFdeej^                  ee-e-f   f   fdRZ]	 ddej^                  dejl                  dee-e-f   d6e	e-eRf   d7eeR   d8eRd9eeR   d;eeeR      dej^                  fdSZ^ e,eSejp                  d      	 ddejp                  d6e	e-eRf   d7eeR   d8eRd9eeR   d;eeeR      dejp                  fdT       Z_	 	 ddej^                  d6e	e-eRf   d7eeR   d8eRd9eeR   d:e)d;eeeR      dej^                  fdUZ` e,eSejh                  d      	 	 ddejh                  d6e	e-eRf   d7eeR   d8eRd9eeR   d:e)d;eeeR      dejh                  fdV       Za e,eSejt                        ej                  ddfdej^                  d6e	e-eRf   d7eeR   d8eRd9eeR   de	ee-f   d:e)d;eeeR      dej^                  fdW       Zbej                  dddfdej^                  d6eRde	ee-f   dQeFd;eeeR      d:e)dej^                  fdXZc e,ecej^                         e,ecejb                        ej                  dddfdej^                  d6eRde	ee-f   dQeFd;eeeR      d:e)dej^                  fdY              Zd e,ecejb                  jb                        ej                  dddfdejb                  jb                  d6eRde	ee-f   dQeFd;eeeR      d:e)dejb                  jb                  fdZ       Ze	 	 ddej^                  dejl                  dee-e-f   d6eRdQeFd;eeeR      deej^                  ee-e-f   f   fd[Zf e,ecejp                  d      	 ddejp                  d6eRdQeFd;eeeR      dejp                  f
d\       Zg	 	 	 ddej^                  d6eRdQeFd;eeeR      d:e)dej^                  fd]Zh e,ecejh                  d      	 	 	 ddejh                  d6eRdQeFd;eeeR      d:e)dejh                  fd^       Zi e,ecejt                        ej                  dddfdej^                  d6eRde	ee-f   dQeFd;eeeR      d:e)dej^                  fd_       Zj	 	 ddej^                  d`ee-   d:ee	e-eReeR   f      daeWdej^                  f
dbZd`e	e-ee-   f   dee-   fdcZk e,eej^                         e,eejb                        	 	 ddej^                  d`ee-   d:ee	e-eReeR   f      daeWdej^                  f
dd              Zldej^                  deee-   d:e	e-eRf   daeWdej^                  f
dfZmdej^                  deee-   d:eeR   daeWdej^                  f
dgZn  e,eejb                  jb                        ej                         Zo e,eejh                        	 	 ddej^                  d`ee-   d:ee	e-eReeR   f      daeWdej^                  f
dh       Zp	 ddej^                  dejl                  dee-e-f   d`ee-   daeWdeej^                  ee-e-f   f   fdiZq e,eejp                  d      	 ddejp                  d`ee-   daeWdejp                  fdj       Zr e,eejt                        	 	 ddej^                  d`ee-   d:ee	e-eReeR   f      daeWdej^                  f
dk       Zsdej^                  dle-dme-dne-doe-dej^                  fdpZt e,etej^                         e,etejb                        dej^                  dle-dme-dne-doe-dej^                  fdq              Zuej                  Zv  e,etejb                  jb                        ev       dej^                  dejl                  dle-dme-dne-doe-deej^                  ee-e-f   f   fdrZw e,etejp                  d      dejp                  dle-dme-dne-doe-dejp                  fds       Zx e,etejh                        dej^                  dle-dme-dne-doe-dej^                  fdt       Zy e,etejt                        dej^                  dle-dme-dne-doe-dej^                  fdu       Zzej                  ddfdej^                  dveeee-         dweeee-         de	ee-f   d:e)dxeeeR      dej^                  fdyZ{dIeeR   dLe-dMe-dzej                  d{ej                  dej^                  fd|Z~dveeee-         dweeee-         dxeeeR      deeR   fd}Z e,e{ej^                         e,e{ejb                        ej                  ddfdej^                  dveeee-         dweeee-         de	ee-f   d:e)dxeeeR      dej^                  fd~              Z e,e{ejb                  jb                        ej                  ddfdejb                  jb                  dveeee-         dweeee-         de	ee-f   d:e)dxeeeR      dejb                  jb                  fd       Z	 ddej^                  dejl                  dee-e-f   dveeee-         dweeee-         dxeeeR      dej^                  fdZ e,e{ejp                  d      	 ddejp                  dveeee-         dweeee-         dxeeeR      dejp                  f
d       Z	 	 ddej^                  dveeee-         dweeee-         d:e)dxeeeR      dej^                  fdZ e,e{ejh                  d      	 	 ddejh                  dveeee-         dweeee-         d:e)dxeeeR      dejh                  fd       Z e,e{ejt                        ej                  ddfdej^                  dveeee-         dweeee-         de	ee-f   d:e)dxeeeR      dej^                  fd       Zej                  dfdej^                  dej^                  de	ee-f   d:e)dej^                  f
dZeZ e,eej^                         e,eejb                        ej                  dfdej^                  dej^                  de	ee-f   d:e)dej^                  f
d              Z e,eejb                  jb                        ej                  dfdejb                  jb                  dej^                  de	ee-f   d:e)dejb                  jb                  f
d       Zd&ee-e-f   d{ej                  dzej                  dej^                  fdZdej^                  dejl                  dee-e-f   dej^                  dej^                  f
dZ e,eejp                  d      dejp                  dej^                  dejp                  fd       Z	 ddej^                  dej^                  d:e)dej^                  fdZ e,eejh                  d      	 ddejh                  dej^                  d:e)dejh                  fd       Z e,eejt                        ej                  dfdej^                  dej^                  de	ee-f   d:e)dej^                  f
d       Zdej^                  dee-   dej^                  fdZdee-   dee-   fdZde-de-de-de-dee-   f
dZde-de-de-de-dee-e-f   f
dZ e,eej^                         e,eejb                        dej^                  dee-   dej^                  fd              Z e,eejb                  jb                        dejb                  jb                  dee-   dejb                  jb                  fd       Zdej^                  dejl                  dee-e-f   dee-   deej^                  ee-e-f   f   f
dZ e,eejp                  d      dejp                  dee-   dejp                  fd       Z e,eejh                        dej^                  dee-   dej^                  fd       Z e,eejt                        dej^                  dee-   dej^                  fd       Zej                  d)fdej^                  dle-dme-dne-doe-d&ee-   de	ee-f   d*eeF   dej^                  fdZ e,eej^                         e,eejb                        ej                  d)fdej^                  dle-dme-dne-doe-d&ee-   de	ee-f   d*eeF   dej^                  fd              Zej                  fdejb                  jb                  dle-dme-dne-doe-d&ee-   de	ee-f   dejb                  jb                  fdZ e,eejb                  jb                        ej                  d)fdejb                  jb                  dle-dme-dne-doe-d&ee-   de	ee-f   d*eeF   dejb                  jb                  fd       Zdej^                  dejl                  dle-dme-dne-doe-d&ee-   deej^                  ee-e-f   f   fdZ e,eejp                  d      dejp                  dle-dme-dne-doe-d&ee-   dejp                  fd       Zdej^                  dle-dme-dne-doe-d&ee-   dej^                  fdZ e,eejh                  d      dejh                  dle-dme-dne-doe-d&ee-   dejh                  fd       Z e,eejt                        ej                  d)fdej^                  dle-dme-dne-doe-d&ee-   de	ee-f   d*eeF   dej^                  fd       Zdej^                  d&ee-   deej^                  ej^                  ej^                  ej^                  ej^                  f   fdZd&ee-   dee-   fdZ e+eej^                         e+eejb                        dej^                  d&ee-   deej^                  ej^                  ej^                  ej^                  ej^                  f   fd              Z e+eejb                  jb                        dejb                  jb                  d&ee-   deejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  f   fd       Z e+eejt                        dej^                  d&ee-   deej^                  ej^                  ej^                  ej^                  ej^                  f   fd       Z	 ddej^                  d&ee-   deFdeej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  f
   fdZ e+eej^                         e+eejb                        	 ddej^                  d&ee-   deFdeej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  f
   fd              Z e+eejb                  jb                        	 ddejb                  jb                  d&ee-   deFdeejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  ejb                  jb                  f
   fd       Z e+eejt                        	 ddej^                  d&ee-   deFdeej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  ej^                  f
   fd       Zy)    N)AnyListOptionalSequenceTupleUnion)grid_sampleinterpolatepad)
tv_tensors)_functional_pil)_pad_symmetric)_compute_resized_output_size_get_perspective_coeffs_interpolation_modes_from_intInterpolationModepil_modes_mappingpil_to_tensorto_pil_image)_log_api_usage_once   )_get_size_image_pilclamp_bounding_boxesconvert_bounding_box_format)_FillTypeJIT_get_kernel'_register_five_ten_crop_kernel_internal_register_kernel_internalinterpolationreturnc                 ~    t        | t              rt        |       } | S t        | t              st	        d|  d      | S )NzlArgument interpolation should be an `InterpolationMode` or a corresponding Pillow integer constant, but got .)
isinstanceintr   r   
ValueErrorr   s    yC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchvision/transforms/v2/functional/_geometry.py_check_interpolationr(      sQ    -%5mD  '89$oQ(
 	
     inptc                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S )zISee :class:`~torchvision.transforms.v2.RandomHorizontalFlip` for details.)torchjitis_scriptinghorizontal_flip_imager   horizontal_flipr   typer*   kernels     r'   r0   r0   )   s?    yy$T**($t*5F$<r)   imagec                 $    | j                  d      S )Nflipr4   s    r'   r/   r/   4        ::b>r)   c                 ,    t        j                  |       S N)_FPhflipr9   s    r'   _horizontal_flip_image_pilr?   :       99Ur)   maskc                     t        |       S r<   r/   rA   s    r'   horizontal_flip_maskrE   ?   s     &&r)   bounding_boxesformatcanvas_sizec                 ,   | j                   }| j                         j                  dd      } |t        j                  j
                  k(  r5| d d ddgf   j                  |d         j                         | d d ddgf<   n|t        j                  j                  k(  r@| d d df   j                  | d d df         j                  |d         j                          n)| d d df   j                  |d         j                          | j                  |      S )Nr6      r      r   
shapeclonereshaper   BoundingBoxFormatXYXYsub_neg_XYWHadd_rF   rG   rH   rM   s       r'   horizontal_flip_bounding_boxesrW   D          E#))+33B:N--222$21q!f9$=$B$B;q>$R$W$W$Yq1a&y!	://44	4q!t!!.A"67<<[^LQQSq!t!!+a.1668!!%((r)   F)tv_tensor_wrapperc                     t        | j                  t        j                        | j                  | j
                        }t        j                  ||       S NrG   rH   like)rW   as_subclassr,   TensorrG   rH   r   wrapr*   outputs     r'   (_horizontal_flip_bounding_boxes_dispatchrd   U   s?    +&t{{HXHXF ??6--r)   videoc                     t        |       S r<   rC   re   s    r'   horizontal_flip_videorh   ]   s     ''r)   c                     t         j                  j                         rt        |       S t	        t
               t        t
        t        |             } ||       S )zGSee :class:`~torchvision.transforms.v2.RandomVerticalFlip` for details.)r,   r-   r.   vertical_flip_imager   vertical_flipr   r1   r2   s     r'   rk   rk   b   s?    yy"4((&T
3F$<r)   c                 $    | j                  d      S )Nr7   r9   s    r'   rj   rj   m   r:   r)   c                 ,    t        j                  |       S r<   )r=   vflipr9   s    r'   _vertical_flip_image_pilrp   s   r@   r)   c                     t        |       S r<   rj   rD   s    r'   vertical_flip_maskrs   x   s    t$$r)   c                 ,   | j                   }| j                         j                  dd      } |t        j                  j
                  k(  r5| d d ddgf   j                  |d         j                         | d d ddgf<   n|t        j                  j                  k(  r@| d d df   j                  | d d df         j                  |d         j                          n)| d d df   j                  |d         j                          | j                  |      S )Nr6   rJ      r   r   rL   rV   s       r'   vertical_flip_bounding_boxesrv   }   rX   r)   c                     t        | j                  t        j                        | j                  | j
                        }t        j                  ||       S r[   )rv   r_   r,   r`   rG   rH   r   ra   rb   s     r'   &_vertical_flip_bounding_boxes_dispatchrx      s?    )&t{{HXHXF ??6--r)   c                     t        |       S r<   rr   rg   s    r'   vertical_flip_videorz      s    u%%r)   sizemax_sizec                 |    t        |t              r|g}n|t        |      dk7  rt        d      t	        | ||      S )Nr   zmax_size should only be passed if size specifies the length of the smaller edge, i.e. size should be an int or a sequence of length 1 in torchscript mode.r{   r|   )r#   r$   lenr%   __compute_resized_output_size)rH   r{   r|   s      r'   r   r      sI     $v		#d)q.X
 	
 )4(SSr)   T	antialiasc                     t         j                  j                         rt        | ||||      S t	        t
               t        t
        t        |             } || ||||      S )z;See :class:`~torchvision.transforms.v2.Resize` for details.r{   r   r|   r   )r,   r-   r.   resize_imager   resizer   r1   )r*   r{   r   r|   r   r3   s         r'   r   r      sU     yyDt=S[gpqqd,F$T]fggr)   c                     | t         j                  k(  rIt        j                  j	                         rydt        j
                  j                  j                         v S | t         j                  k(  S )NTAVX2)	r   BILINEARr,   _dynamois_compilingbackendscpuget_cpu_capabilityBICUBICr&   s    r'   _do_native_uint8_resize_on_cpur      sT    )222==%%'U^^//BBDDD-5555r)   c                    t        |      }|dn|}d }|t        j                  k(  s|t        j                  k(  rd}nd}| j                  }| j                         }|dd  \  }}	}
t        |	|
f||      \  }}||f|	|
fk(  r| S |dkD  r'| j                  }t        j                  t        j                  g}|t        j                  k(  s|t        j                  k(  r |j                  t        j                         nC| j                  j                   dk(  r*t#        |      r|j                  t        j                         | j%                  d||	|
      } | j'                         }| j)                  t        j*                        r@| j                  d   dk(  r.||d   k7  r&t-        |      }||d<   | j/                  d||	|
f|      } ||v}|r | j1                  t        j                  	      } t3        | ||g|j4                  ||
      } |r|t        j                  k(  r&|t        j                  k(  r| j7                  dd      } |t        j                  t        j8                  t        j:                  t        j<                  t        j>                  fv r| jA                         } | j1                  |	      } | j%                  |d d |||fz         S )NFr~   r   r   r6   )memory_formatr   dtype)r{   modealign_cornersr      )minmax)!r(   r   r   r   rM   numelr   r   r,   float32float64NEARESTNEAREST_EXACTappenduint8devicer1   r   rO   strideis_contiguouschannels_lastlist
as_stridedtor
   valueclamp_int8int16int32int64round_)r4   r{   r   r|   r   r   rM   r   num_channels
old_height	old_width
new_height	new_widthr   acceptable_dtypesstridesnew_strides	need_casts                     r'   r   r      s|    )7M"*	I$(M)222mGXG`G`6` 	KKEKKME*/*'L*i8*i9PW[fnoJ	I:y"99	"]]EMM:-555J[JiJi9i$$U[[1\\%'-m<!((5b,
IF,,.U-@-@AekkRSnXYFY^cgnopgq^q w-K"KN$$az9%M{[E!22	HH5==H1Ei($$'
  1 9 99eu{{>R4ejj%++u{{EKKXXHH5H)E==s|Z&KKLLr)   c                     | j                   | j                  }}t        ||f||      \  }}t        |      }||f||fk(  r| S | j	                  ||ft
        |         S )Nr~   )resample)heightwidthr   r(   r   r   )r4   r{   r   r|   r   r   r   r   s           r'   _resize_image_pilr     ss     "LL%++	J8	YJ	 )7MI:y"99<<J/:KM:Z<[[r)   c                 R    |du rt        j                  d       t        | |||      S )NFWAnti-alias option is always applied for PIL Image input. Argument antialias is ignored.r{   r   r|   )warningswarnr   )r4   r{   r   r|   r   s        r'   __resize_image_pil_dispatchr   ,  s+     EopU]U]^^r)   c                     | j                   dk  r| j                  d      } d}nd}t        | |t        j                  |      }|r|j                  d      }|S )Nru   r   TFr   )ndim	unsqueezer   r   r   squeeze)rA   r{   r|   needs_squeezerc   s        r'   resize_maskr   9  sS    yy1}~~a $T9J9R9R]efF"Mr)   kwargsc                     t        | j                  t        j                        ||      }t	        j
                  ||       S )Nr|   r]   )r   r_   r,   r`   r   ra   )r*   r{   r|   r   rc   s        r'   _resize_mask_dispatchr   H  s2     ))%,,7QF??6--r)   c                    |\  }}t        |||      \  }}||f||fk(  r| |fS ||z  }||z  }	t        j                  ||	||	g| j                        }
| j	                  |
      j                  | j                        ||ffS )Nr~   r   )r   r,   tensorr   mulr   r   )rF   rH   r{   r|   r   r   r   r   w_ratioh_ratioratioss              r'   resize_bounding_boxesr   P  s     (J	84ZbcJ	I:y"99{**)#G:%G\\7GWg>~G\G\]F6"%%n&:&:;	Y r)   c                     t        | j                  t        j                        | j                  ||      \  }}t        j                  || |      S )Nr   r^   rH   )r   r_   r,   r`   rH   r   ra   )r*   r{   r|   r   rc   rH   s         r'   _resize_bounding_boxes_dispatchr   b  sF     0&(8(8$FK ??6+FFr)   c                 "    t        | ||||      S )Nr   )r   )re   r{   r   r|   r   s        r'   resize_videor   l  s     DPXdmnnr)   angle	translatescaleshearfillcenterc           
          t         j                  j                         rt        | |||||||      S t	        t
               t        t
        t        |             } || |||||||      S )zASee :class:`~torchvision.transforms.v2.RandomAffine` for details.r   r   r   r   r   r   r   )r,   r-   r.   affine_imager   affiner   r1   )	r*   r   r   r   r   r   r   r   r3   s	            r'   r   r   w  sx     yy'	
 		
 d,F#	 	r)   c                 B   t        | t        t        f      st        d      t        |t        t
        f      st        d      t        |      dk7  rt        d      |dk  rt        d      t        |t        j                  t        t
        ff      st        d      t        |t              st        d      t        | t              rt        |       } t        |t
              rt	        |      }t        |t        j                        r|dg}t        |t
              rt	        |      }t        |      d	k(  r
|d
   |d
   g}t        |      dk7  rt        d|       |9t        |t        t
        f      st        d      |D cg c]  }t        |       }}| |||fS c c}w )Nz%Argument angle should be int or floatz'Argument translate should be a sequencerK   z3Argument translate should be a sequence of length 2        z!Argument scale should be positivezAShear should be either a single value or a sequence of two valuesz4Argument interpolation should be a InterpolationModer   r   z6Shear should be a sequence containing two values. Got z$Argument center should be a sequence)r#   r$   float	TypeErrorr   tupler   r%   numbersNumberr   )r   r   r   r   r   r   cs          r'   _affine_parse_argsr     sv    ec5\*?@@i$/ABB
9~NOO|<==egnntUm<=[\\m%67NOO%e)U#O	%(%U
5zQq58$
5zQQRWQXYZZ&4-0BCC(./1eAhF/)UF** 0s   Finvertedc                 8   t        j                  |      }t        j                  |d         }t        j                  |d         }| \  }	}
|\  }}t        j                  |      }t        j                  |      }||z
  }|	|z   }|
|z   }t        j                  |      |z  }||z  t        j                  |      z    }t        j                  |      |z  }t        j                  |      ||z  z
  }|rV||z  | |z  d| |z  ||z  dg}|dxx   |	|d   |z  z
  |d   |z  z
  z  cc<   |dxx   |
|d   |z  z
  |d   |z  z
  z  cc<   |S ||z  ||z  d||z  ||z  dg}|dxx   ||d   |	z  z
  |d   |
z  z
  z  cc<   |dxx   ||d   |	z  z
  |d   |
z  z
  z  cc<   |S )Nr   r   r   rK      ru   rJ   )mathradianscostansin)r   r   r   r   r   r   rotsxsycxcytxtycos_sytan_sxrot_minus_sy
cx_plus_tx
cy_plus_tyabr   dmatrixs                          r'   _get_inverse_affine_matrixr    s   . ,,u
C	eAh	B	eAh	BFBFB XXb\FXXb\F8LbJbJ 	'A
f*txx}
$%A'AF
"A e)aR%Zqb5j!e)SI 	q	R&)j006!9z3III	q	R&)j006!9z3III	 M e)QYQYE	3G 	q	Z&)b.06!9r>AA	q	Z&)b.06!9r>AA	Mr)   r  whc                    d|z  }d|z  }t        j                  | | dg| |dg||dg|| dgg      }t        j                  | t         j                        j                  dd      }t        j                  ||j
                        }|j                  d      \  }}	t        j                  ||f      }
|j                  |
       |	j                  |
       d}d|z  }|	j                  |      j                         j                  |      j                         }|j                  |      j                         j                  |      j                         }|j                  |      }t        |d         t        |d	         fS )
N      ?      ?r   rK   ru   r   dimg-C6?r   )r,   r   r   viewmatmulTaminmaxrU   mul_trunc_ceil_floor_rR   r$   )r  r  r  half_whalf_hptsthetanew_ptsmin_valsmax_valshalfstolinv_tolcmaxcminr{   s                   r'   _compute_affine_output_sizer!    s`    1WF1WF
,,Wvgs#Wfc"VS!fWc"		
C LLu{{388A>Ell3(G Q/Hh LL&&)*EMM%MM% CCiG==!((*//4::<D==!((*//4;;=D99T?DtAw<T!W%%r)   imggridr   c                    | j                   }|j                   d   |j                   d   }}|dd  \  }}}	|d d |||fz   }
| j                         dk(  r| j                  |
      S | j                  d|||	      } | j                   d   }| j                  |j                  k(  }|r| n| j	                  |j                        }|dkD  r|j                  |ddd      }|It        j                  |d||	f|j                  |j                        }t        j                  ||fd      }t        |||dd	
      }|t        j                  |dd      \  }}|j                  |      }t        |t        t        f      r|nt!        |      g}t        j"                  ||j                  |j                        j%                  dddd      }|dk(  r|dk  }|j                  |      |   ||<   n/|j'                  |      j)                  |      j+                  |      }|s)|j-                         j	                  | j                        n|} | j                  |
      S )Nr   rK   r   r   r6   r   r   r  zerosF)r   padding_moder   )r6   )indicesr  nearestr	  )rM   r   rO   r   r   expandr,   onesr   catr	   tensor_split	expand_asr#   r   r   r   r   r  rR   r  rU   r   )r"  r#  r   r   input_shapeoutput_heightoutput_widthr   input_heightinput_widthoutput_shapesquashed_batch_sizefp	float_imgrA   	fill_listfill_img	bool_masks                     r'   _apply_grid_transformr;  2  s*   ))K"&**Q-A<M.9"#.>+L,s#|]L&QQL
yy{a{{<((
++b,k
BC))A, 
djj	 Bsvvdjj1IQ{{.B; zz !\;?y_h_o_o
 IIy$/Q7	It$W\abI ,,Y2N	4~~i(&teT];D%+	<<	IYIYZ__`aceghjkl9s
I#+#5#5i#@#KIi  "x055d;@@JI24)




		
*)C;;|$$r)   supported_interpolation_modescoeffsc                    |4t        |t              st        d      t        |      dk7  rt	        d      |t        |      dk7  rt	        d      |mt        |t
        t        f      r6t        |      }| j                  d   }|dkD  r8||k7  r3t	        d| d	| d
      t        |t        t        f      st	        d      ||vrt	        d| d      y )Nz Argument matrix should be a list   z*Argument matrix should have 6 float values   z*Argument coeffs should have 8 float valuesr   r   z`The number of elements in 'fill' cannot broadcast to match the number of channels of the image (z != )z8Argument fill should be either int, float, tuple or listzInterpolation mode 'z"' is unsupported with Tensor input)	r#   r   r   r   r%   r   rM   r$   r   )r4   r  r   r   r<  r=  lengthr   s           r'   _assert_grid_transform_inputsrC  b  s     &$'>??[AIJJc&kQ.EFFdUDM*YF ;;r?Lzf4 ..4XT,qJ  D3,/WXX99/>`abb :r)   r  owohc                    | j                   }| j                  }t        j                  d||d||      }t        j                  d|z
  dz  |dz
  dz  ||      }|d   j                  |       t        j                  d|z
  dz  |dz
  dz  ||      j                  d      }	|d	   j                  |	       |d
   j                  d       | j                  dd      j                  t        j                  d|z  d|z  g||            }
|j                  d||z  d      j                  |
      }|j                  d||d      S )Nr   ru   r%  r
  r	  )stepsr   .r   r6   .r   .rK   rK   )r   r   r,   emptylinspacecopy_
unsqueeze_fill_	transposediv_r   r  bmm)r  r  r  rD  rE  r   r   	base_gridx_gridy_gridrescaled_thetaoutput_grids               r'   _affine_gridrX    s0    KKE\\FAr2qfEI^^S2X,rCx3.>bQWXFfF#^^S2X,rCx3.>bQWXccdfgFfF#fA__Q*//cAgsQw=OW\ek0lmN..BGQ/33NCKAr2q))r)   c                 r   t        |      }t        ||||||      \  }}}}| j                  dd  \  }}	ddg}
|&t        ||	|g      D cg c]  \  }}||dz  z
   }
}}|D cg c]  }t	        |       }}t        |
||||      }t        | ||j                  |ddg       t        j                  |       r| j                  nt        j                  }t        j                  ||| j                        j                  ddd	      }t        ||	||	|
      }t!        | ||j                  |      S c c}}w c c}w )Nrm   r   r	  r)  bilinearr%  r   rK   ru   r  r  rD  rE  r   )r(   r   rM   zipr   r  rC  r   r,   is_floating_pointr   r   r   r   rO   rX  r;  )r4   r   r   r   r   r   r   r   r   r   center_fr   sttranslate_fr  r   r  r#  s                      r'   r   r     s8    )7M&8	5RWYfhn&o#E9eVKK$MFESzH.1&5&/.JK.JdaQS[.JK%./Y58YK/'%eUSF!%1D1DdYXbLcd 2259EKKu}}ELLuU\\BJJ1aQRSE&UvFD m.A.AMM L/s   
D.#D4c                     t        |      }t        ||||||      \  }}}}|t        |       \  }}	|	dz  |dz  g}t        |||||      }
t	        j
                  | |
t        |   |      S )Nr	  r   r   )r(   r   r   r  r=   r   r   )r4   r   r   r   r   r   r   r   r   r   r  s              r'   _affine_image_pilre    s     )7M&8	5RWYfhn&o#E9eV
 ~+E2#+v|,'y%OF::eV3D]3SZ^__r)   r*  c	           	      0   | j                         dk(  r| |fS | j                  }	| j                  }
| j                         r| j	                         n| j                         } | j                  }| j                  }t        | |t        j                  j                  d      j                  dd      } t        ||||t        j                  |      \  }}}}||\  }}|dz  |dz  g}t        |||||d      }t!        j"                  |||	      j                  d
d      j$                  }| d d ddgd
dgd
dgddggf   j                  dd
      }t!        j&                  |t!        j(                  |j                  d   d||      gd      }t!        j*                  ||      }|j                  ddd
      }t!        j,                  |d      \  }}t!        j&                  ||gd      }|r|\  }}t!        j"                  g ddt        |      dgt        |      t        |      dgt        |      ddgg||	      }t!        j*                  ||      }t!        j.                  |dd      }|j1                  |j3                  d             t        |||||      }t5        |||      \  }}||f}t7        |t        j                  j                  |      }t        |t        j                  j                  |d      j                  |	      }|j9                  |
      }||fS )Nr   T
old_format
new_formatinplacer6   rJ   r	  F)r   r%  rK   ru   r   r   r   r  )r   r   r
  r   r
  )r  keepdim)r   rK   r\   )r   rM   r   r^  rN   r   r   r   r   rP   rQ   rO   r   r   r   r  r,   r   r  r,  r+  r  r  aminrR   repeatr!  r   r   )rF   rG   rH   r   r   r   r   r   r*  original_shapeoriginal_dtyper   r   r   r   affine_vectortransposed_affine_matrixpointstransformed_pointsout_bbox_minsout_bbox_maxs
out_bboxes
new_pointstrr   r   s                             r'   "_affine_bounding_boxes_with_expandrz    s    "{**#))N#))N/=/O/O/Q^))+WeWkWkWmN  E""F#v*:V:V:[:[ei	
 gb!n	  '9y%(9(A(A6'#E9eV ~##+v|,.vuiPU`efM	

 
A	
  AAAAA??@HHQOFYY

6<<?AfTY Z[acdFf.FG ,33B1=#(==1C#K M=M=9qAJ $eFmS)uuV}c2usC(	 	
 \\&*BC
ZZ
48		&)*265)UTYZ ;M5RX Y	:!9-%j9U9U9Z9ZhstJ,z;;@@V]agn  ~.J{""r)   c                 4    t        | |||||||d	      \  }}	|S )NFrG   rH   r   r   r   r   r   r*  rz  )
rF   rG   rH   r   r   r   r   r   out_box_s
             r'   affine_bounding_boxesr  2  s4     4
JGQ Nr)   c           
          t        | j                  t        j                        | j                  | j
                  |||||      }t        j                  ||       S )N)rG   rH   r   r   r   r   r   r]   )r  r_   r,   r`   rG   rH   r   ra   )r*   r   r   r   r   r   r   rc   s           r'   _affine_bounding_boxes_dispatchr  J  sR     #&{{$$	F ??6--r)   c           
          | j                   dk  r| j                  d      } d}nd}t        | ||||t        j                  ||      }|r|j                  d      }|S )Nru   r   TFr   )r   r   r   r   r   r   )	rA   r   r   r   r   r   r   r   rc   s	            r'   affine_maskr  a  sg     yy1}~~a '//	F "Mr)   c           	          t        | j                  t        j                        ||||||      }t	        j
                  ||       S )N)r   r   r   r   r   r   r]   )r  r_   r,   r`   r   ra   )	r*   r   r   r   r   r   r   r   rc   s	            r'   _affine_mask_dispatchr    sE     &F ??6--r)   c           
      (    t        | |||||||      S )Nr   )r   )re   r   r   r   r   r   r   r   s           r'   affine_videor    s)     #	 	r)   c                     t         j                  j                         rt        | |||||      S t	        t
               t        t
        t        |             } || |||||      S )zCSee :class:`~torchvision.transforms.v2.RandomRotation` for details.)r   r   r*  r   r   )r,   r-   r.   rotate_imager   rotater   r1   )r*   r   r   r*  r   r   r3   s          r'   r  r    s[     yyD]SY`dmsttd,F$e=VZcijjr)   c                 D   t        |      }| j                  dd  \  }}ddg}|&t        |||g      D 	
cg c]  \  }	}
|	|
dz  z
   }}	}
t        || ddgdddg      }t	        | ||j
                  |ddg       |rt        |||      n||f\  }}t        j                  |       r| j                  nt        j                  }t        j                  ||| j                        j                  dd	d
      }t        |||||      }t        | ||j
                  |      S c c}
}	w )Nrm   r   r	  r
  r)  rZ  r%  r   rK   ru   r[  r\  )r(   rM   r]  r  rC  r   r!  r,   r^  r   r   r   r   rO   rX  r;  )r4   r   r   r*  r   r   r2  r3  r_  r   r`  r  r1  r0  r   r  r#  s                    r'   r  r    s4    )7M %BC 0L+SzH.1&;:U.VW.VdaQS[.VW (5&3*cCQT:VF!%1D1DdYXbLcd KQ#FKFWbdpVq  L- !2259EKKu}}ELLuU\\BJJ1aQRSER_`D m.A.AMM Xs   Dc                 \    t        |      }t        j                  | |t        |   |||      S N)r   r*  r   r   )r(   r=   r  r   )r4   r   r   r*  r   r   s         r'   _rotate_image_pilr    s4     )7M::u$5m$DVZ^gm r)   c                 4    t        | ||| ddgdddg||	      S )Nr   r
  r|  r}  )rF   rG   rH   r   r*  r   s         r'   rotate_bounding_boxesr    s6     .f*Cj
 
r)   c                     t        | j                  t        j                        | j                  | j
                  |||      \  }}t        j                  || |      S )N)rG   rH   r   r*  r   r   )r  r_   r,   r`   rG   rH   r   ra   )r*   r   r*  r   r   rc   rH   s          r'   _rotate_bounding_boxes_dispatchr    sS     0&{{$$FK ??6+FFr)   c                     | j                   dk  r| j                  d      } d}nd}t        | ||t        j                  ||      }|r|j                  d      }|S )Nru   r   TF)r   r*  r   r   r   )r   r   r  r   r   r   )rA   r   r*  r   r   r   rc   s          r'   rotate_maskr    sa     yy1}~~a '//F "Mr)   c                     t        | j                  t        j                        ||||      }t	        j
                  ||       S )N)r   r*  r   r   r]   )r  r_   r,   r`   r   ra   )r*   r   r*  r   r   r   rc   s          r'   _rotate_mask_dispatchr  3  s8     ))%,,7uVZ^gmnF??6--r)   c                 $    t        | |||||      S r  )r  )re   r   r   r*  r   r   s         r'   rotate_videor  @  s     uM&W[djkkr)   paddingr'  c                     t         j                  j                         rt        | |||      S t	        t
               t        t
        t        |             } || |||      S )z8See :class:`~torchvision.transforms.v2.Pad` for details.r  r   r'  )r,   r-   r.   	pad_imager   r   r   r1   )r*   r  r   r'  r3   s        r'   r   r   L  sN     yywTUUd4j)F$dNNr)   c                 l   t        | t              r	| x}x}x}}nt        | t        t        f      rrt	        |       dk(  r| d   x}x}x}}nft	        |       dk(  r| d   x}}| d   x}}nIt	        |       dk(  r| d   }| d   }| d   }| d   }n&t        dt	        |        d      t        d|        ||||gS )	Nr   r   rK   rJ   ru   z<Padding must be an int or a 1, 2, or 4 element tuple, not a z element tuplezE`padding` should be an integer or tuple or list of integers, but got )r#   r$   r   r   r   r%   r   )r  pad_left	pad_rightpad_top
pad_bottoms        r'   _parse_pad_paddingr  \  s    '36===9=w	GeT]	+w<1:A!*DHDyD7Z\Q#*1:-Hy#*1:-Gj\QqzHajG
I JNsSZ|n\jk  _`g_hijji*55r)   c                     t        |      }|dvrt        d| d      |d}t        |t        t        f      rt        | |||      S t        |      dk(  rt        | ||d   |      S t        | |||      S )N)constantedgereflect	symmetricz``padding_mode` should be either `'constant'`, `'edge'`, `'reflect'` or `'symmetric'`, but got `'z'`.r   r   r'  r   )r  r%   r#   r$   r   _pad_with_scalar_fillr   _pad_with_vector_fill)r4   r  r   r'  torch_paddings        r'   r  r  t  s     'w/MGG%c+
 	

 |$e%$UMS_``	Ta$UMQVbcc$UMS_``r)   r  c                    | j                   }|dd  \  }}}d}|d d D ]  }	||	z  }	 | j                  ||||      } |dk(  rd}|dk(  rt        | ||t        |            } nr|dv rb| j                  }
| j                         s"d}| j                  t        j                        } nd	}t        | ||
      } |r| j                  |
      } nt        | |      } | j                   dd  \  }}| j                  |d d |||fz         S )Nr   r   r  	replicater  )r   r   )r  r  TFr   rm   )
rM   rO   	torch_padr   r   r^  r   r,   r   r   )r4   r  r   r'  rM   r   r   r   
batch_sizer`  r   
needs_castr   r   s                 r'   r  r    s    KKE"'*L&%J3BZa
  MM*lFEBEv #z!%\tU	1	1 &&(JHHU]]+EJ%\BHHUOEum4!KK,J	==s|Z&KKLLr)   c                 ~   |dk7  rt        d| d      t        | |dd      }|\  }}}}t        j                  || j                        j                  | j                        j                  dd	d	      }|dkD  r||d
d |d d f<   |dkD  r||d
d d d |f<   |dkD  r||d
| d d d f<   |dkD  r||d
d d | d f<   |S )Nr  Padding mode 'z(' is not supported if fill is not scalarr   r  r   r   r6   r   .)r%   r  r,   r   r   r   r   rO   )	r4   r  r   r'  rc   leftrighttopbottoms	            r'   r  r    s     z!>,7_`aa"5-ajYF,D%f
 <<U\\255EKK5HPPQSUVXYZD
Qw#sDSD!|ax $sAuu}z#'sVGHa qy"&sAvwMr)   c                     |d}t        |t        t        f      rt        d      | j                  dk  r| j                  d      } d}nd}t        | |||      }|r|j                  d      }|S )Nr   z&Non-scalar fill value is not supportedru   TFr  )r#   r   r   r%   r   r   r  r   )rA   r  r   r'  r   rc   s         r'   pad_maskr    sq     |$&ABByy1}~~a tW4lSF"Mr)   c                 L   |dvrt        d| d      t        |      \  }}}}|t        j                  j                  k(  r||||g}	n||ddg}	| t        j                  |	| j                  | j                        z   } |\  }
}|
||z   z  }
|||z   z  }|
|f}t        | ||      |fS )Nr  r  z&' is not supported with bounding boxesr   r%  r\   )
r%   r  r   rP   rQ   r,   r   r   r   r   )rF   rG   rH   r  r'  r  r  r  r  r   r   r   s               r'   pad_bounding_boxesr    s     <'>,7]^__1':D%f--222S$$S!Q#ell3n>R>R[i[p[p&qqNMFE
cFlF	TE\E5/Kv;WYdddr)   c                     t        | j                  t        j                        | j                  | j
                  ||      \  }}t        j                  || |      S )N)rG   rH   r  r'  r   )r  r_   r,   r`   rG   rH   r   ra   )r*   r  r'  r   rc   rH   s         r'   _pad_bounding_boxes_dispatchr    sP     -&{{$$!FK ??6+FFr)   c                      t        | |||      S )Nr  )r  )re   r  r   r'  s       r'   	pad_videor  #  s     UG$\JJr)   r  r  r   r   c                     t         j                  j                         rt        | ||||      S t	        t
               t        t
        t        |             } || ||||      S )?See :class:`~torchvision.transforms.v2.RandomCrop` for details.r  r  r   r   )r,   r-   r.   
crop_imager   cropr   r1   )r*   r  r  r   r   r3   s         r'   r  r  -  sP    yy$Cd6OOtDz*F$Cd6GGr)   c           
         | j                   dd  \  }}||z   }||z   }|dk  s|dk  s
||kD  s||kD  r| dt        |d      |t        |d      |f   } t        t        |d      |z
  d      t        |t        ||      z
  d      t        t        |d      |z
  d      t        |t        ||      z
  d      g}	t        | |	dd      S | d||||f   S )Nrm   r   .r  r  )rM   r   r   r  )
r4   r  r  r   r   r  r  r  r  r  s
             r'   r  r  8  s     ;;rsDAq5LE6\Fax37eai6A:c3sA;/T11EEFE1$a(At$a(FA$a(Q$a(	
 %UMPZ[[c&j$u*,--r)   c                     |t         j                  j                  k(  r||||g}n||ddg}| t        j                  || j
                  | j                        z
  } ||f}t        | ||      |fS )Nr   r%  r\   )r   rP   rQ   r,   r   r   r   r   )rF   rG   r  r  r   r   subrH   s           r'   crop_bounding_boxesr  P  sv     --222S$$S!Q#ell3n>R>R[i[p[p&qqN5/Kv;WYdddr)   c                     t        | j                  t        j                        | j                  ||||      \  }}t        j                  || |      S )N)rG   r  r  r   r   r   )r  r_   r,   r`   rG   r   ra   )r*   r  r  r   r   rc   rH   s          r'   _crop_bounding_boxes_dispatchr  e  sJ     .&t{{$W]ejFK ??6+FFr)   c                     | j                   dk  r| j                  d      } d}nd}t        | ||||      }|r|j                  d      }|S )Nru   r   TF)r   r   r  r   )rA   r  r  r   r   r   rc   s          r'   	crop_maskr  o  sM    yy1}~~a c47F"Mr)   c                      t        | ||||      S r<   )r  )re   r  r  r   r   s        r'   
crop_videor    s    eS$66r)   startpoints	endpointscoefficientsc                     t         j                  j                         rt        | |||||      S t	        t
               t        t
        t        |             } || |||||      S )zFSee :class:`~torchvision.transforms.v2.RandomPerspective` for details.)r  r  r   r   r  )r,   r-   r.   perspective_imager   perspectiver   r1   )r*   r  r  r   r   r  r3   s          r'   r  r    sl     yy #'%
 	
 $d4j1F#! r)   r   r   c                    t        j                  | d   | d   | d   g| d   | d   | d   ggg||      }t        j                  | d   | d	   d
g| d   | d	   d
ggg||      }d}t        j                  d||d||      }t        j                  |||z   d
z
  |||      }	|d   j	                  |	       t        j                  |||z   d
z
  |||      j                  d      }
|d   j	                  |
       |d   j                  d       |j                  dd      j                  t        j                  d|z  d|z  g||            }d||z  df}|j                  |      j                  |      }|j                  |      j                  |j                  dd            }|j                  |      j                  d
      }|j                  d||d      S )Nr   r   rK   ru   rJ   r   r%  r?     r
  r	  )rG  r   r   rH  r6   rI  rJ  )r,   r   rK  rL  rM  rN  rO  rP  rQ  r  rR  rR   )r=  rD  rE  r   r   theta1theta2r  rS  rT  rU  rescaled_theta1rM   output_grid1output_grid2rW  s                   r'   _perspective_gridr    s    \\!9fQi
+fQiF1I-N	OPX]flF \\VAYq	37&)VAYPS9TUV^clrsFAAr2qfEI^^ArAv|2fERFfF#^^ArAv|2fER]]^`aFfF#fA&&q!,11%,,b#PR(?S[`io2pqOROE>>%(,,_=L>>%(,,V-=-=a-CDL##L166s;KAr2q))r)   c                     |*| |t        d      t        |      dk7  rt        d      |S | |t        | |      S t        d      )NzQThe startpoints/endpoints and the coefficients shouldn't be defined concurrently.r@  z0Argument coefficients should have 8 float valueszQEither the startpoints/endpoints or the coefficients must have non `None` values.)r%   r   r   )r  r  r  s      r'   _perspective_coefficientsr    sd    
 "y'<pqq!#OPP		 Y%:&{I>>lmmr)   c                 X   t        |||      }t        |      }t        | d |j                  |ddg|       | j                  dd  \  }}t        j                  |       r| j                  nt
        j                  }	t        ||||	| j                        }
t        | |
|j                  |      S )Nr)  rZ  )r  r   r   r<  r=  rm   )rD  rE  r   r   r\  )r  r(   rC  r   rM   r,   r^  r   r   r  r   r;  )r4   r  r  r   r   r  perspective_coeffsrE  rD  r   r#  s              r'   r  r    s     3;	<X(7M!#))'0*&=! [[FB 2259EKKu}}E/B2USXS_S_`D m.A.AMMr)   c                 r    t        |||      }t        |      }t        j                  | |t        |   |      S Nrd  )r  r(   r=   r  r   )r4   r  r  r   r   r  r  s          r'   _perspective_image_pilr    s;     3;	<X(7M??5"4DUVcDdkoppr)   c                    | j                         dk(  r| S t        |||      }| j                  }t        | |t        j
                  j                        j                  dd      } t        j                  |       r| j                  nt        j                  }| j                  }	|d   |d   z  |d   |d   z  z
  }
|
dk(  rt        d| d|
       |d   |d	   |d
   z  z
  |
z  |d    |d   |d
   z  z   |
z  |d   |d	   z  |d   |d   z  z
  |
z  |d    |d	   |d   z  z   |
z  |d   |d   |d   z  z
  |
z  |d    |d	   z  |d   |d   z  z   |
z  |d    |d   z  |d   |d
   z  z   |
z  |d    |d
   z  |d   |d   z  z   |
z  g}t        j                  |d   |d   |d   g|d   |d   |d	   gg||	      }t        j                  |d   |d
   dg|d   |d
   dgg||	      }| d d ddgddgddgddggf   j                  dd      }t        j                  |t        j                   |j                  d   d|j                        gd      }t        j"                  ||j$                        }t        j"                  ||j$                        }|j'                  |      }|j                  ddd      }t        j(                  |d      \  }}t+        t        j                  ||gd      j-                  | j                        t        j
                  j                  |      }t        |t        j
                  j                  |d      j                  |      S )Nr   rh  ri  r6   rJ   r   ru   zProvided perspective_coeffs zM can not be inverted to transform bounding boxes. Denominator is zero, denom=r   r  rK   r?  r%  r
  r   r  r\   Trg  )r   r  rM   r   r   rP   rQ   rO   r,   r^  r   r   r   RuntimeErrorr   r,  r+  r  r  rQ  r  r   r   )rF   rG   rH   r  r  r  r  ro  r   r   denom
inv_coeffsr  r  rs  numer_pointsdenom_pointsrt  ru  rv  rw  s                        r'   perspective_bounding_boxesr    s    "2;	<X#))N 	$NvR\RnRnRsRstgb!n  %*$;$;N$KN  QVQ^Q^E""F q!$6q$99<Nq<QTfghTi<iiEz*+=*> ?**/2
 	
 
A	!3A!69KA9N!N	NRWW
Q
	"4Q"7:LQ:O"O	OSXX	A	!3A!6	69KA9NQcdeQf9f	fjoo
Q
	"4Q"7:LQ:O"O	OSXX	A	!3A!69KA9N!N	NRWW
Q
	"4Q"7	7:LQ:ORdefRg:g	gkpp
Q
	"4Q"7	7:LQ:ORdefRg:g	gkpp
Q
	"4Q"7	7:LQ:ORdefRg:g	gkpp	J \\
Q-A
1	6A
STWabcWd8efF \\
Q-A	,z!}jmS.QRZ_hnF AAAAA??@HHQOFYY

6<<?Afmm TU[]^F
 <<1L<<1L%**<8 ,33B1=#(==1C#K M=%		=-0a8;;N<P<PQ++00J 'z;;@@V]agnr)   c                     t        | j                  t        j                        | j                  | j
                  |||      }t        j                  ||       S )N)rG   rH   r  r  r  r]   )r  r_   r,   r`   rG   rH   r   ra   )r*   r  r  r  r   rc   s         r'   $_perspective_bounding_boxes_dispatchr  [  sL     (&{{$$!F ??6--r)   c                     | j                   dk  r| j                  d      } d}nd}t        | ||t        j                  ||      }|r|j                  d      }|S )Nru   r   TFr   r   r  )r   r   r  r   r   r   )rA   r  r  r   r  r   rc   s          r'   perspective_maskr  n  s_     yy1}~~a k94E4M4MTXgsF "Mr)   c                     t        | j                  t        j                        ||||      }t	        j
                  ||       S )N)r  r  r   r  r]   )r  r_   r,   r`   r   ra   )r*   r  r  r   r  r   rc   s          r'   _perspective_mask_dispatchr    s?     &!F ??6--r)   c                 $    t        | |||||      S )Nr  )r  )re   r  r  r   r   r  s         r'   perspective_videor    s     {I]\h r)   displacementc                     t         j                  j                         rt        | |||      S t	        t
               t        t
        t        |             } || |||      S )zESee :class:`~torchvision.transforms.v2.ElasticTransform` for details.r  r   r   )r,   r-   r.   elastic_imager   elasticr   r1   )r*   r  r   r   r3   s        r'   r  r    sP     yyTM`dee $t*-F$\UYZZr)   c                    t        |t        j                        st        d      t	        |      }| j
                  dd  \  }}| j                  }t        j                  |       r| j                  nt        j                  }|j                  dk(  xr |t        j                  k(  }|r/| j                  t        j                        } t        j                  }d||df}	|	|j
                  k7  rt        d|	 d|j
                         t        ||f||      j                  |j                  ||	            }
t!        | |
|j"                  |
      }|r|j                  t        j                        }|S )N(Argument displacement should be a Tensorrm   r   r   rK   &Argument displacement shape should be , but given rk  r%  r\  )r#   r,   r`   r   r(   rM   r   r^  r   r   r1   float16r   r%   _create_identity_gridrU   r;  r   )r4   r  r   r   r   r   r   r   is_cpu_halfexpected_shaper#  rc   s               r'   r  r    s=    lELL1BCC(7MKK$MFE\\F 2259EKKu}}E ++&A5EMM+AK' *N+++A.AQQ]^j^p^p]qrss &%uMRReF3D #5$0C0C$OF5==)Mr)   c                 d    t        |       }t        ||||      }t        || j                        S )Nrd  r  )r   r  r   r   )r4   r  r   r   t_imgrc   s         r'   _elastic_image_pilr    s0     % E5,mRVWFUZZ00r)   c                 P   | \  }}t        j                  d||d||      }t        j                  | dz   |z  |dz
  |z  |||      }|d   j                  |       t        j                  | dz   |z  |dz
  |z  |||      j	                  d      }|d   j                  |       |S )Nr   rK   rk  rH  r6   rI  )r,   rK  rL  rM  rN  )r{   r   r   r   r   rS  rT  rU  s           r'   r  r    s    FBAr2quEI^^bS1WNR!VrM2fTYZFfF#^^bS1WNR!VrM2fTYZeefhiFfF#r)   c                    d|d   |d   df}t        |t        j                        st        d      |j                  |k7  rt        d| d|j                         | j                         dk(  r| S | j                  }t        j                  |       r| j                  nt        j                  }|j                  |k7  s|j                  |k7  r|j                  ||      }| j                  }t        | |t        j                  j                        j!                  d	d
      } t#        |||      }|j%                  |      }	| d d ddgddgddgddggf   j!                  d	d      }
|
j                         r|
j'                         }
|
j                  t        j(                        }|d d df   |d d df   }}t        j*                  |d d d	   |j                  |j                        }|	d||d d f   j-                  d      j/                  d|z        j%                  d      }|j!                  d	d
d      }t        j0                  |d      \  }}t3        t        j4                  ||gd      j                  | j                        t        j                  j                  |      }t        |t        j                  j                  |d      j!                  |      S )Nr   r   rK   r  r  r  r%  r  r6   rJ   rk  ru   r   r	  r  r\   Trg  )r#   r,   r`   r   rM   r%   r   r   r^  r   r   r   r   r   rP   rQ   rO   r  rR   r  longr   rU   r  r  r   r,  )rF   rG   rH   r  r  r   r   ro  id_gridinv_gridrs  index_xyindex_xindex_yt_sizert  ru  rv  rw  s                      r'   elastic_bounding_boxesr    s    QQ;NlELL1BCC			~	-A.AQQ]^j^p^p]qrss" ""F$)$;$;N$KN  QVQ^Q^EU"l&9&9V&C#U6B#))N 	$NvR\RnRnRsRstgb!n  $KeLG ||L)H AAAAA??@HHQOF!yyuzzy*H1~x1~WG \\+dd+L4G4G|OaOabF!!Wgq"89>>qAFFsV|TYYZ]^+33B1=#(==1C#K M=%		=-0a8;;N<P<PQ++00J 'z;;@@V]agnr)   c                     t        | j                  t        j                        | j                  | j
                  |      }t        j                  ||       S )N)rG   rH   r  r]   )r  r_   r,   r`   rG   rH   r   ra   )r*   r  r   rc   s       r'    _elastic_bounding_boxes_dispatchr  4  sD     $&t{{HXHXgsF ??6--r)   c                     | j                   dk  r| j                  d      } d}nd}t        | |t        j                  |      }|r|j                  d      }|S )Nru   r   TFr  )r   r   r  r   r   r   )rA   r  r   r   rc   s        r'   elastic_maskr  >  sU    
 yy1}~~a 4lJ[JcJcjnoF"Mr)   c                     t        | j                  t        j                        ||      }t	        j
                  ||       S )N)r  r   r]   )r  r_   r,   r`   r   ra   )r*   r  r   r   rc   s        r'   _elastic_mask_dispatchr  Q  s3     $**5<<8|Z^_F??6--r)   c                      t        | |||      S r  )r  )re   r  r   r   s       r'   elastic_videor  Y  s     MPTUUr)   output_sizec                     t         j                  j                         rt        | |      S t	        t
               t        t
        t        |             } || |      S )r  )r  )r,   r-   r.   center_crop_imager   center_cropr   r1   )r*   r  r3   s      r'   r  r  c  sD    yy ;??$d4j1F$K00r)   c                     t        | t        j                        rt        |       }||gS t        | t        t
        f      rt        |       dk(  r
| d   | d   gS t        |       S )Nr   r   )r#   r   r   r$   r   r   r   )r  r`  s     r'   _center_crop_parse_output_sizer  n  s[    +w~~.1v	K%	/C4D4IAA//K  r)   crop_height
crop_widthimage_heightimage_widthc                     ||kD  r||z
  dz  nd| |kD  r| |z
  dz  nd||kD  r||z
  dz   dz  nd| |kD  r| |z
  dz   dz  gS dgS )NrK   r   r    )r  r   r!  r"  s       r'   _center_crop_compute_paddingr%  x  s}    +5+Ck	!a'-8<-G|	#)Q/9K/Gk	!A	%!+Q1<|1K|	#a	'A-	  RS	 r)   c                 r    t        t        || z
  dz              }t        t        ||z
  dz              }||fS )Ng       @)r$   round)r  r   r!  r"  crop_top	crop_lefts         r'    _center_crop_compute_crop_anchorr*    sA     5,4;<=HE;3s:;<IYr)   c                 ~   t        |      \  }}| j                  }| j                         dk(  r| j                  |d d ||fz         S |dd  \  }}||kD  s||kD  rCt	        ||||      }t        | t        |      d      } | j                  dd  \  }}||k(  r||k(  r| S t        ||||      \  }}	| d|||z   |	|	|z   f   S )Nr   rm   r   )r   .)r  rM   r   rO   r%  r  r  r*  )
r4   r  r  r   rM   r!  r"  padding_ltrbr(  r)  s
             r'   r  r    s     =[IKKKE{{}}}U3BZ;
*CCDD %bc
L+\!Z+%=3K\[fg%!3L!AM$)KK$4!k$)DL:;
T`bmnHih(["899	T^H^;__``r)   c                     t        |      \  }}t        |       \  }}||kD  s||kD  r6t        ||||      }t        | |d      } t        |       \  }}||k(  r||k(  r| S t	        ||||      \  }}t        | ||||      S )Nr   r\  )r  r   r%  _pad_image_pilr*  _crop_image_pil)	r4   r  r  r   r!  r"  r,  r(  r)  s	            r'   _center_crop_image_pilr0    s    <[IK 3E :L+\!Z+%=3K\[fgul;$7$>!k$)DL:;
T`bmnHi5(I{JOOr)   c                 `    t        |      \  }}t        ||g| \  }}t        | |||||      S )Nr  )r  r*  r  )rF   rG   rH   r  r  r   r(  r)  s           r'   center_crop_bounding_boxesr2    sE     =[IK:;
aU`aHiH9[Xb r)   c                     t        | j                  t        j                        | j                  | j
                  |      \  }}t        j                  || |      S )N)rG   rH   r  r   )r2  r_   r,   r`   rG   rH   r   ra   )r*   r  rc   rH   s       r'   $_center_crop_bounding_boxes_dispatchr4    sK     5&t{{HXHXfqFK ??6+FFr)   c                     | j                   dk  r| j                  d      } d}nd}t        | |      }|r|j                  d      }|S )Nru   r   TF)r4   r  )r   r   r  r   )rA   r  r   rc   s       r'   center_crop_maskr6    sG    yy1}~~a T{CF"Mr)   c                     t        | |      S r<   )r  )re   r  s     r'   center_crop_videor8    s    UK00r)   c           
          t         j                  j                         rt        | |||||||      S t	        t
               t        t
        t        |             } || |||||||      S )zFSee :class:`~torchvision.transforms.v2.RandomResizedCrop` for details.)r  r  r   r   r{   r   r   )r,   r-   r.   resized_crop_imager   resized_cropr   r1   )	r*   r  r  r   r   r{   r   r   r3   s	            r'   r;  r;    sx     yy!'	
 		
 %tDz2F#	 	r)   c                 >    t        | ||||      } t        | |||      S )N)r   r   )r  r   r4   r  r  r   r   r{   r   r   s           r'   r:  r:    s'     uc47Et=IVVr)   c                 <    t        | ||||      } t        | ||      S )Nr&   )r/  r   )r4   r  r  r   r   r{   r   s          r'   _resized_crop_image_pilr?    s%     E3fe<EUDFFr)   c           	      X    |du rt        j                  d       t        | ||||||      S )NFr   )r  r  r   r   r{   r   )r   r   r?  r=  s           r'    _resized_crop_image_pil_dispatchrA    s;     Eop"# r)   c                 D    t        | |||||      \  } }t        | ||      S )N)rH   r{   )r  r   )rF   rG   r  r  r   r   r{   rH   s           r'   resized_crop_bounding_boxesrC  6  s/     #6nfcSWY_af"gNK [tTTr)   c           	          t        | j                  t        j                        | j                  |||||      \  }}t        j                  || |      S )N)rG   r  r  r   r   r{   r   )rC  r_   r,   r`   rG   r   ra   )	r*   r  r  r   r   r{   r   rc   rH   s	            r'   %_resized_crop_bounding_boxes_dispatchrE  C  sM     6&t{{$W]ejquFK ??6+FFr)   c                 8    t        | ||||      } t        | |      S r<   )r  r   )rA   r  r  r   r   r{   s         r'   resized_crop_maskrG  M  s#     T3fe4DtT""r)   c                     t        | j                  t        j                        |||||      }t	        j
                  ||       S )N)r  r  r   r   r{   r]   )rG  r_   r,   r`   r   ra   )r*   r  r  r   r   r{   r   rc   s           r'   _resized_crop_mask_dispatchrI  Y  s?     &Cd6QV]aF ??6--r)   c           
      (    t        | |||||||      S )N)r   r{   r   )r:  )re   r  r  r   r   r{   r   r   s           r'   resized_crop_videorK  c  s#     sD&%94Wd r)   c                     t         j                  j                         rt        | |      S t	        t
               t        t
        t        |             } || |      S )z=See :class:`~torchvision.transforms.v2.FiveCrop` for details.)r{   )r,   r-   r.   five_crop_imager   	five_cropr   r1   )r*   r{   r3   s      r'   rN  rN  s  sF     yyt$//	"DJ/F$T""r)   c                     t        | t        j                        rt        |       }||g} n-t        | t        t
        f      rt        |       dk(  r	| d   }||g} t        |       dk7  rt        d      | S )Nr   r   rK   z3Please provide only two dimensions (h, w) for size.)r#   r   r   r$   r   r   r   r%   )r{   r`  s     r'   _parse_five_crop_sizerP    sh    $'I1v	D5$-	(SY!^G1v
4yA~NOOKr)   c                 6   t        |      \  }}| j                  dd  \  }}||kD  s||kD  rt        d| d||f       t        | dd||      }t        | d||z
  ||      }t        | ||z
  d||      }t        | ||z
  ||z
  ||      }	t	        | ||g      }
||||	|
fS )Nrm   Requested crop size  is bigger than input size r   )rP  rM   r%   r  r  r4   r{   r  r   r!  r"  tlry  blbrr   s              r'   rM  rM    s    
 4D9K %BC 0L+K;#=/v5PR^`kQlPmnoo	E1aj	9B	E1kJ6Z	PB	E<+5q+z	RB	E<+5{Z7OQ\^h	iBu{J&?@Fr2r6!!r)   c                 .   t        |      \  }}t        |       \  }}||kD  s||kD  rt        d| d||f       t        | dd||      }t        | d||z
  ||      }t        | ||z
  d||      }t        | ||z
  ||z
  ||      }	t	        | ||g      }
||||	|
fS )NrR  rS  r   )rP  r   r%   r/  r0  rT  s              r'   _five_crop_image_pilrY    s     4D9K 3E :L+K;#=/v5PR^`kQlPmnoo	1k:	>B	;#;[*	UB	{ :A{J	WB	{ :K*<TVacm	nB#EK+DEFr2r6!!r)   c                     t        | |      S r<   )rM  )re   r{   s     r'   five_crop_videor[    s     5$''r)   rk   c                     t         j                  j                         rt        | ||      S t	        t
               t        t
        t        |             } || ||      S )z<See :class:`~torchvision.transforms.v2.TenCrop` for details.)r{   rk   )r,   r-   r.   ten_crop_imager   ten_cropr   r1   )r*   r{   rk   r3   s       r'   r^  r^    sJ     yyd]KK!4:.F$T??r)   c                 n    t        | |      }|rt        |       } nt        |       } t        | |      }||z   S r<   )rM  rj   r/   r4   r{   rk   non_flippedflippeds        r'   r]  r]    s>      "%.K#E*%e,eT*G  r)   c                 n    t        | |      }|rt        |       } nt        |       } t        | |      }||z   S r<   )rY  rp   r?   r`  s        r'   _ten_crop_image_pilrd    s>     'ud3K(/*51"5$/G  r)   c                     t        | ||      S )N)rk   )r]  )re   r{   rk   s      r'   ten_crop_videorf  	  s     %]CCr)   r<   )T)NF)NN)FN)FNN)Nr  r  )F)r   r   r   typingr   r   r   r   r   r   	PIL.ImagePILr,   torch.nn.functionalr	   r
   r   r  torchvisionr   torchvision.transformsr   r=   )torchvision.transforms._functional_tensorr   !torchvision.transforms.functionalr   r   r   r   r   r   r   r   torchvision.utilsr   _metar   r   r   _utilsr   r   r   r   r$   r(   r`   r0   Imager/   r?   MaskrE   rP   rW   BoundingBoxesrd   Videorh   rk   rj   rp   rs   rv   rx   rz   r>   ro   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r!  strr;  rC  rX  r   re  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  r  r  r  r  r  r  r/  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  elastic_transformr  r  r  r  r  r  r  r  r  r  r%  r*  r  r0  r2  r4  r6  r8  r;  r:  r?  rA  rC  rE  rG  rI  rK  rN  rP  rM  rY  r[  r^  r]  rd  rf  r$  r)   r'   <module>ry     sk.      > >   J J " 9 D   2 Y Y q q.?.D(E J[ %,, 5<<  ?ELL9?J,<,<= %,,  > : ?CIIOO<ciioo #))//  = ?JOO<'u|| ' ' =')LL)*4*F*F)UZ[^`c[cUd)
\\)" ?J,D,DX]^.:3K3K .PZPhPh . _. ?J,<,<=( (%,, ( >(   =%,,7=**:*:;u||   < 8 =#))//:CII #))  ; =*//:%U\\ %ell % ;%)LL)*4*F*F)UZ[^`c[cUd)
\\)" =**B*BV[\.1I1I .jNfNf . ]. =**:*:;&u|| & & <& 	 NR
TsCx
T(,S	
T=Ec]
T	#Y
T  4E3M3M" $h
,,h
s)h *C/0h sm	h
 ~h \\h*62C 6 6 65<<06:#3#34 4E3M3M" $EM<<EM
s)EM *C/0EM sm	EM
 ~EM \\EM 5 1EMV 4E3M3M"	\99??\
s"
#\ *C/0\ sm	\
 	YY__\* 6399??3 4E3M3M" $	_99??	_
s"
#	_ *C/0	_ sm		_
 ~	_ 	YY__	_ 4	_ell $s) x} X]XdXd  6:??eLFJ.
//.!%c.6>sm.VY.__. M. lpLL/4S#XFJ3i[cdg[h
5<<sCx()$ 6:#;#;uUOSG

"
"G*.s)G?G}G_bGG VG 6:#3#34 4E3M3M" $o<<o
s)o *C/0o sm	o
 ~o \\o 5o  4E3L3L$(#
,,#e# E{# 	#
 ;# *C/0# # T%[!# \\#V (9'@'@$(2+e2+E{2+ 2+ ;	2+
 %2+ T%[!2+ 5$u+tE{HT%[,AAB2+l sw:K: %:26u+:FK:TXY^T_:ko:	%[:z &U  &  &  &cSVh  &F-%u|| -%5<< -%s -%R^ -%chcoco -%l %)c<<cT%[!c c 	c
 $(9c T%[!c 
cB*<<*
* * 		*
 	* \\*6 65<<06:#3#34 4E3L3L$(N<<NeN E{N 	N
 ;N *C/0N N T%[!N \\N 5 1N@ 6399??3 4E3L3L$(`99??`e` E{` 	`
 ;` *C/0` ` T%[!` 	YY__` 4`@ %)V#LLV#((V# sCxV# e	V#
 E{V# V# ;V# T%[!V# V# 5<<sCx()V#B %)LL(( sCx e	
 E{  ; T%[! \\0 6:#;#;uU %).

"
".e. E{. 	.
 ;. T%[!. . V.8 $(
,,e E{ 	
 ;  T%[! \\@ 6:??eL $(.
//.e. E{. 	.
 ;. . T%[!. __. M., 6:#3#34 4E3L3L$(<<e E{ 	
 ; *C/0  T%[! \\ 52 4E3L3L$(k
,,kk *C/0k 	k
 T%[!k k \\k$ 65<<06:#3#34 4E3L3L$(N<<NN *C/0N 	N
 T%[!N N \\N 5 1N@ 6399??3 4E3L3L$(99?? *C/0 	
 T%[!  	YY__ 4( $(LL(( sCx 	
  T%[! 5<<sCx()* 6:#;#;uUhlG

"
"G+0G:>GPXY]^cYdPeGG VG" $(
,,  T%[!	
  \\8 6:??eL $(	.
//	.	. 	. T%[!		.
 	. __	. M	. 6:#3#34 4E3L3L$(l<<ll *C/0l 	l
 T%[!l l \\l 5l 6:"	O
,,O#YO 5eT%[01
2O 	O
 \\O 6c49n 5 6$s) 60 3-3
 0 01 6:"	a<<a#Ya 5eT%[01
2a 	a
 \\a 2 .a8*M<<*M9*M U

*M 	*M
 \\*M\<<9 u+ 	
 \\8 A*3		@I 3
0 6:"	
,,#Y 5eT%[01
2 	
 \\ 1> #eLLe((e sCxe #Y	e
 e 5<<sCx()e6 3
 8 8ERLV
G

"
"
G-1#Y
GFI
G
G S
G 3
 0 01 6:"	K<<K#YK 5eT%[01
2K 	K
 \\K 2KHu|| H# HS H# Hc Hell H 4.4!1!12.ell . .C . .S .UZUaUa . 3 /.$ (( 0 $		 0 AeLLe((e 
e 	e
 e e 5<<sCx()e* 4!9!9USG

"
"G),G47GADGMPGG TG 41ELL s # s 3 SXS_S_  2 4!1!127ell 7 7C 7 7S 7UZUaUa 7 37 4E3M3M*.
,,$tCy/* T#Y( *C/0	
  4;' \\@*d5k *s * *EKK *Y^YeYe *jojvjv *<n$tCy/*nT#Y(n 4;'n 
%[	n" ;5;
(8(89
 4E3M3M*.N<<N$tCy/*N T#Y(N *C/0	N
 N 4;'N \\N : 6N4 ;		8
 4E3M3M*.
q99??
q$tCy/*
q T#Y(
q *C/0	
q
 
q 4;'
q 	YY__
q 9
q& +/[LL[(([ sCx[ $tCy/*	[
 T#Y([ 4;'[ \\[| ;
(@(@TYZ
 +/	.

"
".$tCy/*. T#Y(. 4;'	. . [., *.
,,$tCy/* T#Y( 	
 4;' \\. ;
5Q
 *..
//.$tCy/*. T#Y(. 	.
 4;'. __. R.$ ;
(8(89
 4E3M3M*.
<<
$tCy/*
 T#Y(
 *C/0	

 
 4;'
 \\
 :
  4E3M3M	[
,,[,,[ *C/0[ 	[
 \\[    7ELL17J$4$45 4E3M3M	%<<%,,% *C/0% 	%
 \\% 6 2%P 7CIIOO4 4E3M3M	199??1,,1 *C/01 	1
 	YY__1 51	c3h 	 	ekk 	^c^j^j 	6LL6((6 sCx6 ,,	6
 \\6r 7J$<$<PUV.

"
".27,,.. W. 
,,,,  \\	& 7JOOuMLP.
//.)..=I.__. N. 7J$4$45 4E3M3M	V<<V,,V *C/0V 	V
 \\V 6V1ell 1c 1u|| 1!S	 !d3i !c s RU dg lpqtlu "%58GJ
38_ ;5;
(8(89aU\\ aS	 aell a : 6a& ;		8P#))// PS	 Pciioo P 9P 
LL
((
 sCx
 c	

 5<<sCx()
 ;
(@(@TYZG

"
"G15cGG [G ;
85<< d3i ELL  9 ;
(8(891U\\ 1S	 1ell 1 :1 4E3M3M $#
,,#	# # 	#
 # s)# *C/0# ~# \\#L <6<)9)9: 4E3M3M $W<<W	W W 	W
 W s)W *C/0W ~W \\W ; 7W* 4E3M3M
G99??
G	
G 
G 	
G
 
G s)
G *C/0
G 	YY__
G <9 4E3M3M $99??	  	
  s) *C/0 ~ 	YY__ :.
ULL
U((
U 

U 	
U
 
U 
U s)
U 5<<sCx()
U <)A)AUZ[G

"
"G),G47GADGMPGX\]`XaGG \G	#
,,	#		# 	# 		#
 	# s)	# \\	# <ER.
//. #.+..8;.DG.OSTWy.__. S. <)9)9: 4E3M3M $<<	  	
  s) *C/0 ~ \\ ;
#
,,
#"3i
#
5<<u||U\\5<<OP
#S	 d3i  )ELLA(J4D4DE"<<"#Cy"
5<<u||U\\5<<OP" F B"$ )CIIOOD"99??""&s)"
399??CIIOOSYY__ciioosyy^_" E"$ )J4D4DE(<<(#Cy(
5<<u||U\\5<<OP( F( @E@
,,@"3i@8<@
	LL	LL	LL	LL	LL	LL	LL	LL	LL	LL	@0 )5<<@(:3C3CD@E!<<!#Cy!9=!
	LL	LL	LL	LL	LL	LL	LL	LL	LL	LL	! E A!4 )399??CCH!99??!"&s)!<@!
IIOOIIOOIIOOIIOOIIOOIIOOIIOOIIOOIIOOIIOO	! D!4 ):3C3CD@ED<<D#CyD9=D
	LL	LL	LL	LL	LL	LL	LL	LL	LL	LL	D EDr)   