
    Ph~                        d dl Z d dlmZmZ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mZ d dlmZ d dlmZmZmZmZ d dlmZ d dl m!Z! d d	l"m#Z#m$Z$ d
dl%m&Z&m'Z'm(Z(m)Z) e	ejT                  ejV                  jV                  ejV                  ejX                  f   Z- G d de      Z. G d de.      Z/ G d de.      Z0 G d de.      Z1 G d de.      Z2y)    N)AnyCallableDictListOptionalTupleTypeUnion)tree_flattentree_unflattenTreeSpec)
transforms
tv_tensors)_functional_tensor)AutoAugmentPolicy
functionalInterpolationMode	Transform)_check_interpolation)get_size)	_FillType_FillTypeJIT   )	_get_fill_setup_fill_arg
check_typeis_pure_tensorc                       e Zd Zej                  dddeeef   deeeee	e
f   ef   f   ddf fdZdee
ef   f fdZdee
eeef   f   dee
eeef   f   fd	Zej&                  ej(                  ffd
edee	df   deeee   eef   ef   fdZdeee   eef   dedefdZdede
dedeeef   deee	e
f   ef   defdZ xZS )_AutoAugmentBaseNinterpolationfillr!   r"   returnc                p    t         |           t        |      | _        || _        t        |      | _        y N)super__init__r   r!   r"   r   _fill)selfr!   r"   	__class__s      rC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchvision/transforms/v2/_auto_augment.pyr'   z_AutoAugmentBase.__init__   s0     	1-@	$T*
    c                     t         |          }t        |d   t              r!t	        t        |       j                   d      |S )Nr"   z7() can not be scripted for when `fill` is a dictionary.)r&    _extract_params_for_v1_transform
isinstancedict
ValueErrortype__name__)r)   paramsr*   s     r+   r.   z1_AutoAugmentBase._extract_params_for_v1_transform!   sA    9;fVnd+T
 3 344klmmr,   dctc                     t        |j                               }|t        t        j                  t        |      d               }|||   fS )N )tuplekeysinttorchrandintlen)r)   r5   r9   keys       r+   _get_random_itemz!_AutoAugmentBase._get_random_item)   s>    SXXZ 3u}}SY345CH}r,   inputsunsupported_types.c           	      r   t        t        |      dkD  r|n|d         \  }}| j                  |      }g }t        t	        ||            D ]  \  }\  }}	|	r\t        |t        j                  t        j                  j                  t        t        j                  f      r|j                  ||f       gt        ||      stt        dt        |      j                   dt        |       j                   d       |st        d      t        |      dkD  rt        dt        |       d      |d   \  }}
