Ë
    þÍ:j@n  ã                   ó†  — d dl Z d dlmZ d dlmZ d dlZd dlmZ ddlmZ	m
Z
 g d¢Zded	ed
ede
deee      f
d„Z G d„ de«      Z G d„ dej"                  j$                  «      Z G d„ dej"                  j$                  «      Z G d„ dej"                  j$                  «      Z G d„ dej"                  j$                  «      Zy)é    N)ÚEnum)ÚOptional)ÚTensoré   )Ú
functionalÚInterpolationMode)ÚAutoAugmentPolicyÚAutoAugmentÚRandAugmentÚTrivialAugmentWideÚAugMixÚimgÚop_nameÚ	magnitudeÚinterpolationÚfillc                 óž  — |dk(  rKt        j                  | dddgdt        j                  t        j                  |«      «      dg||ddg¬«      } | S |dk(  rKt        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(  rt        j                  | |«      } | S |dk(  rt        j                  | «      } | S |dk(  rt        j                  | «      } | S |dk(  rt        j                  | «      } | S |dk(  r	 | S t!        d|› d�«      ‚)NÚShearXç        r   ç      ð?)ÚangleÚ	translateÚscaleÚshearr   r   ÚcenterÚShearYÚ
TranslateX)r   r   r   r   r   r   Ú
TranslateYÚRotate©r   r   Ú
BrightnessÚColorÚContrastÚ	SharpnessÚ	PosterizeÚSolarizeÚAutoContrastÚEqualizeÚInvertÚIdentityzThe provided operator ú is not recognized.)ÚFÚaffineÚmathÚdegreesÚatanÚintÚrotateÚadjust_brightnessÚadjust_saturationÚadjust_contrastÚadjust_sharpnessÚ	posterizeÚsolarizeÚautocontrastÚequalizeÚinvertÚ
ValueError)r   r   r   r   r   s        úw/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/transforms/autoaugment.pyÚ	_apply_opr>      sÉ  € ð �(Òô �h‰hØØØ˜!�fØÜ—<‘<¤§	¡	¨)Ó 4Ó5°sÐ;Ø'ØØ�q�6ô	
ˆðF €Jðs 
�HÒ	ô �h‰hØØØ˜!�fØØœŸ™¤T§Y¡Y¨yÓ%9Ó:Ð;Ø'ØØ�q�6ô	
ˆðl €JðY 
�LÒ	 Ü�h‰hØØÜ˜9“~ qÐ)ØØ'Ø˜�*Øô
ˆðV €JðE 
�LÒ	 Ü�h‰hØØØœ#˜i›.Ð)ØØ'Ø˜�*Øô
ˆðB €Jð1 
�HÒ	Ü�h‰h�s˜I°]ÈÔNˆð. €Jð- 
�LÒ	 Ü×!Ñ! # s¨Y¡Ó7ˆð* €Jð) 
�GÒ	Ü×!Ñ! # s¨Y¡Ó7ˆð& €Jð% 
�JÒ	Ü×Ñ  S¨9¡_Ó5ˆð" €Jð! 
�KÒ	Ü× Ñ   c¨I¡oÓ6ˆð €Jð 
�KÒ	Ü�k‰k˜#œs 9›~Ó.ˆð €Jð 
�JÒ	Ü�j‰j˜˜iÓ(ˆð €Jð 
�NÒ	"Ü�n‰n˜SÓ!ˆð €Jð 
�JÒ	Ü�j‰j˜‹oˆð €Jð 
�HÒ	Ü�h‰h�s‹mˆð
 €Jð	 
�JÒ	Øð €Jô Ð1°'°Ð:MÐNÓOÐOó    c                   ó   — e Zd ZdZdZdZdZy)r	   zoAutoAugment policies learned on different datasets.
    Available policies are IMAGENET, CIFAR10 and SVHN.
    ÚimagenetÚcifar10ÚsvhnN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚIMAGENETÚCIFAR10ÚSVHN© r?   r=   r	   r	   ]   s   „ ñð €HØ€GØ�Dr?   r	   c                   ó(  ‡ — e Zd ZdZej
                  ej                  dfdededee	e
      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eef   deeeeef   f   fd„Zededeeeef   fd„«       Zdedefd„Zdefd„Zˆ xZS )r
   a?  AutoAugment data augmentation method based on
    `"AutoAugment: Learning Augmentation Strategies from Data" <https://arxiv.org/pdf/1805.09501.pdf>`_.
    If the image is 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): Desired policy enum defined by
            :class:`torchvision.transforms.autoaugment.AutoAugmentPolicy`. Default is ``AutoAugmentPolicy.IMAGENET``.
        interpolation (InterpolationMode): 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.
    NÚpolicyr   r   Úreturnc                 óx   •— t         ‰| �  «        || _        || _        || _        | j                  |«      | _        y ©N)ÚsuperÚ__init__rM   r   r   Ú_get_policiesÚpolicies)ÚselfrM   r   r   Ú	__class__s       €r=   rR   zAutoAugment.__init__y   s8   ø€ ô 	‰ÑÔØˆŒØ*ˆÔØˆŒ	Ø×*Ñ*¨6Ó2ˆ�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)))r%   çš™™™™™Ù?é   )r   ç333333ã?é	   ©)r&   rZ   é   ©r'   rZ   N©©r(   çš™™™™™é?N©r(   rZ   N))r%   rZ   é   )r%   rZ   é   ©©r(   rX   N)r&   çš™™™™™É?é   )rf   ©r   ra   rY   ))r&   rZ   é   rb   ))r%   ra   r]   ©r(   r   N))r   rg   rj   )r&   rZ   rY   )rb   )r%   rX   rd   )ri   ©r"   rX   r   ))r   rX   r[   rb   ))r(   r   Nr`   ©©r)   rZ   Nrk   ©)r"   rZ   rh   )r#   r   rY   )ri   )r"   r   é   ))r"   ra   rY   )r&   ra   rc   ))r$   rX   rc   rn   ))r   rZ   r]   rk   )rl   rb   re   r\   rm   ro   r_   ))©r)   çš™™™™™¹?N)r#   rg   rd   ))r   çffffffæ?rp   )r   ç333333Ó?r[   ))r$   ra   r   )r$   çÍÌÌÌÌÌì?rj   ))r   ç      à?rY   ©r   rs   r[   ))r'   rv   N©r(   ru   N))r   rg   rc   )r%   rt   rc   ))r"   rX   rj   )r!   rZ   rc   ))r$   rt   r[   )r!   rs   r[   )rb   )r(   rv   N))r#   rZ   rc   )r$   rZ   r]   ))r"   rs   rc   )r   rv   rY   ))r(   rt   N)r'   rX   N))r   rX   rj   )r$   rg   rd   ))r!   ru   rd   )r"   rg   rY   ))r&   rv   rp   )r)   r   N)©r(   rg   Nr^   )ry   rb   ))r"   ru   r[   rb   )©r'   ra   N)r&   rg   rY   ))r!   rr   rj   )r"   rs   r   ))r&   rX   r]   ©r'   ru   N))r   ru   r[   rw   )r{   )r&   ra   rj   )r`   rq   )rw   r{   ))©r   ru   rh   )r)   rg   N)©r   ru   rY   ©r)   rs   N)rb   )r&   rZ   rd   ©©r)   ru   Nrb   ©rb   )r   ru   rj   )r|   rz   )r}   )r)   rX   N))r   ru   r]   )r&   rg   rd   )r€   rz   r�   )r|   )r&   rt   rj   ))r   ra   rY   r~   )rx   )r   rZ   rd   r   ))r#   rt   rj   ©r   ra   rh   )©r)   ra   N)r   r   rp   ))r   rs   rd   )r&   rX   rY   )rn   r‚   ))r   rt   rc   )r   ru   rj   ))r   rr   rd   rn   ))r&   rs   rp   )r   rZ   rc   ))r   ra   rh   rƒ   ))r   rs   r[   )r   ra   rj   ))r   ra   r]   )r'   rs   N))r   rs   rp   rq   zThe provided policy r+   )r	   rH   rI   rJ   r<   )rU   rM   s     r=   rS   zAutoAugment._get_policies…   sk   € ð Ô&×/Ñ/Ò/òð ð6 Ô(×0Ñ0Ò0òð ð6 Ô(×-Ñ-Ò-òð ô8 Ð3°F°8Ð;NÐOÓPÐPr?   Únum_binsÚ
