§
    ù²Åjºp  ã                   ón  — d dl Z d dlmZ d dlmZmZmZ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dS )é    N)ÚEnum)ÚDictÚListÚOptionalÚTuple)ÚTensoré   )Ú
functionalÚInterpolationMode)ÚAutoAugmentPolicyÚAutoAugmentÚRandAugmentÚTrivialAugmentWideÚAugMixÚimgÚop_nameÚ	magnitudeÚinterpolationÚfillc                 ó¨  — |dk    rHt          j        | dddgdt          j        t          j        |¦  «        ¦  «        dg||ddg¬¦  «        } �n|dk    rHt          j        | dddgddt          j        t          j        |¦  «        ¦  «        g||ddg¬¦  «        } �nµ|dk    r.t          j        | dt          |¦  «        dgd|ddg|¬¦  «        } �n�|d	k    r.t          j        | ddt          |¦  «        gd|ddg|¬¦  «        } �nM|d
k    rt          j        | |||¬¦  «        } �n-|dk    rt          j        | d|z   ¦  «        } �n|dk    rt          j        | d|z   ¦  «        } nî|dk    rt          j	        | d|z   ¦  «        } nÏ|dk    rt          j
        | d|z   ¦  «        } n°|dk    r#t          j        | t          |¦  «        ¦  «        } n‡|dk    rt          j        | |¦  «        } nk|dk    rt          j        | ¦  «        } nP|dk    rt          j        | ¦  «        } n5|dk    rt          j        | ¦  «        } n|dk    rnt!          d|› d�¦  «        ‚| S )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        úSC:\Projects\Historical\venv\Lib\site-packages\torchvision/transforms/autoaugment.pyÚ	_apply_oprA      sÆ  € ð �(ÒÐõ ŒhØØØ˜!�fØÝ”<¥¤	¨)Ñ 4Ô 4Ñ5Ô5°sÐ;Ø'ØØ�q�6ð	