|||f|
fS )	Nr   r   zInputs of type z are not supported by z()zFound no image in the sample.z^Auto augment transformations are only properly defined for a single image or video, but found .)r   r=   _needs_transform_list	enumeratezipr   r   ImagePILr   Videoappendr/   	TypeErrorr2   r3   )r)   r@   rA   flat_inputsspecneeds_transform_listimage_or_videosidxinptneeds_transformimage_or_videos              r+   #_flatten_and_extract_image_or_videoz4_AutoAugmentBase._flatten_and_extract_image_or_video.   sF   
 )3v;?q	RT#99+F,5c+G[6\,](C($:$$IIOO"$$	$  &&T{3D"34/$t*2E2E1FF\]abf]g]p]p\qqs tuu -^ ;<<!# 12!5 
 .a0^T3'77r,   flat_inputs_with_specrS   c                 0    |\  }}}|||<   t        ||      S r%   )r   )r)   rU   rS   rL   rM   rP   s         r+   $_unflatten_and_insert_image_or_videoz5_AutoAugmentBase._unflatten_and_insert_image_or_videoP   s'    
 "7T3)Ck400r,   imagetransform_id	magnitudec                    t        |t        |            }|dk(  r|S |dk(  rIt        j                  |dddgdt	        j
                  t	        j                  |            dg||ddg      S |dk(  rIt        j                  |dddgddt	        j
                  t	        j                  |            g||ddg      S |dk(  r)t        j                  |dt        |      dgd|ddg|	      S |d
k(  r)t        j                  |ddt        |      gd|ddg|	      S |dk(  rt        j                  ||||      S |dk(  rt        j                  |d|z         S |dk(  rt        j                  |d|z         S |dk(  rt        j                  |d|z         S |dk(  rt        j                  |d|z         S |dk(  r t        j                  |t        |            S |dk(  rUt        |t        j                         rt#        j$                  |j&                        nd}t        j(                  |||z        S |dk(  rt        j*                  |      S |dk(  rt        j,                  |      S |dk(  rt        j.                  |      S t1        d|       )NIdentityShearX        r         ?)angle	translatescaleshearr!   r"   centerShearY
TranslateX)r`   ra   rb   r!   rc   r"   
TranslateYRotate)r`   r!   r"   
Brightness)brightness_factorColor)saturation_factorContrast)contrast_factor	Sharpness)sharpness_factor	Posterize)bitsSolarizeg     o@)	thresholdAutoContrastEqualizeInvertzNo transform available for )r   r2   Faffinemathdegreesatanr:   rotateadjust_brightnessadjust_saturationadjust_contrastadjust_sharpness	posterizer/   r;   Tensor_FT
_max_valuedtypesolarizeautocontrastequalizeinvertr1   )r)   rX   rY   rZ   r!   r"   fill_bounds           r+   _apply_image_or_video_transformz0_AutoAugmentBase._apply_image_or_video_transformY   s    $U,:%LX% 88a&||DIIi$893?+1v	 	 X% 88a&DLL9)=>?+1v	 	 \)88y>1-+Cj  \)88c)n-+Cj  X%88E-V[\\\)&&uiPPW$&&uiPPZ'$$UC)OLL[(%%ecIoNN[(;;u3y>::Z'3=eU\\3RCNN5;;/X]E::euy/@AA^+>>%((Z'::e$$X%88E?":<.IJJr,   )r3   
__module____qualname__r   NEARESTr
   r:   r   r   r	   strr'   r   r.   r   r   boolr?   r   BoundingBoxesMaskr   r   ImageOrVideorT   rW   floatr   r   __classcell__r*   s   @r+   r   r      s    8I7P7PDH		+ .34	+ ItE$)$4i$?@@A		+
 
	+$sCx. DeHdN.C)C$D sTYZbdhZhTiOiIj  0:/G/G.Y 8 8 !s+ 8 
uT#Y#-.<	=	 8D1$T#Y#%=>1 %1 
	1TKTK TK 	TK
 .34TK 5s#\12TK 
TKr,   r   c                   n    e Zd ZdZej
                  Zd dfd dfd dfd dfd dfd dfd	 dfd
 dfd dfd dfd dfd dfd dfd dfdZej                  e