image_sizec                 ó   — t        j                  dd|«      dft        j                  dd|«      dft        j                  dd|d   z  |«      dft        j                  dd|d   z  |«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dfd	t        j                  |«      |dz
  d
z  z  j                  «       j	                  «       z
  dft        j                  dd|«      dft        j
                  d«      dft        j
                  d«      dft        j
                  d«      dfdœS )Nr   rt   TçtþÅ Ý?r   r   ç      >@ru   rY   rh   Fç     ào@)r   r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   )ÚtorchÚlinspaceÚarangeÚroundr1   Útensor©rU   r„   r…   s      r=   Ú_augmentation_spacezAutoAugment._augmentation_spaceß   s^  € ô —~‘~ c¨3°Ó9¸4Ð@Ü—~‘~ c¨3°Ó9¸4Ð@Ü Ÿ>™>¨#¨}¸zÈ!¹}Ñ/LÈhÓWÐY]Ð^Ü Ÿ>™>¨#¨}¸zÈ!¹}Ñ/LÈhÓWÐY]Ð^Ü—~‘~ c¨4°Ó:¸DÐAÜ Ÿ>™>¨#¨s°HÓ=¸tÐDÜ—n‘n S¨#¨xÓ8¸$Ð?ÜŸ™¨¨S°(Ó;¸TÐBÜŸ.™.¨¨c°8Ó<¸dÐCØœuŸ|™|¨HÓ5¸(ÀQ¹,È!Ñ9KÑL×SÑSÓU×YÑYÓ[Ñ[Ð]bÐcÜŸ™¨¨s°HÓ=¸uÐEÜ"Ÿ\™\¨#Ó.°Ð6ÜŸ™ cÓ*¨EÐ2Ü—|‘| CÓ(¨%Ð0ñ