ñ 	
ô 	
ˆ‰ð 
�HÒ	Ð	õ ŒhØØØ˜!�fØØ�œ¥T¤Y¨yÑ%9Ô%9Ñ:Ô:Ð;Ø'ØØ�q�6ð	
ñ 	
ô 	
ˆ‰ð 
�LÒ	 Ð	 ÝŒhØØÝ˜9‘~”~ qÐ)ØØ'Ø˜�*Øð
ñ 
ô 
ˆ‰ð 
�LÒ	 Ð	 ÝŒhØØØ�#˜i™.œ.Ð)ØØ'Ø˜�*Øð
ñ 
ô 
ˆ‰ð 
�HÒ	Ð	ÝŒh�s˜I°]ÈÐNÑNÔNˆ‰Ø	�LÒ	 Ð	 ÝÔ! # s¨Y¡Ñ7Ô7ˆ‰Ø	�GÒ	Ð	ÝÔ! # s¨Y¡Ñ7Ô7ˆˆØ	�JÒ	Ð	ÝÔ  S¨9¡_Ñ5Ô5ˆˆØ	�KÒ	Ð	ÝÔ   c¨I¡oÑ6Ô6ˆˆØ	�KÒ	Ð	ÝŒk˜#�s 9™~œ~Ñ.Ô.ˆˆØ	�JÒ	Ð	ÝŒj˜˜iÑ(Ô(ˆˆØ	�NÒ	"Ð	"ÝŒn˜SÑ!Ô!ˆˆØ	�JÒ	Ð	ÝŒj˜‰oŒoˆˆØ	�HÒ	Ð	ÝŒh�s‰mŒmˆˆØ	�JÒ	Ð	ØåÐN°'ÐNÐNÐNÑOÔOÐOØ€Jó    c                   ó   — e Zd ZdZdZdZdZdS )r   zoAutoAugment policies learned on different datasets.
    Available policies are IMAGENET, CIFAR10 and SVHN.
    ÚimagenetÚcifar10ÚsvhnN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚIMAGENETÚCIFAR10ÚSVHN© rB   r@   r   r   ]   s)   € € € € € ðð ð €HØ€GØ€D€D€DrB   r   c                   ób  ‡ — 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                 ó¦   •— t          ¦   «                              ¦   «          || _        || _        || _        |                      |¦  «        | _        d S ©N)ÚsuperÚ__init__rP   r   r   Ú_get_policiesÚpolicies)ÚselfrP   r   r   Ú	__class__s       €r@   rU   zAutoAugment.__init__y   sJ   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ*ˆÔØˆŒ	Ø×*Ò*¨6Ñ2Ô2ˆŒˆˆrB   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)   r]   é   ©r*   r]   N©©r+   çš™™™™™é?N©r+   r]   N))r(   r]   é   )r(   r]   é   ©©r+   r[   N)r)   çš™™™™™É?é   )ri   ©r"   rd   r\   ))r)   r]   é   re   ))r(   rd   r`   ©r+   r   N))r"   rj   rm   )r)   r]   r\   )re   )r(   r[   rg   )rl   ©r%   r[   r   ))r"   r[   r^   re   ))r+   r   Nrc   ©©r,   r]   Nrn   ©)r%   r]   rk   )r&   r   r\   )rl   )r%   r   é   ))r%   rd   r\   )r)   rd   rf   ))r'   r[   rf   rq   ))r   r]   r`   rn   )ro   re   rh   r_   rp   rr   rb   ))©r,   çš™™™™™¹?N)r&   rj   rg   ))r"   çffffffæ?rs   )r    ç333333Ó?r^   ))r'   rd   r	   )r'   çÍÌÌÌÌÌì?rm   ))r   ç      à?r\   ©r!   rv   r^   ))r*   ry   N©r+   rx   N))r   rj   rf   )r(   rw   rf   ))r%   r[   rm   )r$   r]   rf   ))r'   rw   r^   )r$   rv   r^   )re   )r+   ry   N))r&   r]   rf   )r'   r]   r`   ))r%   rv   rf   )r    ry   r\   ))r+   rw   N)r*   r[   N))r!   r[   rm   )r'   rj   rg   ))r$   rx   rg   )r%   rj   r\   ))r)   ry   rs   )r,   r   N)©r+   rj   Nra   )r|   re   ))r%   rx   r^   re   )©r*   rd   N)r)   rj   r\   ))r$   ru   rm   )r%   rv   r   ))r)   r[   r`   ©r*   rx   N))r!   rx   r^   rz   )r~   )r)   rd   rm   )rc   rt   )rz   r~   ))©r   rx   rk   )r,   rj   N)©r   rx   r\   ©r,   rv   N)re   )r)   r]   rg   ©©r,   rx   Nre   ©re   )r"   rx   rm   )r   r}   )r€   )r,   r[   N))r   rx   r`   )r)   rj   rg   )rƒ   r}   r„   )r   )r)   rw   rm   ))r   rd   r\   r�   )r{   )r!   r]   rg   r‚   ))r&   rw   rm   ©r"   rd   rk   )©r,   rd   N)r!   r   rs   ))r   rv   rg   )r)   r[   r\   )rq   r…   ))r   rw   rf   )r    rx   rm   ))r   ru   rg   rq   ))r)   rv   rs   )r!   r]   rf   ))r   rd   rk   r†   ))r   rv   r^   )r!   rd   rm   ))r   rd   r`   )r*   rv   N))r   rv   rs   rt   zThe provided policy r.   )r   rK   rL   rM   r?   )rX   rP   s     r@   rV   zAutoAugment._get_policies…   s�   € ð Õ&Ô/Ò/Ð/ðð ð ð ð6 Õ(Ô0Ò0Ð0ðð ð ð ð6 Õ(Ô-Ò-Ð-ðð ð ð õ8 ÐO°FÐOÐOÐOÑPÔPÐPrB   Ú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                       ¦   «                              ¦   «         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   rw   TçtþÅ Ý?r	   r   ç      >@rx   r\   rk   Fç     ào@)r   r   r    r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   r,   )ÚtorchÚlinspaceÚarangeÚroundr4   Útensor©rX   r‡   rˆ   s      r@   Ú_augmentation_spacezAutoAugment._augmentation_spaceß   sw  € õ ”~ c¨3°Ñ9Ô9¸4Ð@Ý”~ c¨3°Ñ9Ô9¸4Ð@Ý œ>¨#¨}¸zÈ!¼}Ñ/LÈhÑWÔWÐY]Ð^Ý œ>¨#¨}¸zÈ!¼}Ñ/LÈhÑWÔWÐY]Ð^Ý”~ c¨4°Ñ:Ô:¸DÐAÝ œ>¨#¨s°HÑ=Ô=¸tÐDÝ”n S¨#¨xÑ8Ô8¸$Ð?Ýœ¨¨S°(Ñ;Ô;¸TÐBÝœ.¨¨c°8Ñ<Ô<¸dÐCØ�uœ|¨HÑ5Ô5¸(ÀQ¹,È!Ñ9KÑL×SÒSÑUÔU×YÒYÑ[Ô[Ñ[Ð]bÐcÝœ¨¨s°HÑ=Ô=¸uÐEÝ"œ\¨#Ñ.Ô.°Ð6Ýœ cÑ*Ô*¨EÐ2Ý”| CÑ(Ô(¨%Ð0ð
ð 
ð 	
rB   Útransform_numc                 óÆ   — t          t          j        | d¦  «                             ¦   «         ¦  «        }t          j        d¦  «        }t          j        dd¦  «        }|||fS )z†Get parameters for autoaugment transformation

        Returns:
            params required by the autoaugment transformation
        ©r	   )rs   rs   )r4   r�   ÚrandintÚitemÚrand)r”   Ú	policy_idÚprobsÚsignss       r@   Ú
get_paramszAutoAugment.get_paramsò   sV   € õ �œ m°TÑ:Ô:×?Ò?ÑAÔAÑBÔBˆ	Ý”
˜4Ñ Ô ˆÝ”˜a Ñ&Ô&ˆà˜% Ð&Ð&rB   r   c                 ó”  — | j         }t          j        |¦  «        \  }}}t          |t          ¦  «        r>t          |t
          t          f¦  «        rt          |¦  «        g|z  }n|�d„ |D ¦   «         }|                      t          | j	        ¦  «        ¦  «        \  }}}|  
                    d||f¦  «        }	t          | j	        |         ¦  «        D ]w\  }
\  }}}||
         |k    rb|	|         \  }}|�'t          ||                              ¦   «         ¦  «        nd}|r||
         dk    r|dz  }t          |||| j        |¬¦  «        }Œx|S )z‘
            img (PIL Image or Tensor): Image to be transformed.

        Returns:
            PIL Image or Tensor: AutoAugmented image.
        Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rN   ©Úfloat©Ú.0Úfs     r@   ú
<listcomp>z'AutoAugment.forward.<locals>.<listcomp>  ó   € Ð/Ð/Ð/ Q�˜a™œÐ/Ð/Ð/rB   é
   r   r   ç      ð¿r#   )r   r/   Úget_dimensionsÚ
isinstancer   r4   r¡   r�   ÚlenrW   r“   Ú	enumerater˜   rA   r   )rX   r   r   ÚchannelsÚheightÚwidthÚtransform_idr›   rœ   Úop_metaÚir   ÚpÚmagnitude_idÚ
magnitudesÚsignedr   s                    r@   ÚforwardzAutoAugment.forwardÿ   sc  € ð ŒyˆÝ"#Ô"2°3Ñ"7Ô"7Ñˆ�&˜%Ý�c�6Ñ"Ô"ð 	0Ý˜$¥¥e Ñ-Ô-ð 0Ý˜d™œ�} xÑ/��ØÐ!Ø/Ð/¨$Ð/Ñ/Ô/�à%)§_¢_µS¸¼Ñ5GÔ5GÑ%HÔ%HÑ"ˆ�e˜Uà×*Ò*¨2°¸¨Ñ?Ô?ˆÝ-6°t´}À\Ô7RÑ-SÔ-Sð 	fð 	fÑ)ˆAÑ)�˜˜LØ�QŒx˜1Š}ˆ}Ø%,¨WÔ%5Ñ"�
˜FØFRÐF^�E *¨\Ô":×"?Ò"?Ñ"AÔ"AÑBÔBÐBÐdg�	Øð &˜e Aœh¨!šm˜mØ Ñ%�IÝ  W¨iÀtÔGYÐ`dÐeÑeÔe�øàˆ
rB   c                 ó@   — | j         j        › d| j        › d| j        › d�S )Nz(policy=ú, fill=ú))rY   rG   rP   r   )rX   s    r@   Ú__repr__zAutoAugment.__repr__  s*   € Ø”.Ô)ÐSÐS°4´;ÐSÐSÀtÄyÐSÐSÐSÐSrB   )rG   rH   rI   rJ   r   rK   r   ÚNEARESTr   r   r¡   rU   r   Ústrr4   rV   r   r   Úboolr“   Ústaticmethodr�   r·   r»   Ú__classcell__©rY   s   @r@   r   r   h   s·  ø€ € € € € ðð ð$ %6Ô$>Ø+<Ô+DØ&*ð	
3ð 
3à!ð
3ð )ð
3ð �t˜E”{Ô#ð	
3ð
 
ð
3ð 
3ð 
3ð 
3ð 
3ð 
3ðXQØ'ðXQà	ˆe�E˜#˜u h¨s¤mÐ3Ô4°e¸CÀÈÐQTÌÐ<UÔ6VÐVÔWÔ	XðXQð XQð XQð XQðt
¨Cð 
¸UÀ3ÈÀ8¼_ð 
ÐQUÐVYÐ[`ÐagÐimÐamÔ[nÐVnÔQoð 
ð 
ð 
ð 
ð& ð
' #ð 
'¨%°°V¸VÐ0CÔ*Dð 
'ð 
'ð 
'ñ „\ð
'ð˜6ð  fð ð ð ð ð8T˜#ð Tð Tð Tð Tð Tð Tð Tð TrB   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.
    rs   r^   é   NÚnum_opsr   Únum_magnitude_binsr   r   rQ   c                 óŽ   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        || _        d S rS   )rT   rU   rÄ   r   rÅ   r   r   )rX   rÄ   r   rÅ   r   r   rY   s         €r@   rU   zRandAugment.__init__2  sD   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ"ˆŒØ"4ˆÔØ*ˆÔØˆŒ	ˆ	ˆ	rB   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                       ¦   «                              ¦   «         z
  dft          j        dd|¦  «        dft          j        d¦  «        dft          j        d¦  «        dfdœS )Nr   Frw   TrŠ   r	   r   r‹   rx   r\   rk   rŒ   ©r-   r   r   r    r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   ©r�   r‘   rŽ   r�   r�   r4   r’   s      r@   r“   zRandAugment._augmentation_spaceA  sw  € õ œ cÑ*Ô*¨EÐ2Ý”~ c¨3°Ñ9Ô9¸4Ð@Ý”~ c¨3°Ñ9Ô9¸4Ð@Ý œ>¨#¨}¸zÈ!¼}Ñ/LÈhÑWÔWÐY]Ð^Ý œ>¨#¨}¸zÈ!¼}Ñ/LÈhÑWÔWÐY]Ð^Ý”~ c¨4°Ñ:Ô:¸DÐAÝ œ>¨#¨s°HÑ=Ô=¸tÐDÝ”n S¨#¨xÑ8Ô8¸$Ð?Ýœ¨¨S°(Ñ;Ô;¸TÐBÝœ.¨¨c°8Ñ<Ô<¸dÐCØ�uœ|¨HÑ5Ô5¸(ÀQ¹,È!Ñ9KÑL×SÒSÑUÔU×YÒYÑ[Ô[Ñ[Ð]bÐcÝœ¨¨s°HÑ=Ô=¸uÐEÝ"œ\¨#Ñ.Ô.°Ð6Ýœ cÑ*Ô*¨EÐ2ð
ð 
ð 	
rB   r   c                 ó  — | j         }t          j        |¦  «        \  }}}t          |t          ¦  «        r>t          |t
          t          f¦  «        rt          |¦  «        g|z  }n|�d„ |D ¦   «         }|                      | j        ||f¦  «        }t          | j
        ¦  «        D ]ã}t          t          j        t          |¦  «        d¦  «                             ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        |         }	||	         \  }
}|
j        dk    r,t          |
| j                                      ¦   «         ¦  «        nd}|rt          j        dd¦  «        r|dz  }t'          ||	|| j        |¬¦  «        }Œä|S )	ú�
            img (PIL Image or Tensor): Image to be transformed.

        Returns:
            PIL Image or Tensor: Transformed image.
        Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rN   r    r¢   s     r@   r¥   z'RandAugment.forward.<locals>.<listcomp>a  r¦   rB   r–   r   r   rs   r¨   r#   )r   r/   r©   rª   r   r4   r¡   r“   rÅ   ÚrangerÄ   r�   r—   r«   r˜   ÚlistÚkeysÚndimr   rA   r   )rX   r   r   r­   r®   r¯   r±   Ú_Úop_indexr   rµ   r¶   r   s                r@   r·   zRandAugment.forwardT  s}  € ð ŒyˆÝ"#Ô"2°3Ñ"7Ô"7Ñˆ�&˜%Ý�c�6Ñ"Ô"ð 	0Ý˜$¥¥e Ñ-Ô-ð 0Ý˜d™œ�} xÑ/��ØÐ!Ø/Ð/¨$Ð/Ñ/Ô/�à×*Ò*¨4Ô+BÀVÈUÀOÑTÔTˆÝ�t”|Ñ$Ô$ð 	bð 	bˆAÝ�5œ=­¨W©¬°tÑ<Ô<×AÒAÑCÔCÑDÔDˆHÝ˜7Ÿ<š<™>œ>Ñ*Ô*¨8Ô4ˆGØ!(¨Ô!1ÑˆJ˜ØDNÄOÐVWÒDWÐDW�˜j¨¬Ô8×=Ò=Ñ?Ô?Ñ@Ô@Ð@Ð]`ˆIØð "�%œ-¨¨4Ñ0Ô0ð "Ø˜TÑ!�	Ý˜C ¨)À4ÔCUÐ\`ÐaÑaÔaˆCˆCàˆ
rB   c                 ót   — | 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º   )rY   rG   rÄ   r   rÅ   r   r   ©rX   Úss     r@   r»   zRandAugment.__repr__o  sx   € àŒ~Ô&ð ð Ø”|ðð àœ>ðð ð %)Ô$;ðð ð  $Ô1ð	ð ð
 ”iðð ð ð 	
ð ˆrB   )rG   rH   rI   rJ   r   r¼   r4   r   r   r¡   rU   r   r   r½   r   r¾   r“   r·   r»   rÀ   rÁ   s   @r@   r   r     s*  ø€ € € € € ðð ð( ØØ"$Ø+<Ô+DØ&*ðð àðð ðð  ð	ð
 )ðð �t˜E”{Ô#ðð 
ðð ð ð ð ð ð
¨Cð 
¸UÀ3ÈÀ8¼_ð 
ÐQUÐVYÐ[`ÐagÐimÐamÔ[nÐVnÔQoð 
ð 
ð 
ð 
ð&˜6ð  fð ð ð ð ð6
˜#ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rB   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   rQ   c                 ór   •— t          ¦   «                              ¦   «          || _        || _        || _        d S rS   )rT   rU   rÅ   r   r   )rX   rÅ   r   r   rY   s       €r@   rU   zTrivialAugmentWide.__init__Œ  s6   ø€ õ 	‰Œ×ÒÑÔÐØ"4ˆÔØ*ˆÔØˆŒ	ˆ	ˆ	rB   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                       ¦   «                              ¦   «         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     à`@r\   r	   rg   rŒ   rÈ   rÉ   )rX   r‡   s     r@   r“   z&TrivialAugmentWide._augmentation_space—  sc  € õ œ 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 S¨$°Ñ9Ô9¸4Ð@Ýœ¨¨T°8Ñ<Ô<¸dÐCÝœ.¨¨d°HÑ=Ô=¸tÐDØ�uœ|¨HÑ5Ô5¸(ÀQ¹,È!Ñ9KÑL×SÒSÑUÔU×YÒYÑ[Ô[Ñ[Ð]bÐcÝœ¨¨s°HÑ=Ô=¸uÐEÝ"œ\¨#Ñ.Ô.°Ð6Ýœ cÑ*Ô*¨EÐ2ð
ð 
ð 	
rB   r   c                 ó*  — | j         }t          j        |¦  «        \  }}}t          |t          ¦  «        r>t          |t
          t          f¦  «        rt          |¦  «        g|z  }n|�d„ |D ¦   «         }|                      | j        ¦  «        }t          t          j
        t          |¦  «        d¦  «                             ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        |         }||         \  }	}