j                  dfdedee
ef   deeeeeef   ef   f   ddf fdZdedeeeeeee   f   eeeee   f   f      fdZdedefdZ xZS )AutoAugmenta  AutoAugment data augmentation method based on
    `"AutoAugment: Learning Augmentation Strategies from Data" <https://arxiv.org/pdf/1805.09501.pdf>`_.

    This transformation works on images and videos only.

    If the input is :class:`torch.Tensor`, it should be of type ``torch.uint8``, and it is expected
    to have [..., 1 or 3, H, W] shape, where ... means an arbitrary number of leading dimensions.
    If img is PIL Image, it is expected to be in mode "L" or "RGB".

    Args:
        policy (AutoAugmentPolicy, optional): Desired policy enum defined by
            :class:`torchvision.transforms.autoaugment.AutoAugmentPolicy`. Default is ``AutoAugmentPolicy.IMAGENET``.
        interpolation (InterpolationMode, optional): Desired interpolation enum defined by
            :class:`torchvision.transforms.InterpolationMode`. Default is ``InterpolationMode.NEAREST``.
            If input is Tensor, only ``InterpolationMode.NEAREST``, ``InterpolationMode.BILINEAR`` are supported.
        fill (sequence or number, optional): Pixel fill value for the area outside the transformed
            image. If given a number, the value is used for all bands respectively.
    c                 0    t        j                  dd|       S Nr^   333333?r;   linspacenum_binsheightwidths      r+   <lambda>zAutoAugment.<lambda>       5>>#sH3Ur,   Tc                 0    t        j                  dd|       S r   r   r   s      r+   r   zAutoAugment.<lambda>   r   r,   c                 6    t        j                  dd|z  |       S Nr^   gt ?r   r   s      r+   r   zAutoAugment.<lambda>       ENN3PU@UW_,`r,   c                 6    t        j                  dd|z  |       S r   r   r   s      r+   r   zAutoAugment.<lambda>       ENN3PV@VX`,ar,   c                 0    t        j                  dd|       S Nr^   g      >@r   r   s      r+   r   zAutoAugment.<lambda>       5>>#tX3Vr,   c                 0    t        j                  dd|       S Nr^   ?r   r   s      r+   r   zAutoAugment.<lambda>       u~~c3PX7Yr,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAutoAugment.<lambda>       %..c82Tr,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAutoAugment.<lambda>       U^^Ch5Wr,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAutoAugment.<lambda>       ennS#x6Xr,   c                 |    dt        j                  |       | dz
  dz  z  z
  j                         j                         S N   r      r;   arangeroundr:   r   s      r+   r   zAutoAugment.<lambda>   4    Q%,,x2HXXY\]^L^2_-`,g,g,i,m,m,or,   Fc                 0    t        j                  dd|       S Nr_   r^   r   r   s      r+   r   zAutoAugment.<lambda>   r   r,   c                      y r%   r7   r   s      r+   r   zAutoAugment.<lambda>       r,   c                      y r%   r7   r   s      r+   r   zAutoAugment.<lambda>       Tr,   c                      y r%   r7   r   s      r+   r   zAutoAugment.<lambda>   s    4r,   )r]   re   rf   rg   rh   ri   rk   rm   ro   rq   rs   ru   rv   rw   Npolicyr!   r"   r#   c                 b    t         |   ||       || _        | j                  |      | _        y Nr    )r&   r'   r   _get_policies	_policies)r)   r   r!   r"   r*   s       r+   r'   zAutoAugment.__init__   s0     	}4@++F3r,   c                     |t         j                  k(  rg dS |t         j                  k(  rg dS |t         j                  k(  rg dS t	        d| d      )N)))rq   皙?r   )rh   333333?	   )rs   r      ru   r   Nrv   皙?Nrv   r   N))rq   r      )rq   r      rv   r   N)rs   皙?r   )r   rh   r   r   ))rs   r      r   ))rq   r   r   rv   r_   N))rh   r   r   )rs   r   r   )r   )rq   r   r   )r   rk   r   r   ))rh   r   r   r   ))rv   r^   Nr   rw   r   Nr   )rk   r   r   )rm   r_   r   )r   )rk   r_      ))rk   r   r   )rs   r   r   ))ro   r   r   r   ))r]   r   r   r   )r   r   r   r   r   r   r   ))rw   皙?N)rm   r   r   ))rh   ffffff?r   )rf   r   r   ))ro   r   r   )ro   r   r   ))re         ?r   rg   r   r   ))ru   r   Nrv   r   N))re   r   r   )rq   r   r   ))rk   r   r   )ri   r   r   ))ro   r   r   )ri   r   r   )r   )rv   r   N))rm   r   r   )ro   r   r   ))rk   r   r   )rf   r   r   ))rv   r   N)ru   r   N))rg   r   r   )ro   r   r   ))ri   r   r   )rk   r   r   ))rs   r   r   )rw   r^   N)rv   r   Nr   )r   r   ))rk   r   r   r   )ru   r   N)rs   r   r   ))ri   r   r   )rk   r   r   ))rs   r   r   ru   r   N))rg   r   r   r   )r   )rs   r   r   )r   r   )r   r   ))r]   r   r   )rw   r   N)re   r   r   rw   r   N)r   )rs   r   r   rw   r   Nr   r   )rh   r   r   )r   r   )r   )rw   r   N))re   r   r   )rs   r   r   )r   r   r   )r   )rs   r   r   ))re   r   r   r   )r   )rg   r   r   r   ))rm   r   r   rh   r   r   )rw   r   N)rg   r^   r   ))re   r   r   )rs   r   r   )r   r   ))re   r   r   )rf   r   r   ))r]   r   r   r   ))rs   r   r   )rg   r   r   ))re   r   r   r   ))r]   r   r   )rg   r   r   ))re   r   r   )ru   r   N))r]   r   r   r   zThe provided policy z is not recognized.)r   IMAGENETCIFAR10SVHNr1   )r)   r   s     r+   r   zAutoAugment._get_policies   sk     &/// 6 (000 6 (--- 8 3F8;NOPPr,   r@   c                     | j                  |      \  }}t        |      \  }}| j                  t        t	        j
                  t        | j                        d               }|D ]  \  }}}	t	        j                  d      |k  s | j                  |   \  }
} |
d||      }|.t        ||	         }|r t	        j                  d      dk  r|dz  }nd}| j                  |||| j                  | j                        } | j                  ||      S )Nr7   
   r   r^   r    )rT   r   r   r:   r;   r<   r=   rand_AUGMENTATION_SPACEr   r   r!   r(   rW   )r)   r@   rU   rS   r   r   r   rY   probabilitymagnitude_idxmagnitudes_fnsigned
magnitudesrZ   s                 r+   forwardzAutoAugment.forwardC  s   040X0XY_0`-~ 0EMM#dnn2Er$J KL8>4L+}::b>[0$($<$<\$J!M6&r659J%!*]";<	ejjn3OI	!AAitGYGY`d`j`j B N 9?$ 889NP^__r,   )r3   r   r   __doc___transformsr   _v1_transform_clsr   r   r   r   r   r
   r:   r   r   r	   r   r'   r   r   r   r   r   r   r  r   r   s   @r+   r   r      sw   $ $// VW[\UW[\`

 b
 WX\]Y[_`TVZ[WY]^XZ^_o
 XY^_=uE95A7?/8 %6$>$>7H7P7PDH	4!4 .344 ItE$)$4i$?@@A	4
 
4XQ'XQ	eE#uhsm34eCQT<U6VVW	XXQt`s `s `r,   r   c                   "    e Zd ZdZej
                  Zd dfd dfd dfd dfd dfd	 dfd
 dfd dfd dfd dfd dfd dfd dfd dfdZdddej                  dfde
de
de
deee
f   deeeeeef   ef   f   ddf fdZdedefdZ xZS ) RandAugmenta  RandAugment data augmentation method based on
    `"RandAugment: Practical automated data augmentation with a reduced search space"
    <https://arxiv.org/abs/1909.13719>`_.

    This transformation works on images and videos only.

    If the input is :class:`torch.Tensor`, it should be of type ``torch.uint8``, and it is expected
    to have [..., 1 or 3, H, W] shape, where ... means an arbitrary number of leading dimensions.
    If img is PIL Image, it is expected to be in mode "L" or "RGB".

    Args:
        num_ops (int, optional): Number of augmentation transformations to apply sequentially.
        magnitude (int, optional): Magnitude for all the transformations.
        num_magnitude_bins (int, optional): The number of different magnitude values.
        interpolation (InterpolationMode, optional): Desired interpolation enum defined by
            :class:`torchvision.transforms.InterpolationMode`. Default is ``InterpolationMode.NEAREST``.
            If input is Tensor, only ``InterpolationMode.NEAREST``, ``InterpolationMode.BILINEAR`` are supported.
        fill (sequence or number, optional): Pixel fill value for the area outside the transformed
            image. If given a number, the value is used for all bands respectively.
    c                      y r%   r7   r   s      r+   r   zRandAugment.<lambda>v  r   r,   Fc                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>w  r   r,   Tc                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>x  r   r,   c                 6    t        j                  dd|z  |       S r   r   r   s      r+   r   zRandAugment.<lambda>z  r   r,   c                 6    t        j                  dd|z  |       S r   r   r   s      r+   r   zRandAugment.<lambda>~  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 |    dt        j                  |       | dz
  dz  z  z
  j                         j                         S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zRandAugment.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zRandAugment.<lambda>  r   r,   r\   r]   re   rf   rg   rh   ri   rk   rm   ro   rq   rs   ru   rv   r   r      Nnum_opsrZ   num_magnitude_binsr!   r"   r#   c                 R    t         |   ||       || _        || _        || _        y r   )r&   r'   r  rZ   r  )r)   r  rZ   r  r!   r"   r*   s         r+   r'   zRandAugment.__init__  s-     	}4@""4r,   r@   c                    | j                  |      \  }}t        |      \  }}t        | j                        D ]  }| j	                  | j
                        \  }\  }}	 || j                  ||      }