ð 	
r?   Útransform_numc                 ó¼   — t        t        j                  | d«      j                  «       «      }t        j                  d«      }t        j                  dd«      }|||fS )z†Get parameters for autoaugment transformation

        Returns:
            params required by the autoaugment transformation
        ©r   )rp   rp   )r1   rŠ   ÚrandintÚitemÚrand)r‘   Ú	policy_idÚprobsÚsignss       r=   Ú
get_paramszAutoAugment.get_paramsò   sM   € ô œŸ™ m°TÓ:×?Ñ?ÓAÓBˆ	Ü—
‘
˜4Ó ˆÜ—‘˜a Ó&ˆà˜% Ð&Ð&r?   r   c                 ón  — | j                   }t        j                  |«      \  }}}t        |t        «      r@t        |t
        t        f«      rt        |«      g|z  }n|�|D �cg c]  }t        |«      ‘Œ }}| j                  t        | j                  «      «      \  }}}	| j                  d||f«      }
t        | j                  |   «      D ]c  \  }\  }}}||   |k  sŒ|
|   \  }}|�t        ||   j                  «       «      nd}|r|	|   dk(  r|dz  }t        |||| j                  |¬«      }Œe |S c c}w )z‘
            img (PIL Image or Tensor): Image to be transformed.

        Returns:
            PIL Image or Tensor: AutoAugmented image.
        é
   r   r   ç      ð¿r    )r   r,   Úget_dimensionsÚ
isinstancer   r1   Úfloatrš   ÚlenrT   r�   Ú	enumerater•   r>   r   )rU   r   r   ÚchannelsÚheightÚwidthÚfÚtransform_idr˜   r™   Úop_metaÚir   ÚpÚmagnitude_idÚ
magnitudesÚsignedr   s                     r=   ÚforwardzAutoAugment.forwardÿ   s>  € ð �y‰yˆÜ"#×"2Ñ"2°3Ó"7Ñˆ�&˜%Ü�cœ6Ô"Ü˜$¤¤e Ô-Ü˜d›�} xÑ/‘ØÐ!Ø*.Ö/ Qœ˜a�Ð/�Ð/à%)§_¡_´S¸¿¹Ó5GÓ%HÑ"ˆ�e˜Uà×*Ñ*¨2°¸¨Ó?ˆÜ-6°t·}±}À\Ñ7RÓ-Sò 	fÑ)ˆAÑ)�˜˜LØ�Q‰x˜1‹}Ø%,¨WÑ%5Ñ"�
˜FØFRÐF^œE *¨\Ñ":×"?Ñ"?Ó"AÔBÐdg�	Ù˜e A™h¨!šmØ Ñ%�IÜ  W¨iÀt×GYÑGYÐ`dÔe‘ð	fð ˆ
ùò 0s   Á"D2c                 óh   — | j                   j                  › d| j                  › d| j                  › d�S )Nz(policy=ú, fill=ú))rV   rD   rM   r   )rU   s    r=   Ú__repr__zAutoAugment.__repr__  s/   € Ø—.‘.×)Ñ)Ð*¨(°4·;±;°-¸wÀtÇyÁyÀkÐQRÐSÐSr?   )rD   rE   rF   rG   r	   rH   r   ÚNEARESTr   Úlistr    rR   ÚtupleÚstrr1   rS   Údictr   Úboolr�   Ústaticmethodrš   r®   r²   Ú__classcell__©rV   s   @r=   r
   r
   h   s)  ø„ ñð$ %6×$>Ñ$>Ø+<×+DÑ+DØ&*ñ	
3à!ð
3ð )ð
3ð �t˜E‘{Ñ#ð	
3ð
 
õ
3ðXQØ'ðXQà	ˆe�E˜#˜u h¨s¡mÐ3Ñ4°e¸CÀÈÐQTÉÐ<UÑ6VÐVÑWÑ	XóXQðt
¨Cð 
¸UÀ3ÈÀ8¹_ð 
ÐQUÐVYÐ[`ÐagÐimÐamÑ[nÐVnÑQoó 
ð& ð
' #ð 
'¨%°°V¸VÐ0CÑ*Dò 
'ó ð
'ð˜6ð  fó ð8T˜#÷ Tr?   r
   c                   ó¶   ‡ — e Zd ZdZdddej
                  dfdededed	ed
eee	      ddfˆ fd„Z
dedeeef   deeeeef   f   fd„Zdedefd„Zdefd„Zˆ xZS )r   a~  RandAugment data augmentation method based on
    `"RandAugment: Practical automated data augmentation with a reduced search space"
    <https://arxiv.org/abs/1909.13719>`_.
    If the image is 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): Number of augmentation transformations to apply sequentially.
        magnitude (int): Magnitude for all the transformations.
        num_magnitude_bins (int): The number of different magnitude values.
        interpolation (InterpolationMode): 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.
    rp   r[   é   NÚnum_opsr   Únum_magnitude_binsr   r   rN   c                 óh   •— t         ‰| �  «        || _        || _        || _        || _        || _        y rP   )rQ   rR   r¾   r   r¿   r   r   )rU   r¾   r   r¿   r   r   rV   s         €r=   rR   zRandAugment.__init__2  s5   ø€ ô 	‰ÑÔØˆŒØ"ˆŒØ"4ˆÔØ*ˆÔØˆ�	r?   r„   r…   c                 ó   — t        j                  d«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|d   z  |«      dft        j                  dd|d   z  |«      dft        j                  dd|«      dft        j                  dd	|«      dft        j                  dd	|«      dft        j                  dd	|«      dft        j                  dd	|«      dfd