|	j        dk    rSt          |	t          j
        t          |	¦  «        dt          j        ¬¦  «                                      ¦   «         ¦  «        nd}|
rt          j
        dd¦  «        r|dz  }t#          |||| j        |¬	¦  «        S )
rË   Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rN   r    r¢   s     r@   r¥   z.TrivialAugmentWide.forward.<locals>.<listcomp>·  r¦   rB   r–   r   ©Údtyper   rs   r¨   r#   )r   r/   r©   rª   r   r4   r¡   r“   rÅ   r�   r—   r«   r˜   rÎ   rÏ   rÐ   ÚlongrA   r   )rX   r   r   r­   r®   r¯   r±   rÒ   r   rµ   r¶   r   s               r@   r·   zTrivialAugmentWide.forwardª  sv  € ð ŒyˆÝ"#Ô"2°3Ñ"7Ô"7Ñˆ�&˜%Ý�c�6Ñ"Ô"ð 	0Ý˜$¥¥e Ñ-Ô-ð 0Ý˜d™œ�} xÑ/��ØÐ!Ø/Ð/¨$Ð/Ñ/Ô/�à×*Ò*¨4Ô+BÑCÔCˆÝ•u”}¥S¨¡\¤\°4Ñ8Ô8×=Ò=Ñ?Ô?Ñ@Ô@ˆÝ�w—|’|‘~”~Ñ&Ô& xÔ0ˆØ$ WÔ-Ñˆ
�Fð Œ Ò"Ð"õ �*�Uœ]­3¨z©?¬?¸DÍÌ
ÐSÑSÔSÔT×YÒYÑ[Ô[Ñ\Ô\Ð\àð 	ð
 ð 	•e”m A tÑ,Ô,ð 	Ø˜ÑˆIå˜˜g yÀÔ@RÐY]Ð^Ñ^Ô^Ð^rB   c                 óT   — | j         j        › d| j        › d| j        › d| j        › d�}|S )Nz(num_magnitude_bins=rÔ   r¹   rº   )rY   rG   rÅ   r   r   rÕ   s     r@   r»   zTrivialAugmentWide.__repr__Ç  sV   € àŒ~Ô&ð ð Ø"&Ô"9ðð à#Ô1ðð ð ”iðð ð ð 	