|
8t        |
| j                           }|	r t        j                  d      dk  r|dz  }nd}| j                  |||| j                  | j                        } | j                  ||      S Nr7   r   r   r^   r    )rT   r   ranger  r?   r   r  r   rZ   r;   r   r   r!   r(   rW   )r)   r@   rU   rS   r   r   _rY   r   r  r  rZ   s               r+   r  zRandAugment.forward  s    040X0XY_0`-~ 0t||$A484I4I$JbJb4c1L1=&&t'>'>NJ%!*T^^"<=	ejjn3OI	!AAitGYGY`d`j`j B N % 889NP^__r,   )r3   r   r   r  r  r  r  r   r   r   r:   r
   r   r   r	   r   r'   r   r  r   r   s   @r+   r  r  ^  s<   * $//95AUW[\UW[\`

 b
 WX\]Y[_`TVZ[WY]^XZ^_o
 XY^_=uE95A/8 "$7H7P7PDH55 5  	5
 .345 ItE$)$4i$?@@A5 
5`s `s `r,   r  c                       e Zd ZdZej
                  Zd dfd dfd dfd dfd dfd	 dfd
 dfd dfd dfd dfd dfd dfd dfd dfdZdej                  dfde
deee
f   deeeeeef   ef   f   f fdZdedefdZ xZS )TrivialAugmentWideaW  Dataset-independent data-augmentation with TrivialAugment Wide, as described in
    `"TrivialAugment: Tuning-free Yet State-of-the-Art Data Augmentation" <https://arxiv.org/abs/2103.10158>`_.

    This transformation works on images and videos only.

    If the input is :class:`torch.Tensor`, it should be of type ``torch.uint8``, and it is expected
    to have [..., 1 or 3, H, W] shape, where ... means an arbitrary number of leading dimensions.
    If img is PIL Image, it is expected to be in mode "L" or "RGB".

    Args:
        num_magnitude_bins (int, optional): The number of different magnitude values.
        interpolation (InterpolationMode, optional): Desired interpolation enum defined by
            :class:`torchvision.transforms.InterpolationMode`. Default is ``InterpolationMode.NEAREST``.
            If input is Tensor, only ``InterpolationMode.NEAREST``, ``InterpolationMode.BILINEAR`` are supported.
        fill (sequence or number, optional): Pixel fill value for the area outside the transformed
            image. If given a number, the value is used for all bands respectively.
    c                      y r%   r7   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   Fc                 0    t        j                  dd|       S Nr^   gGz?r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   Tc                 0    t        j                  dd|       S r$  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   c                 0    t        j                  dd|       S Nr^   g      @@r   r   s      r+   r   zTrivialAugmentWide.<lambda>      u~~c4QY7Zr,   c                 0    t        j                  dd|       S r'  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r(  r,   c                 0    t        j                  dd|       S )Nr^   g     `@r   r   s      r+   r   zTrivialAugmentWide.<lambda>  s    5>>#uh3Wr,   c                 0    t        j                  dd|       S r$  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r(  r,   c                 0    t        j                  dd|       S r$  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  s    %..dH2Ur,   c                 0    t        j                  dd|       S r$  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  s    U^^Cx5Xr,   c                 0    t        j                  dd|       S r$  r   r   s      r+   r   zTrivialAugmentWide.<lambda>  s    ennS$PX6Yr,   c                 |    dt        j                  |       | dz
  dz  z  z
  j                         j                         S )Nr   r   r   r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zTrivialAugmentWide.<lambda>  r   r,   r  r  Nr  r!   r"   c                 6    t         |   ||       || _        y r   )r&   r'   r  )r)   r  r!   r"   r*   s       r+   r'   zTrivialAugmentWide.__init__  s     	}4@"4r,   r@   r#   c           	         | j                  |      \  }}t        |      \  }}| j                  | j                        \  }\  }} || j                  ||      }	|	Ut        |	t        t        j                  | j                  d                     }