t        j                  |«      |dz
  dz  z  j	                  «       j                  «       z
  dft        j                  dd|«      dft        j                  d«      dft        j                  d«      dfdœS )Nr   Frt   Tr‡   r   r   rˆ   ru   rY   rh   r‰   ©r*   r   r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   ©rŠ   rŽ   r‹   rŒ   r�   r1   r�   s      r=   r�   zRandAugment._augmentation_spaceA  s^  € ô Ÿ™ cÓ*¨EÐ2Ü—~‘~ c¨3°Ó9¸4Ð@Ü—~‘~ c¨3°Ó9¸4Ð@Ü Ÿ>™>¨#¨}¸zÈ!¹}Ñ/LÈhÓWÐY]Ð^Ü Ÿ>™>¨#¨}¸zÈ!¹}Ñ/LÈhÓWÐY]Ð^Ü—~‘~ c¨4°Ó:¸DÐAÜ Ÿ>™>¨#¨s°HÓ=¸tÐDÜ—n‘n S¨#¨xÓ8¸$Ð?ÜŸ™¨¨S°(Ó;¸TÐBÜŸ.™.¨¨c°8Ó<¸dÐCØœuŸ|™|¨HÓ5¸(ÀQ¹,È!Ñ9KÑL×SÑSÓU×YÑYÓ[Ñ[Ð]bÐcÜŸ™¨¨s°HÓ=¸uÐEÜ"Ÿ\™\¨#Ó.°Ð6ÜŸ™ cÓ*¨EÐ2ñ
ð 	
r?   r   c                 óú  — | j                   }t        j                  |«      \  }}}t        |t        «      r@t        |t
        t        f«      rt        |«      g|z  }n|�|D �cg c]  }t        |«      ‘Œ }}| j                  | j                  ||f«      }t        | j                  «      D ]Ê  }t        t        j                  t        |«      d«      j                  «       «      }	t        |j!                  «       «      |	   }
||
   \  }}|j"                  dkD  r&t        || j$                     j                  «       «      nd}|rt        j                  dd«      r|dz  }t'        ||
