ó
    Äö‘jd  ã                   óV   • S r SSKrSSKrSSKr\R                  S4S jr " S S5      rg)zÉRandom Erasing (Cutout)

Originally inspired by impl at https://github.com/zhunzhong07/Random-Erasing, Apache 2.0
Copyright Zhun Zhong & Liang Zheng

Hacked together by / Copyright 2019, Ross Wightman
é    NÚcudac                 óì   • U (       a#  [         R                  " X#US9R                  5       $ U(       a)  [         R                  " US   SS4X4S9R                  5       $ [         R                  " US   SS4X4S9$ )N©ÚdtypeÚdevicer   é   )ÚtorchÚemptyÚnormal_Úzeros)Ú	per_pixelÚ
rand_colorÚ
patch_sizer   r   s        Ú¦C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\timm/data/random_erasing.pyÚ_get_pixelsr      se   € ö Ü�{Š{˜:¸6ÑB×JÑJÓLÐLÞ	Ü�{Š{˜J q™M¨1¨aÐ0¸ÑM×UÑUÓWÐWä�{Š{˜J q™M¨1¨aÐ0¸ÑMÐMó    c                   óH   • \ rS rSrSr          S	S jrS rS rS rSr	g)
ÚRandomErasingé   a  Randomly selects a rectangle region in an image and erases its pixels.
    'Random Erasing Data Augmentation' by Zhong et al.
    See https://arxiv.org/pdf/1708.04896.pdf

    This variant of RandomErasing is intended to be applied to either a batch
    or single image tensor after it has been normalized by dataset mean and std.
Args:
     probability: Probability that the Random Erasing operation will be performed.
     min_area: Minimum percentage of erased area wrt input image area.
     max_area: Maximum percentage of erased area wrt input image area.
     min_aspect: Minimum aspect ratio of erased area.
     mode: pixel color mode, one of 'const', 'rand', or 'pixel'
        'const' - erase block is constant color of 0 for all channels
        'rand'  - erase block is same per-channel random (normal) color
        'pixel' - erase block is per-pixel random (normal) color
    max_count: maximum number of erasing blocks per image, area per box is scaled by count.
        per-image count is randomly chosen between 1 and this value.
Nc                 óÖ  • Xl         X l        X0l        U=(       d    SU-  n[        R                  " U5      [        R                  " U5      4U l        Xpl        U=(       d    UU l        X�l        UR                  5       U l
        SU l        SU l        U R                  S:X  a  SU l        O;U R                  S:X  a  SU l        O#U R                  (       a  U R                  S:X  d   eX l        g )Nr   FÚrandTÚpixelÚconst)ÚprobabilityÚmin_areaÚmax_areaÚmathÚlogÚlog_aspect_ratioÚ	min_countÚ	max_countÚ
num_splitsÚlowerÚmoder   r   r   )Úselfr   r   r   Ú
min_aspectÚ
max_aspectr$   r    r!   r"   r   s              r   Ú__init__ÚRandomErasing.__init__.   sµ   € ð 'ÔØ ŒØ ŒØ×1 1 z¡>ˆ
Ü!%§¢¨*Ó!5´t·x²xÀ
Ó7KÐ LˆÔØ"ŒØ"×/ iˆŒØ$ŒØ—J‘J“LˆŒ	ØˆŒØˆŒØ�9‰9˜ÓØ"ˆD�OØ�Y‰Y˜'Ó!Ø!ˆD�Nà—y—y D§I¡I°Ó$8Ð8Ð8Ø�r   c           
      ó®  • [         R                   " 5       U R                  :”  a  g X4-  nU R                  U R                  :X  a  U R                  O*[         R                  " U R                  U R                  5      n[        U5       GHL  n[        S5       GH8  n	[         R                  " U R                  U R                  5      U-  U-  n
[        R                  " [         R                  " U R                  6 5      n[        [        [        R                  " X«-  5      5      5      n[        [        [        R                  " X«-  5      5      5      nXÔ:  d  MÁ  XÃ:  d  MÈ  [         R                  " SX<-
  5      n[         R                  " SXM-
  5      n[        U R                   U R"                  X,U4UU R$                  S9US S 2XîU-   2XÿU-   24'     GMJ     GMO     g )Né
   r   r   )Úrandomr   r    r!   ÚrandintÚrangeÚuniformr   r   r   Úexpr   ÚintÚroundÚsqrtr   r   r   r   )r%   ÚimgÚchanÚimg_hÚimg_wr   ÚareaÚcountÚ_ÚattemptÚtarget_areaÚaspect_ratioÚhÚwÚtopÚlefts                   r   Ú_eraseÚRandomErasing._eraseN   sV  € Ü�=Š=‹?˜T×-Ñ-Ó-ØØ‰}ˆØ"&§.¡.°D·N±NÓ"B�—’Ü�NŠN˜4Ÿ>™>¨4¯>©>Ó:ð 	ä�u—ˆAÜ  Ÿ9�Ü$Ÿnšn¨T¯]©]¸D¿M¹MÓJÈTÑQÐTYÑY�Ü#Ÿxšx¬¯ª¸×8MÑ8MÐ(NÓO�ÜœœdŸiši¨Ñ(BÓCÓDÓE�ÜœœdŸiši¨Ñ(BÓCÓDÓE�Ø•9 ¥Ü Ÿ.š.¨¨E©IÓ6�CÜ!Ÿ>š>¨!¨U©YÓ7�DÜ9DØŸ™ØŸ™Ø !˜Ø#Ø#Ÿ{™{ñ:�Cš˜3 Q™w˜;¨°A©X¨Ð5Ñ6ó ô %ò r   c                 óf  • [        UR                  5       5      S:X  a/  U R                  " U/UR                  5       QUR                  P76   U$ UR                  5       u  p#pEU R                  S:”  a  X R                  -  OSn[        Xb5       H"  nU R                  X   X4XQR                  5        M$     U$ )Né   r   r   )ÚlenÚsizerB   r   r"   r.   )r%   ÚinputÚ
batch_sizer5   r6   r7   Úbatch_startÚis           r   Ú__call__ÚRandomErasing.__call__f   s’   € Üˆu�z‰z‹|Ó Ó!Ø�KŠK˜Ð: §
¡
£Ð:¨e¯k©kÓ:ð ˆð .3¯Z©Z«\Ñ*ˆJ˜eà;?¿?¹?ÈQÓ;N˜*¯©Ò7ÐTUˆKÜ˜;Ö3�Ø—‘˜E™H d°5¿+¹+ÖFñ 4àˆr   c                 ó¬   • U R                   R                  SU R                   SU R                   3-   nUSU R                   SU R
                   S3-  nU$ )Nz(p=z, mode=z	, count=(z, z)))Ú	__class__Ú__name__r   r$   r    r!   )r%   Úfss     r   Ú__repr__ÚRandomErasing.__repr__q   sV   € à�^‰^×$Ñ$¨¨T×-=Ñ-=Ð,>¸gÀdÇiÁiÀ[Ð'QÑQˆØ
�	˜$Ÿ.™.Ð)¨¨D¯N©NÐ+;¸2Ð>Ñ>ˆØˆ	r   )r   r   r   r!   r   r    r$   r"   r   r   r   )
g      à?g{®Gáz”?gUUUUUUÕ?g333333Ó?Nr   r   Nr   r   )
rP   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   rB   rL   rR   Ú__static_attributes__© r   r   r   r      s<   † ñð* ØØØØØØØØØôò@ò0	õr   r   )rW   r,   r   r	   Úfloat32r   r   rY   r   r   Ú<module>r[      s2   ðñó Û ã ð :?¿¹Èvô 	N÷[ò [r   