|r t        j                  d      dk  r|
dz  }
nd}
| j                  |||
| j                  | j                        }| j                  ||      S r  )rT   r   r?   r   r  r   r:   r;   r<   r   r   r!   r(   rW   )r)   r@   rU   rS   r   r   rY   r   r  r  rZ   s              r+   r  zTrivialAugmentWide.forward  s    040X0XY_0`-~ 0040E0EdF^F^0_--}f"4#:#:FEJ
!jU]]4;R;RTV-W)XYZI%**R.C/R	I==L)4CUCU\`\f\f > 
 889NP^__r,   )r3   r   r   r  r  r!  r  r   r   r   r:   r
   r   r   r	   r   r'   r   r  r   r   s   @r+   r!  r!    s   $ $6695AVX\]VX\]Z\`aZ\`aWY]^Z\`aUW[\XZ^_Y[_`o
 XY^_=uE95A#, #%7H7P7PDH	55 .345 ItE$)$4i$?@@A	5`s `s `r,   r!  c                       e Zd ZU dZej
                  Zd dfd dfd dfd dfd dfd d	fd
 d	fd d	fd d	fd	Zi ed dfd dfd dfd dfdZe	e
eeeeegeej                      f   ef   f   ed<   dddddej(                  dfdedededededeeef   deee	eee
f   ef   f   ddf fd Zd!ej                   dej                   fd"Zd#edefd$Z xZS )%AugMixa@  AugMix data augmentation method based on
    `"AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty" <https://arxiv.org/abs/1912.02781>`_.

    This transformation works on images and videos only.

    If the input is :class:`torch.Tensor`, it should be of type ``torch.uint8``, and it is expected
    to have [..., 1 or 3, H, W] shape, where ... means an arbitrary number of leading dimensions.
    If img is PIL Image, it is expected to be in mode "L" or "RGB".

    Args:
        severity (int, optional): The severity of base augmentation operators. Default is ``3``.
        mixture_width (int, optional): The number of augmentation chains. Default is ``3``.
        chain_depth (int, optional): The depth of augmentation chains. A negative value denotes stochastic depth sampled from the interval [1, 3].
            Default is ``-1``.
        alpha (float, optional): The hyperparameter for the probability distributions. Default is ``1.0``.
        all_ops (bool, optional): Use all operations (including brightness, contrast, color and sharpness). Default is ``True``.
        interpolation (InterpolationMode, optional): Desired interpolation enum defined by
            :class:`torchvision.transforms.InterpolationMode`. Default is ``InterpolationMode.NEAREST``.
            If input is Tensor, only ``InterpolationMode.NEAREST``, ``InterpolationMode.BILINEAR`` are supported.
        fill (sequence or number, optional): Pixel fill value for the area outside the transformed
            image. If given a number, the value is used for all bands respectively.
    c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   Tc                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   c                 6    t        j                  d|dz  |       S Nr^   g      @r   r   s      r+   r   zAugMix.<lambda>  s    u~~c5SV;X`7ar,   c                 6    t        j                  d|dz  |       S r:  r   r   s      r+   r   zAugMix.<lambda>  s    u~~c6TW<Ya7br,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   c                 |    dt        j                  |       | dz
  dz  z  z
  j                         j                         S )Nr   r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   Fc                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zAugMix.<lambda>  r   r,   c                      y r%   r7   r   s      r+   r   zAugMix.<lambda>  r   r,   )	r]   re   rf   rg   rh   rq   rs   ru   rv   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>   r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>!  r   r,   c                 0    t        j                  dd|       S r   r   r   s      r+   r   zAugMix.<lambda>"  r   r,   )ri   rk   rm   ro   r   r   r   r_   Nseveritymixture_widthchain_depthalphaall_opsr!   r"   r#   c                     t         |   ||       d| _        d|cxk  r| j                  k  sn t        d| j                   d| d      || _        || _        || _        || _        || _        y )Nr    r   r   z!The severity must be between [1, z]. Got z	 instead.)	r&   r'   _PARAMETER_MAXr1   rE  rF  rG  rH  rI  )	r)   rE  rF  rG  rH  rI  r!   r"   r*   s	           r+   r'   zAugMix.__init__%  s}     	}4@ X4!4!44@ATAT@UU\]e\ffopqq *&
r,   r4   c                 ,    t        j                  |      S r%   )r;   _sample_dirichlet)r)   r4   s     r+   rM  zAugMix._sample_dirichlet9  s    &&v..r,   r@   c                    | j                  |      \  }}t        |      \  }}t        |t        j                        r|}nt        j                  |      }| j                  r| j                  n| j                  }t        |j                        }t        |t        j                        rdnd}	|j                  dgt        |	|j                   z
  d      z  |z         }
|
j#                  d      gdg|
j                   dz
  z  z   }| j%                  t        j&                  | j(                  | j(                  g|
j*                        j-                  |d   d            }| j%                  t        j&                  | j(                  g| j.                  z  |
j*                        j-                  |d   d            |d d df   j                  |d   dg      z  }|d d df   j                  |      |
z  }t1        | j.                        D ]7  }|
}| j2                  dkD  r| j2                  n.t5        t        j6                  ddd      j9                               }t1        |      D ]  }| j;                  |      \  }\  }} || j<                  ||      }|Ut?        |t5        t        j6                  | j@                  d	                     }|r t        jB                  d	      d
k  r|dz  }nd}| jE                  |||| jF                  | jH                        } |jK                  |d d |f   j                  |      |z         : |j                  |      jM                  |jN                        }t        |t        jP                  t        j                  f      rt        jR                  ||      }n9t        |tT        jP                  jP                        rt        jV                  |      }| jY                  ||      S )Nr   r   r   r   )devicer   )r   )lowhighsizer7   r   r^   r    )r   )like)-rT   r   r/   r;   r   rx   pil_to_tensorrI  r   _PARTIAL_AUGMENTATION_SPACElistshaper   rI   reshapemaxndimrR  rM  tensorrH  rO  expandrF  r  rG  r:   r<   itemr?   rK  r   rE  r   r   r!   r(   add_tor   rG   wraprH   to_pil_imagerW   )r)   r@   rU   orig_image_or_videor   r   rS   augmentation_space	orig_dimsexpected_ndimbatch
batch_dimsmcombined_weightsmixiaugdepthr  rY   r   r  r  rZ   s                           r+   r  zAugMix.forward=  sd   595]5]^d5e22 !45)5<<80N__-@AN9=T554KkKk--.	'(;Z=M=MNTU&&sSATAT1TVW-X'X[d'dejjm_sejj1n'==

 ""LL$**djj1%,,GNNzZ[}^`a

  11LL$**(:(::5<<PWWXbcdXegij
adGOOZ]B/01 1gooj)E1t))*AC(,(8(81(<D$$#emmXY`ahlFmFrFrFtBuE5\8<8M8MN`8a55}f*4+>+>N
) %jU]]4==RT5U1V&W XI%**R.C"7!R	 #I::y@R@RY]YcYc ;  " HH%ad+33J?#EF# +$ kk)$''n.B.B'C)J,<,<j>N>N+OP//#,?@C+SYY__=..%C889NPSTTr,   )r3   r   r   r  r  r6  r  rU  r   r   r   r   r   r:   r   r;   r   r   __annotations__r   BILINEARr   r
   r   r	   r'   rM  r   r  r   r   s   @r+   r6  r6    s   . $** VW[\UW[\acghbdhiVX\]o
 XY^_=uE95A#f
%fY[_`TVZ[WY]^XZ^_fc53S/8ELLCY2Y)Z\`)`#aab  7H7Q7QDH  	
   .34 ItE$)$4i$?@@A 
(/ / /6Us 6Us 6Ur,   r6  )3rz   typingr   r   r   r   r   r   r	   r
   	PIL.ImagerH   r;   torch.utils._pytreer   r   r   torchvisionr   r  r   torchvision.transformsr   r   torchvision.transforms.v2r   r   rx   r   r   .torchvision.transforms.v2.functional._geometryr   *torchvision.transforms.v2.functional._metar   +torchvision.transforms.v2.functional._utilsr   r   _utilsr   r   r   r   r   rG   rI   r   r   r   r  r!  r6  r7   r,   r+   <module>rz     s     J J J   F F = < f f O ? O J J U\\399??J4D4DjFVFVVWXKy XKvk`" k`\O`" O`dB`) B`J~U ~Ur,   