|| j(                  |¬«      }ŒÌ |S c c}w )ú�
            img (PIL Image or Tensor): Image to be transformed.

        Returns:
            PIL Image or Tensor: Transformed image.
        r“   r   r   rp   r�   r    )r   r,   rž   rŸ   r   r1   r    r�   r¿   Úranger¾   rŠ   r”   r¡   r•   r´   ÚkeysÚndimr   r>   r   )rU   r   r   r£   r¤   r¥   r¦   r¨   Ú_Úop_indexr   r¬   r­   r   s                 r=   r®   zRandAugment.forwardT  sO  € ð �y‰yˆÜ"#×"2Ñ"2°3Ó"7Ñˆ�&˜%Ü�cœ6Ô"Ü˜$¤¤e Ô-Ü˜d›�} xÑ/‘ØÐ!Ø*.Ö/ Qœ˜a�Ð/�Ð/à×*Ñ*¨4×+BÑ+BÀVÈUÀOÓTˆÜ�t—|‘|Ó$ò 	bˆAÜœ5Ÿ=™=¬¨W«°tÓ<×AÑAÓCÓDˆHÜ˜7Ÿ<™<›>Ó*¨8Ñ4ˆGØ!(¨Ñ!1ÑˆJ˜ØDNÇOÁOÐVWÒDWœ˜j¨¯©Ñ8×=Ñ=Ó?Ô@Ð]`ˆIÙœ%Ÿ-™-¨¨4Ô0Ø˜TÑ!�	Ü˜C ¨)À4×CUÑCUÐ\`Ôa‰Cð	bð ˆ
ùò 0s   Á"E8c                 óº   — | j                   j                  › d| j                  › d| j                  › d| j                  › d| j
                  › d| j                  › d�}|S )Nz	(num_ops=z, magnitude=z, num_magnitude_bins=ú, interpolation=r°   r±   )rV   rD   r¾   r   r¿   r   r   ©rU   Úss     r=   r²   zRandAugment.__repr__o  sg   € à�~‰~×&Ñ&Ð'ð (Ø—|‘|�nØ˜4Ÿ>™>Ð*Ø# D×$;Ñ$;Ð#<Ø˜t×1Ñ1Ð2Ø�d—i‘i�[Øðð 	
ð ˆr?   )rD   rE   rF   rG   r   r³   r1   r   r´   r    rR   rµ   r·   r¶   r   r¸   r�   r®   r²   rº   r»   s   @r=   r   r     sÁ   ø„ ñð( ØØ"$Ø+<×+DÑ+DØ&*ñàðð ðð  ð	ð
 )ðð �t˜E‘{Ñ#ðð 
õð
¨Cð 
¸UÀ3ÈÀ8¹_ð 
ÐQUÐVYÐ[`ÐagÐimÐamÑ[nÐVnÑQoó 
ð&˜6ð  fó ð6
˜#÷ 
r?   r   c            	       óœ   ‡ — e Zd ZdZdej
                  dfdededeee	      ddfˆ fd„Z
d	edeeeeef   f   fd
„Zdedefd„Zdefd„Zˆ xZS )r   aû  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>`_.
    If the image is 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): The number of different magnitude values.
        interpolation (InterpolationMode): 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.
    r½   Nr¿   r   r   rN   c                 óL   •— t         ‰| �  «        || _        || _        || _        y rP   )rQ   rR   r¿   r   r   )rU   r¿   r   r   rV   s       €r=   rR   zTrivialAugmentWide.__init__Œ  s'   ø€ ô 	‰ÑÔØ"4ˆÔØ*ˆÔØˆ�	r?   r„   c                 óè  — t        j                  d«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dfdt        j                  |«      |dz
  d	z  z  j	                  «       j                  «       z
  dft        j                  d