ð ˆrB   )rG   rH   rI   rJ   r   r¼   r4   r   r   r¡   rU   r   r½   r   r   r¾   r“   r·   r»   rÀ   rÁ   s   @r@   r   r   |  s  ø€ € € € € ðð ð" #%Ø+<Ô+DØ&*ð		ð 	àð	ð )ð	ð �t˜E”{Ô#ð		ð
 
ð	ð 	ð 	ð 	ð 	ð 	ð
¨Cð 
°D¸¸eÀFÈDÀLÔ>QÐ9QÔ4Rð 
ð 
ð 
ð 
ð&_˜6ð _ fð _ð _ð _ð _ð:˜#ð ð ð ð ð ð ð ð rB   r   c                   óF  ‡ — 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.
    rm   éÿÿÿÿr   TNÚseverityÚmixture_widthÚchain_depthÚalphaÚall_opsr   r   rQ   c                 ó  •— t          ¦   «                              ¦   «          d| _        d|cxk    r| j        k    sn t          d| j        › d|› d�¦  «        ‚|| _        || _        || _        || _        || _        || _	        || _
        d S )Nr§   r	   z!The severity must be between [1, z]. Got z	 instead.)rT   rU   Ú_PARAMETER_MAXr?   râ   rã   rä   rå   ræ   r   r   )	rX   râ   rã   rä   rå   ræ   r   r   rY   s	           €r@   rU   zAugMix.__init__ç  s£   ø€ õ 	‰Œ×ÒÑÔÐØ ˆÔØ�XÐ4Ð4Ò4Ð4 Ô!4Ò4Ð4Ð4Ð4ÝÐpÀÔATÐpÐpÐ]eÐpÐpÐpÑqÔqÐqØ ˆŒØ*ˆÔØ&ˆÔØˆŒ