d|«      dft        j                  d«      dft        j                  d«      dfdœS )Nr   Fg®Gáz®ï?Tg      @@g     à`@rY   r   rd   r‰   rÂ   rÃ   )rU   r„   s     r=   r�   z&TrivialAugmentWide._augmentation_space—  sJ  € ô Ÿ™ cÓ*¨EÐ2Ü—~‘~ c¨4°Ó:¸DÐAÜ—~‘~ c¨4°Ó:¸DÐAÜ Ÿ>™>¨#¨t°XÓ>ÀÐEÜ Ÿ>™>¨#¨t°XÓ>ÀÐEÜ—~‘~ c¨5°(Ó;¸TÐBÜ Ÿ>™>¨#¨t°XÓ>ÀÐEÜ—n‘n S¨$°Ó9¸4Ð@ÜŸ™¨¨T°8Ó<¸dÐCÜŸ.™.¨¨d°HÓ=¸tÐDØœuŸ|™|¨HÓ5¸(ÀQ¹,È!Ñ9KÑL×SÑSÓU×YÑYÓ[Ñ[Ð]bÐcÜŸ™¨¨s°HÓ=¸uÐEÜ"Ÿ\™\¨#Ó.°Ð6ÜŸ™ cÓ*¨EÐ2ñ
ð 	
r?   r   c                 ó  — | j                   }t        j                  |«      \  }}}t        |t        «      r@t        |t
        t        f«      rt        |«      g|z  }n|�|D �cg c]  }t        |«      ‘Œ }}| j                  | j                  «      }t        t        j                  t        |«      d«      j                  «       «      }t        |j                  «       «      |   }	||	   \  }
}|
j                  dkD  rIt        |
t        j                  t        |
«      dt        j                   ¬«         j                  «       «      nd}|rt        j                  dd«      r|dz  }t#        ||	|| j$                  |¬«      S c c}w )rÅ   r“   r   ©Údtyper   rp   r�   r    )r   r,   rž   rŸ   r   r1   r    r�   r¿   rŠ   r”   r¡   r•   r´   rÇ   rÈ   Úlongr>   r   )rU   r   r   r£   r¤   r¥   r¦   r¨   rÊ   r   r¬   r­   r   s                r=   r®   zTrivialAugmentWide.forwardª  sC  € ð �y‰yˆÜ"#×"2Ñ"2°3Ó"7Ñˆ�&˜%Ü�cœ6Ô"Ü˜$¤¤e Ô-Ü˜d›�} xÑ/‘ØÐ!Ø*.Ö/ Qœ˜a�Ð/�Ð/à×*Ñ*¨4×+BÑ+BÓCˆÜ”u—}‘}¤S¨£\°4Ó8×=Ñ=Ó?Ó@ˆÜ�w—|‘|“~Ó& xÑ0ˆØ$ WÑ-Ñˆ
�Fð �‰ Ò"ô �*œUŸ]™]¬3¨z«?¸DÌÏ
É
ÔSÑT×YÑYÓ[Ô\àð 	ñ
 ”e—m‘m A tÔ,Ø˜ÑˆIä˜˜g yÀ×@RÑ@RÐY]Ô^Ð^ùò 0s   Á"E<c                 ó†   — | j                   j                  › d| j                  › d| j                  › d| j                  › d�}|S )Nz(num_magnitude_bins=rÌ   r°   r±   )rV   rD   r¿   r   r   rÍ   s     r=   r²   zTrivialAugmentWide.__repr__Ç  sP   € à�~‰~×&Ñ&Ð'ð ("Ø"&×"9Ñ"9Ð!:Ø˜t×1Ñ1Ð2Ø�d—i‘i�[Øð	ð 	
ð ˆr?   )rD   rE   rF   rG   r   r³   r1   r   r´   r    rR   r·   r¶   rµ   r   r¸   r�   r®   r²   rº   r»   s   @r=   r   r   |  s•   ø„ ñð" #%Ø+<×+DÑ+DØ&*ñ		àð	ð )ð	ð �t˜E‘{Ñ#ð		ð
 
õ	ð
¨Cð 
°D¸¸eÀFÈDÀLÑ>QÐ9QÑ4Ró 
ð&_˜6ð _ fó _ð:˜#÷ r?   r   c                   óN  ‡ — e Zd ZdZdddddej
                  dfdeded	ed
ededede	e
e      ddfˆ fd„Zdedeeef   deeeeef   f   fd„Zej$                  j&                  defd„«       Zej$                  j&                  defd„«       Zdedefd„Zdedefd„Zdefd„Zˆ xZS )r   a¼  AugMix data augmentation method based on
    `"AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty" <https://arxiv.org/abs/1912.02781>`_.
    If the image is 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): The severity of base augmentation operators. Default is ``3``.
        mixture_width (int): The number of augmentation chains. Default is ``3``.
        chain_depth (int): The depth of augmentation chains. A negative value denotes stochastic depth sampled from the interval [1, 3].
            Default is ``-1``.
        alpha (float): The hyperparameter for the probability distributions. Default is ``1.0``.
        all_ops (bool): Use all operations (including brightness, contrast, color and sharpness). Default is ``True``.
        interpolation (InterpolationMode): 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.
    rj   éÿÿÿÿr   TNÚseverityÚmixture_widthÚchain_depthÚalphaÚall_opsr   r   rN   c                 óø   •— t         ‰| �  «        d| _        d|cxk  r| j                  k  sn t        d| j                  › d|› d�«      ‚|| _        || _        || _        || _        || _        || _	        || _
        y )Nrœ   r   z!The severity must be between [1, z]. Got z	 instead.)rQ   rR   Ú_PARAMETER_MAXr<   rÙ   rÚ   rÛ   rÜ   rÝ   r   r   )	rU   rÙ   rÚ   rÛ   rÜ   rÝ   r   r   rV   s	           €r=   rR   zAugMix.__init__ç  s…   ø€ ô 	‰ÑÔØ ˆÔØ�XÔ4 ×!4Ñ!4Ô4ÜÐ@À×ATÑATÐ@UÐU\Ð]eÐ\fÐfoÐpÓqÐqØ ˆŒØ*ˆÔØ&ˆÔØˆŒ
ØˆŒØ*ˆÔØˆ�	r?   r„   r…   c                 ó  — t        j                  dd|«      dft        j                  dd|«      dft        j                  d|d   dz  |«      dft        j                  d|d   dz  |«      dft        j                  dd|«      dfdt        j                  |«      |dz
  dz  z  j                  «       j	                  «       z
  d	ft        j                  d
d|«      d	ft        j
                  d«      d	ft        j
                  d«      d	fdœ	}| j                  rr|j                  t        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dft        j                  dd|«      dfdœ«       |S )Nr   rt   Tr   g      @r   rˆ   rh   Fr‰   )	r   r   r   r   r   r%   r&   r'   r(   ru   )r!   r"   r#   r$   )rŠ   r‹   rŒ   r�   r1   rŽ   rÝ   Úupdate)rU   r„   r…   rÎ   s       r=   r�   zAugMix._augmentation_spaceý  si  € ô —~‘~ c¨3°Ó9¸4Ð@Ü—~‘~ c¨3°Ó9¸4Ð@Ü Ÿ>™>¨#¨z¸!©}¸sÑ/BÀHÓMÈtÐTÜ Ÿ>™>¨#¨z¸!©}¸sÑ/BÀHÓMÈtÐTÜ—~‘~ c¨4°Ó:¸DÐAØœuŸ|™|¨HÓ5¸(ÀQ¹,È!Ñ9KÑL×SÑSÓU×YÑYÓ[Ñ[Ð]bÐcÜŸ™¨¨s°HÓ=¸uÐEÜ"Ÿ\™\¨#Ó.°Ð6ÜŸ™ cÓ*¨EÐ2ñ