ØˆŒØ*ˆÔØˆŒ	ˆ	ˆ	rB   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                       ¦   «                              ¦   «         z
  d	ft          j        d
d|¦  «        d	ft          j        d¦  «        d	ft          j        d¦  «        d	fdœ	}| j        rr|                     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   rw   Tr	   g      @r   r‹   rk   FrŒ   )	r   r   r    r!   r"   r(   r)   r*   r+   rx   )r$   r%   r&   r'   )r�   rŽ   r�   r�   r4   r‘   ræ   Úupdate)rX   r‡   rˆ   rÖ   s       r@   r“   zAugMix._augmentation_spaceý  s“  € õ ”~ c¨3°Ñ9Ô9¸4Ð@Ý”~ c¨3°Ñ9Ô9¸4Ð@Ý œ>¨#¨z¸!¬}¸sÑ/BÀHÑMÔMÈtÐTÝ œ>¨#¨z¸!¬}¸sÑ/BÀHÑMÔMÈtÐTÝ”~ c¨4°Ñ:Ô:¸DÐAØ�uœ|¨HÑ5Ô5¸(ÀQ¹,È!Ñ9KÑL×SÒSÑUÔU×YÒYÑ[Ô[Ñ[Ð]bÐcÝœ¨¨s°HÑ=Ô=¸uÐEÝ"œ\¨#Ñ.Ô.°Ð6Ýœ cÑ*Ô*¨EÐ2ð
ð 
ˆð Œ<ð 	Ø�HŠHå#(¤>°#°s¸HÑ#EÔ#EÀtÐ"LÝ#œn¨S°#°xÑ@Ô@À$ÐGÝ!&¤°°S¸(Ñ!CÔ!CÀTÐ JÝ"'¤.°°c¸8Ñ"DÔ"DÀdÐ!Kð	ð ñô ð ð ˆrB   c                 ó*   — t          j        |¦  «        S rS   )r/   Úpil_to_tensor©rX   r   s     r@   Ú_pil_to_tensorzAugMix._pil_to_tensor  s   € åŒ˜sÑ#Ô#Ð#rB   r   c                 ó*   — t          j        |¦  «        S rS   )r/   Úto_pil_imagerí   s     r@   Ú_tensor_to_pilzAugMix._tensor_to_pil  s   € åŒ~˜cÑ"Ô"Ð"rB   Úparamsc                 ó*   — t          j        |¦  «        S rS   )r�   Ú_sample_dirichlet)rX   rò   s     r@   rô   zAugMix._sample_dirichlet  s   € åÔ& vÑ.Ô.Ð.rB   Úorig_imgc           
      ó  — | j         }t          j        |¦  «        \  }}}t          |t          ¦  «        rA|}t          |t
          t          f¦  «        rt          |¦  «        g|z  }n$|�d„ |D ¦   «         }n|                      |¦  «        }|                      | j	        ||f¦  «        }t          |j        ¦  «        }|                     dgt          d|j        z
  d¦  «        z  |z   ¦  «        }	|	                     d¦  «        gdg|	j        dz
  z  z   }