ˆð �<Š<Ø�H‰Hä#(§>¡>°#°s¸HÓ#EÀtÐ"LÜ#Ÿn™n¨S°#°xÓ@À$ÐGÜ!&§¡°°S¸(Ó!CÀTÐ JÜ"'§.¡.°°c¸8Ó"DÀdÐ!Kñ	ôð ˆr?   c                 ó,   — t        j                  |«      S rP   )r,   Úpil_to_tensor©rU   r   s     r=   Ú_pil_to_tensorzAugMix._pil_to_tensor  s   € ä�‰˜sÓ#Ð#r?   r   c                 ó,   — t        j                  |«      S rP   )r,   Úto_pil_imagerä   s     r=   Ú_tensor_to_pilzAugMix._tensor_to_pil  s   € ä�~‰~˜cÓ"Ð"r?   Úparamsc                 ó,   — t        j                  |«      S rP   )rŠ   Ú_sample_dirichlet)rU   ré   s     r=   rë   zAugMix._sample_dirichlet  s   € ä×&Ñ& vÓ.Ð.r?   Úorig_imgc           
      óÀ  — | j                   }t        j                  |«      \  }}}t        |t        «      rC|}t        |t
        t        f«      rt        |«      g|z  }n,|�*|D �cg c]  }t        |«      ‘Œ }}n| j                  |«      }| j                  | j                  ||f«      }t        |j                  «      }	|j                  dgt        d|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  }t/        | j,                  «      D �]u  }|
}| j0                  dkD  r| j0                  n.t        t#        j2                  ddd¬«      j5                  «       «      }t/        |«      D ]î  }t        t#        j2                  t7        |«      d«      j5                  «       «      }t        |j9                  «       «      |   }||   \  }}|j                  dkD  rJt        |t#        j2                  | j:                  dt"        j<                  ¬	«         j5                  «       «      nd
}|rt#        j2                  dd«      r|dz  }t?        |||| j@                  |¬«      }Œð |jC                  |dd…|f   j                  |«      |z  «       �Œx |j                  |	«      jE                  |jF                  ¬	«      }t        |t        «      s| jI                  |«      S |S c c}w )rÅ   Nr   rh   r   )ÚdevicerØ   r“   )ÚlowÚhighÚsizerÓ   r   rp   r�   r    )%r   r,   rž   rŸ   r   r1   r    rå   r�   rß   r´   ÚshapeÚviewÚmaxrÈ   rñ   rë   rŠ   rŽ   rÜ   rî   ÚexpandrÚ   rÆ   rÛ   r”   r•   r¡   rÇ   rÙ   rÕ   r>   r   Úadd_ÚtorÔ   rè   )rU   rì   r   r£   r¤   r¥   r   r¦   r¨   Ú	orig_dimsÚbatchÚ
batch_dimsÚmÚcombined_weightsÚmixr©   ÚaugÚdepthrÉ   rÊ   r   r¬   r­   r   s                           r=   r®   zAugMix.forward!  s]  € ð �y‰yˆÜ"#×"2Ñ"2°8Ó"<Ñˆ�&˜%Ü�h¤Ô'ØˆCÜ˜$¤¤e Ô-Ü˜d›�} xÑ/‘ØÐ!Ø*.Ö/ Qœ˜a�Ð/�Ñ/à×%Ñ% hÓ/ˆCà×*Ñ*¨4×+>Ñ+>ÀÈÀÓPˆä˜Ÿ™“Oˆ	Ø—‘˜!˜œs 1 s§x¡x¡<°Ó3Ñ3°iÑ?Ó@ˆØ—j‘j “m�_¨ s¨e¯j©j¸1©nÑ'=Ñ=ˆ
ð ×"Ñ"Ü�L‰L˜$Ÿ*™* d§j¡jÐ1¸%¿,¹,ÔG×NÑNÈzÐZ[É}Ð^`Óaó
ˆð
  ×1Ñ1Ü�L‰L˜$Ÿ*™*˜¨×(:Ñ(:Ñ:À5Ç<Á<ÔP×WÑWÐXbÐcdÑXeÐgiÓjó
àŠa�ˆd‰G�L‰L˜* Q™-¨Ð,Ó-ñ.Ðð ’�1�‰g�l‰l˜:Ó&¨Ñ.ˆÜ�t×)Ñ)Ó*ó 	DˆAØˆCØ(,×(8Ñ(8¸1Ò(<�D×$Ò$Ä#ÄeÇmÁmÐXYÐ`aÐhlÔFm×FrÑFrÓFtÓBuˆEÜ˜5“\ò f�ÜœuŸ}™}¬S°«\¸4Ó@×EÑEÓGÓH�Ü˜wŸ|™|›~Ó.¨xÑ8�Ø%,¨WÑ%5Ñ"�
˜Fð "—‘¨Ò*ô ˜*¤U§]¡]°4·=±=À$ÌeÏjÉjÔ%YÑZ×_Ñ_ÓaÔbàð ñ
 œeŸm™m¨A¨tÔ4Ø Ñ%�IÜ  W¨iÀt×GYÑGYÐ`dÔe‘ðfð �H‰HÐ%¢a¨ dÑ+×0Ñ0°Ó<¸sÑBÖCð	Dð  �h‰h�yÓ!×$Ñ$¨3¯9©9Ð$Ó5ˆä˜(¤FÔ+Ø×&Ñ& sÓ+Ð+Øˆ
ùòU 0s   Á$Oc                 óî   — | j                   j                  › d| j                  › d| j                  › d| j                  › d| j
                  › d| j                  › d| j                  › d| j                  › d�}|S )	Nz
(severity=z, mixture_width=z, chain_depth=z, alpha=z
, all_ops=rÌ   r°   r±   )	rV   rD   rÙ   rÚ   rÛ   rÜ   rÝ   r   r   rÍ   s     r=   r²   zAugMix.__repr__[  s   € à�~‰~×&Ñ&Ð'ð (ØŸ™�Ø˜t×1Ñ1Ð2Ø˜T×-Ñ-Ð.Ø�t—z‘z�lØ˜Ÿ™˜Ø˜t×1Ñ1Ð2Ø�d—i‘i�[Øðð 	
ð ˆr?   )rD   rE   rF   rG   r   ÚBILINEARr1   r    r¸   r   r´   rR   rµ   r·   r¶   r   r�   rŠ   ÚjitÚunusedrå   rè   rë   r®   r²   rº   r»   s   @r=   r   r   Ò  s9  ø„ ñð, ØØØØØ+<×+EÑ+EØ&*ñàðð ðð ð	ð
 ðð ðð )ðð �t˜E‘{Ñ#ðð 
õð,¨Cð ¸UÀ3ÈÀ8¹_ð ÐQUÐVYÐ[`ÐagÐimÐamÑ[nÐVnÑQoó ð0 ‡Y�Y×Ñð$ Vò $ó ð$ð ‡Y�Y×Ñð# &ò #ó ð#ð/¨ð /°6ó /ð8 ð 8¨6ó 8ðt˜#÷ r?   r   )r.   Úenumr   Útypingr   rŠ   r   Ú r   r,   r   Ú__all__r¶   r    r´   r>   r	   ÚnnÚModuler
   r   r   r   rK   r?   r=   ú<module>r
     sÅ   ðÛ Ý Ý ã Ý ç 0â
]€ðMØ	ðMØðMØ*/ðMØ@QðMØYaÐbfÐglÑbmÑYnóMô`˜ô ôtT�%—(‘(—/‘/ô tTônZ�%—(‘(—/‘/ô ZôzS˜Ÿ™Ÿ™ô SôlUˆU�X‰X�_‰_õ Ur?   