|                      t#          j        | j        | j        g|	j        ¬¦  «                             |
d         d¦  «        ¦  «        }|                      t#          j        | j        g| j        z  |	j        ¬¦  «                             |
d         d¦  «        ¦  «        |dd…df                              |
d         dg¦  «        z  }|dd…df                              |
¦  «        |	z  }t/          | j        ¦  «        D �]–}|	}| j        dk    r| j        n5t          t#          j        ddd¬	¦  «                             ¦   «         ¦  «        }t/          |¦  «        D �]}t          t#          j        t7          |¦  «        d¦  «                             ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        |         }||         \  }}|j        dk    rKt          |t#          j        | j        dt"          j        ¬
¦  «                                      ¦   «         ¦  «        nd}|rt#          j        dd¦  «        r|dz  }t?          |||| j         |¬¦  «        }�Œ| !                    |dd…|f                              |
¦  «        |z  ¦  «         �Œ˜|                     |¦  «         "                    |j#        ¬
¦  «        }t          |t          ¦  «        s|  $                    |¦  «        S |S )rË   Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rN   r    r¢   s     r@   r¥   z"AugMix.forward.<locals>.<listcomp>/  r¦   rB   r	   rk   r   )Údevicerá   r–   )ÚlowÚhighÚsizerÜ   r   rs   r¨   r#   )%r   r/   r©   rª   r   r4   r¡   rî   r“   rè   rÎ   ÚshapeÚviewÚmaxrÐ   rû   rô   r�   r‘   rå   rø   Úexpandrã   rÍ   rä   r—   r˜   r«   rÏ   râ   rÞ   rA   r   Úadd_ÚtorÝ   rñ   )rX   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ˆÝ"#Ô"2°8Ñ"<Ô"<Ñˆ�&˜%Ý�h¥Ñ'Ô'ð 	0ØˆCÝ˜$¥¥e Ñ-Ô-ð 0Ý˜d™œ�} xÑ/��ØÐ!Ø/Ð/¨$Ð/Ñ/Ô/�øà×%Ò% hÑ/Ô/ˆCà×*Ò*¨4Ô+>ÀÈÀÑPÔPˆå˜œ‘O”Oˆ	Ø—’˜!˜�s 1 s¤x¡<°Ñ3Ô3Ñ3°iÑ?Ñ@Ô@ˆØ—j’j ‘m”m�_¨ s¨e¬j¸1©nÑ'=Ñ=ˆ
ð ×"Ò"ÝŒL˜$œ* d¤jÐ1¸%¼,ÐGÑGÔG×NÒNÈzÐZ[Ì}Ð^`ÑaÔañ
ô 
ˆð
  ×1Ò1ÝŒL˜$œ*˜¨Ô(:Ñ:À5Ä<ÐPÑPÔP×WÒWÐXbÐcdÔXeÐgiÑjÔjñ
ô 
àˆaˆaˆa�ˆdŒG�LŠL˜* Qœ-¨Ð,Ñ-Ô-ñ.Ðð ����1�Œg�lŠl˜:Ñ&Ô&¨Ñ.ˆÝ�tÔ)Ñ*Ô*ð 	Dñ 	DˆAØˆCØ(,Ô(8¸1Ò(<Ð(<�DÔ$Ð$Å#ÅeÄmÐXYÐ`aÐhlÐFmÑFmÔFm×FrÒFrÑFtÔFtÑBuÔBuˆEÝ˜5‘\”\ð fñ f�Ý�uœ}­S°©\¬\¸4Ñ@Ô@×EÒEÑGÔGÑHÔH�Ý˜wŸ|š|™~œ~Ñ.Ô.¨xÔ8�Ø%,¨WÔ%5Ñ"�
˜Fð "”¨Ò*Ð*õ ˜*¥U¤]°4´=À$ÍeÌjÐ%YÑ%YÔ%YÔZ×_Ò_ÑaÔaÑbÔbÐbàð ð
 ð &�eœm¨A¨tÑ4Ô4ð &Ø Ñ%�IÝ  W¨iÀtÔGYÐ`dÐeÑeÔe�‘Ø�HŠHÐ% a a a¨ dÔ+×0Ò0°Ñ<Ô<¸sÑBÑCÔCÐCÑCØ�hŠh�yÑ!Ô!×$Ò$¨3¬9Ð$Ñ5Ô5ˆå˜(¥FÑ+Ô+ð 	,Ø×&Ò& sÑ+Ô+Ð+Øˆ
rB   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º   )	rY   rG   râ   rã   rä   rå   ræ   r   r   rÕ   s     r@   r»   zAugMix.__repr__[  s›   € àŒ~Ô&ð ð Øœðð à#Ô1ðð ð "Ô-ðð ð ”zð	ð ð
 œðð ð  $Ô1ðð ð ”iðð ð ð 	
ð ˆrB   )rG   rH   rI   rJ   r   ÚBILINEARr4   r¡   r¾   r   r   rU   r   r   r½   r   r“   r�   ÚjitÚunusedrî   rñ   rô   r·   r»   rÀ   rÁ   s   @r@   r   r   Ò  sÁ  ø€ € € € € ðð ð, ØØØØØ+<Ô+EØ&*ðð àðð ðð ð	ð
 ðð ðð )ðð �t˜E”{Ô#ðð 
ðð ð ð ð ð ð,¨Cð ¸UÀ3ÈÀ8¼_ð ÐQUÐVYÐ[`ÐagÐimÐamÔ[nÐVnÔQoð ð ð ð ð0 „YÔð$ Vð $ð $ð $ñ Ôð$ð „YÔð# &ð #ð #ð #ñ Ôð#ð/¨ð /°6ð /ð /ð /ð /ð8 ð 8¨6ð 8ð 8ð 8ð 8ðt˜#ð ð ð ð ð ð ð ð rB   r   )r1   Úenumr   Útypingr   r   r   r   r�   r   Ú r
   r/   r   Ú__all__r½   r¡   rA   r   ÚnnÚModuler   r   r   r   rN   rB   r@   ú<module>r     sí  ðØ €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à €€€Ø Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à
]Ð
]Ð
]€ðMØ	ðMØðMØ*/ðMØ@QðMØYaÐbfÐglÔbmÔYnðMð Mð Mð Mð`ð ð ð ð ˜ñ ô ð ðtTð tTð tTð tTð tT�%”(”/ñ tTô tTð tTðnZð Zð Zð Zð Z�%”(”/ñ Zô Zð ZðzSð Sð Sð Sð S˜œœñ Sô Sð SðlUð Uð Uð Uð UˆUŒXŒ_ñ Uô Uð Uð Uð UrB   