Ë
    éÓ^j˜N  ã                   ó  — d dl Z d dlZd dlZd dl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c mZ 	 d dlmZ dZd dlmZ d dlZg d¢Z G d„ d	«      Z G d
„ d«      Z G d„ dej0                  «      Z G d„ d«      Z eed«      r‡ej8                  j:                  dej8                  j<                  dej8                  j>                  dej8                  j@                  dej8                  jB                  dej8                  jD                  diZ#nJej:                  dej<                  dej>                  dej@                  dejB                  dejD                  diZ#e#jI                  «       D � �ci c]  \  } }|| “Œ
 c}} Z%eroej:                  dej<                  dej>                  dej@                  dejB                  dejD                  diZ&e&jI                  «       D � �ci c]  \  } }|| “Œ
 c}} Z'ni Z(i Z&d„ Z)d„ Z*d„ Z+ e*d«       e*d«      fZ,d2d„Z- G d„ d«      Z.	 	 d3de	j^                  dee0ee0   f   dee0ee0e0e0f   f   d e1d!e	j^                  f
d"„Z2 G d#„ d$e	jf                  jh                  «      Z5	 	 d3de	j^                  d%e0d&e0d'e0d(e0dee0ee0e0e0f   f   d e1d!e	j^                  fd)„Z6 G d*„ d+e	jf                  jh                  «      Z7 G d,„ d-«      Z8 G d.„ d/«      Z9 G d0„ d1e	jf                  jh                  «      Z:y# e$ r dZY �ŒÅw xY wc c}} w c c}} w )4é    N)ÚListÚSequenceÚTupleÚUnion)ÚInterpolationModeTF)ÚImage)ÚToNumpyÚToTensorÚstr_to_interp_modeÚstr_to_pil_interpÚinterp_mode_to_strÚ!RandomResizedCropAndInterpolationÚCenterCropOrPadÚcenter_crop_or_padÚcrop_or_padÚRandomCropOrPadÚ	RandomPadÚResizeKeepRatioÚ
TrimBorderÚMaybeToTensorÚMaybePILToTensorc                   ó   — e Zd Zd„ Zy)r	   c                 óÈ   — t        j                  |t         j                  ¬«      }|j                  dk  rt        j                  |d¬«      }t        j
                  |d«      }|S )N©Údtypeé   éÿÿÿÿ)Úaxisé   )ÚnpÚarrayÚuint8ÚndimÚexpand_dimsÚrollaxis)ÚselfÚpil_imgÚnp_imgs      ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/data/transforms.pyÚ__call__zToNumpy.__call__   sF   € Ü—‘˜'¬¯©Ô2ˆØ�;‰;˜Š?Ü—^‘^ F°Ô4ˆFÜ—‘˜V QÓ'ˆØˆó    N)Ú__name__Ú
__module__Ú__qualname__r*   © r+   r)   r	   r	      s   „ ór+   r	   c                   ó4   — e Zd ZdZej
                  fd„Zd„ Zy)r
   z% ToTensor with no rescaling of valuesc                 ó   — || _         y ©Nr   )r&   r   s     r)   Ú__init__zToTensor.__init__%   s	   € Øˆ�
r+   c                 ó`   — t        j                  |«      j                  | j                  ¬«      S )Nr   )ÚFÚpil_to_tensorÚtor   )r&   r'   s     r)   r*   zToTensor.__call__(   s#   € Ü�‰˜wÓ'×*Ñ*°·±Ð*Ó<Ð<r+   N)r,   r-   r.   Ú__doc__ÚtorchÚfloat32r3   r*   r/   r+   r)   r
   r
   #   s   „ Ù/Ø"Ÿ]™]ó ó=r+   r
   c                   óP   ‡ — e Zd ZdZdˆ fd„Zdej                  fd„Zdefd„Z	ˆ xZ
S )r   zFConvert a PIL Image or ndarray to tensor if it's not already one.
    Úreturnc                 ó"   •— t         ‰| �  «        y r2   ©Úsuperr3   ©r&   Ú	__class__s    €r)   r3   zMaybeToTensor.__init__0   ó   ø€ Ü‰ÑÕr+   c                 ód   — t        |t        j                  «      r|S t        j                  |«      S )z�
        Args:
            pic (PIL Image or numpy.ndarray): Image to be converted to tensor.

        Returns:
            Tensor: Converted image.
        )Ú
isinstancer9   ÚTensorr5   Ú	to_tensor©r&   Úpics     r)   r*   zMaybeToTensor.__call__3   s&   € ô �cœ5Ÿ<™<Ô(ØˆJÜ�{‰{˜3ÓÐr+   c                 ó4   — | j                   j                  › d�S ©Nz()©rA   r,   ©r&   s    r)   Ú__repr__zMaybeToTensor.__repr__?   ó   € Ø—.‘.×)Ñ)Ð*¨"Ð-Ð-r+   ©r<   N)r,   r-   r.   r8   r3   r9   rE   r*   ÚstrrM   Ú__classcell__©rA   s   @r)   r   r   ,   s)   ø„ ñõð
 ˜uŸ|™|ó 
 ð.˜#÷ .r+   r   c                   ó6   ‡ — e Zd ZdZdˆ fd„Zd„ Zdefd„Zˆ xZS )r   zSConvert a PIL Image to a tensor of the same type - this does not scale values.
    r<   c                 ó"   •— t         ‰| �  «        y r2   r>   r@   s    €r)   r3   zMaybePILToTensor.__init__G   rB   r+   c                 ód   — t        |t        j                  «      r|S t        j                  |«      S )zÍ
        Note: A deep copy of the underlying array is performed.

        Args:
            pic (PIL Image): Image to be converted to tensor.

        Returns:
            Tensor: Converted image.
        )rD   r9   rE   r5   r6   rG   s     r)   r*   zMaybePILToTensor.__call__J   s&   € ô �cœ5Ÿ<™<Ô(ØˆJÜ�‰˜sÓ#Ð#r+   c                 ó4   — | j                   j                  › d�S rJ   rK   rL   s    r)   rM   zMaybePILToTensor.__repr__X   rN   r+   rO   )	r,   r-   r.   r8   r3   r*   rP   rM   rQ   rR   s   @r)   r   r   C   s   ø„ ñõò$ð.˜#÷ .r+   r   Ú
ResamplingÚnearestÚbilinearÚbicubicÚboxÚhammingÚlanczosc                 ó   — t         |    S r2   )Ú_str_to_pil_interpolation©Úmode_strs    r)   r   r   „   s   € Ü$ XÑ.Ð.r+   c                 ó2   — t         r	t        |    S t        |    S r2   )Úhas_interpolation_modeÚ_str_to_torch_interpolationr_   r`   s    r)   r   r   ˆ   s   € ÝÜ*¨8Ñ4Ð4ä(¨Ñ2Ð2r+   c                 ó2   — t         r	t        |    S t        |    S r2   )rc   Ú_torch_interpolation_to_strÚ_pil_interpolation_to_str)Úmodes    r)   r   r   �   s   € ÝÜ*¨4Ñ0Ð0ä(¨Ñ.Ð.r+   c                 óè   — t        | t        j                  «      rt        | «      t        | «      fS t        | t        «      rt        | «      dk(  r
| d   | d   fS t        | «      dk7  rt        |«      ‚| S )Né   r   r   )rD   ÚnumbersÚNumberÚintr   ÚlenÚ
ValueError)ÚsizeÚ	error_msgs     r)   Ú_setup_sizerr   ™   se   € Ü�$œŸ™Ô'Ü�4‹yœ#˜d›)Ð#Ð#ä�$œÔ!¤c¨$£i°1¢nØ�A‰w˜˜Q™ÐÐä
ˆ4ƒy�A‚~Ü˜Ó#Ð#à€Kr+   c                   ó:   — e Zd ZdZ	 	 	 dd„Zed„ «       Zd„ Zd„ Zy)r   aY  Crop the given PIL Image to random size and aspect ratio with random interpolation.

    A crop of random size (default: of 0.08 to 1.0) of the original size and a random
    aspect ratio (default: of 3/4 to 4/3) of the original aspect ratio is made. This crop
    is finally resized to given size.
    This is popularly used to train the Inception networks.

    Args:
        size: expected output size of each edge
        scale: range of size of the origin size cropped
        ratio: range of aspect ratio of the origin aspect ratio cropped
        interpolation: Default: PIL.Image.BILINEAR
    c                 ó  — t        |t        t        f«      rt        |«      | _        n	||f| _        |d   |d   kD  s|d   |d   kD  rt	        j
                  d«       |dk(  rt        | _        nt        |«      | _        || _	        || _
        y )Nr   rj   z"range should be of kind (min, max)Úrandom)rD   ÚlistÚtuplerp   ÚwarningsÚwarnÚ_RANDOM_INTERPOLATIONÚinterpolationr   ÚscaleÚratio)r&   rp   r|   r}   r{   s        r)   r3   z*RandomResizedCropAndInterpolation.__init__µ   s   € ô �dœT¤5˜MÔ*Ü˜d›ˆD�Ià˜t˜ˆDŒIØ�!‰H�u˜Q‘xÒ U¨1¡X°°a±Ò%8Ü�M‰MÐ>Ô?à˜HÒ$Ü!6ˆDÕä!3°MÓ!BˆDÔØˆŒ
Øˆ�
r+   c           	      óf  — t        j                  | «      \  }}||z  }t        d«      D �]  }t        j                  |Ž |z  }t        j                  |d   «      t        j                  |d   «      f}t        j                  t        j                  |Ž «      }	t        t        t        j                  ||	z  «      «      «      }
t        t        t        j                  ||	z  «      «      «      }|
|k  sŒÈ||k  sŒÎt        j                  d||z
  «      }t        j                  d||
z
  «      }||||
fc S  ||z  }|t        |«      k  r#|}
t        t        |
t        |«      z  «      «      }n5|t        |«      kD  r#|}t        t        |t        |«      z  «      «      }
n|}
|}||z
  dz  }||
z
  dz  }||||
fS )a‘  Get parameters for ``crop`` for a random sized crop.

        Args:
            img (PIL Image): Image to be cropped.
            scale (tuple): range of size of the origin size cropped
            ratio (tuple): range of aspect ratio of the origin aspect ratio cropped

        Returns:
            tuple: params (i, j, h, w) to be passed to ``crop`` for a random
                sized crop.
        é
   r   rj   r   )r5   Úget_image_sizeÚrangeru   ÚuniformÚmathÚlogÚexprm   ÚroundÚsqrtÚrandintÚminÚmax)Úimgr|   r}   Úimg_wÚimg_hÚareaÚattemptÚtarget_areaÚ	log_ratioÚaspect_ratioÚtarget_wÚtarget_hÚiÚjÚin_ratios                  r)   Ú
get_paramsz,RandomResizedCropAndInterpolation.get_paramsÊ   s˜  € ô ×'Ñ'¨Ó,‰ˆˆuØ�u‰}ˆä˜R“yó 
	0ˆGÜ Ÿ.™.¨%Ð0°4Ñ7ˆKÜŸ™ %¨¡(Ó+¬T¯X©X°e¸A±hÓ-?Ð@ˆIÜŸ8™8¤F§N¡N°IÐ$>Ó?ˆLäœ5¤§¡¨;¸Ñ+EÓ!FÓGÓHˆHÜœ5¤§¡¨;¸Ñ+EÓ!FÓGÓHˆHØ˜5Ó  X°Ó%6Ü—N‘N 1 e¨hÑ&6Ó7�Ü—N‘N 1 e¨hÑ&6Ó7�Ø˜!˜X xÐ/Ò/ð
	0ð ˜5‘=ˆØ”c˜%“jÒ ØˆHÜœ5 ¬C°«JÑ!6Ó7Ó8‰HØœ˜E›
Ò"ØˆHÜœ5 ¬C°«JÑ!6Ó7Ó8‰HàˆHØˆHØ�XÑ !Ñ#ˆØ�XÑ !Ñ#ˆØ�!�X˜xÐ'Ð'r+   c           	      ó<  — | j                  || j                  | j                  «      \  }}}}t        | j                  t
        t        f«      r t        j                  | j                  «      }n| j                  }t        j                  |||||| j                  |«      S )z¢
        Args:
            img (PIL Image): Image to be cropped and resized.

        Returns:
            PIL Image: Randomly cropped and resized image.
        )r˜   r|   r}   rD   r{   rw   rv   ru   Úchoicer5   Úresized_croprp   )r&   r‹   r•   r–   ÚhÚwr{   s          r)   r*   z*RandomResizedCropAndInterpolation.__call__õ   sx   € ð —_‘_ S¨$¯*©*°d·j±jÓA‰
ˆˆ1ˆa�Ü�d×(Ñ(¬5´$¨-Ô8Ü"ŸM™M¨$×*<Ñ*<Ó=‰Mà ×.Ñ.ˆMÜ�~‰~˜c 1 a¨¨A¨t¯y©y¸-ÓHÐHr+   c                 ó$  — t        | j                  t        t        f«      r3dj	                  | j                  D �cg c]  }t        |«      ‘Œ c}«      }nt        | j                  «      }| j                  j                  dj                  | j                  «      z   }|dj                  t        d„ | j                  D «       «      «      z  }|dj                  t        d„ | j                  D «       «      «      z  }|dj                  |«      z  }|S c c}w )Nú ú	(size={0}z, scale={0}c              3   ó4   K  — | ]  }t        |d «      –— Œ y­w©é   N©r†   )Ú.0Úss     r)   ú	<genexpr>z=RandomResizedCropAndInterpolation.__repr__.<locals>.<genexpr>
  ó   è ø€ Ò3TÀA´E¸!¸Q·KÑ3Tùó   ‚z, ratio={0}c              3   ó4   K  — | ]  }t        |d «      –— Œ y­wr¢   r¤   )r¥   Úrs     r)   r§   z=RandomResizedCropAndInterpolation.__repr__.<locals>.<genexpr>  r¨   r©   z, interpolation={0}))rD   r{   rw   rv   Újoinr   rA   r,   Úformatrp   r|   r}   ©r&   ÚxÚinterpolate_strÚformat_strings       r)   rM   z*RandomResizedCropAndInterpolation.__repr__  sØ   € Ü�d×(Ñ(¬5´$¨-Ô8Ø!Ÿh™hÀt×GYÑGYÖ'ZÀ!Ô(:¸1Õ(=Ò'ZÓ[‰Oä0°×1CÑ1CÓDˆOØŸ™×/Ñ/°+×2DÑ2DÀTÇYÁYÓ2OÑOˆØ˜×-Ñ-¬eÑ3TÈÏÉÔ3TÓ.TÓUÑUˆØ˜×-Ñ-¬eÑ3TÈÏÉÔ3TÓ.TÓUÑUˆØÐ/×6Ñ6°ÓGÑGˆØÐùò ([s   ºDN))g{®Gáz´?ç      ð?)g      è?gUUUUUUõ?rY   ©	r,   r-   r.   r8   r3   Ústaticmethodr˜   r*   rM   r/   r+   r)   r   r   ¦   s7   „ ñð" Ø$Ø$óð* ñ((ó ð((òTIó	r+   r   r‹   Úoutput_sizeÚfillÚpadding_moder<   c                 óþ  — t        |«      }|\  }}t        j                  | «      \  }}}||kD  s||kD  r~||kD  r||z
  dz  nd||kD  r||z
  dz  nd||kD  r||z
  dz   dz  nd||kD  r||z
  dz   dz  ndg}	t        j                  | |	||¬«      } t        j                  | «      \  }}}||k(  r||k(  r| S t	        t        ||z
  dz  «      «      }
t	        t        ||z
  dz  «      «      }t        j                  | |
|||«      S )ak  Center crops and/or pads the given image.

    If the image is torch Tensor, it is expected
    to have [..., H, W] shape, where ... means an arbitrary number of leading dimensions.
    If image size is smaller than output size along any edge, image is padded with 0 and then center cropped.

    Args:
        img (PIL Image or Tensor): Image to be cropped.
        output_size (sequence or int): (height, width) of the crop box. If int or sequence with single int,
            it is used for both directions.
        fill (int, Tuple[int]): Padding color

    Returns:
        PIL Image or Tensor: Cropped image.
    r   r   rj   ©r¶   r·   g       @)rr   r5   Úget_dimensionsÚpadrm   r†   Úcrop)r‹   rµ   r¶   r·   Úcrop_heightÚ
crop_widthÚ_Úimage_heightÚimage_widthÚpadding_ltrbÚcrop_topÚ	crop_lefts               r)   r   r     s4  € ô* ˜kÓ*€KØ)Ñ€K�Ü#$×#3Ñ#3°CÓ#8Ñ €A€|�[à�KÒ ;°Ò#=à/9¸KÒ/GˆZ˜+Ñ%¨!Ò+ÈQØ1<¸|Ò1Kˆ[˜<Ñ'¨AÒ-ÐQRØ3=ÀÒ3KˆZ˜+Ñ%¨Ñ)¨aÒ/ÐQRØ5@À<Ò5Oˆ[˜<Ñ'¨!Ñ+°Ò1ÐUVð	
ˆô �e‰e�C˜¨D¸|ÔLˆÜ'(×'7Ñ'7¸Ó'<Ñ$ˆˆ<˜Ø˜Ò$¨¸Ò)DØˆJä”5˜,¨Ñ4¸Ñ;Ó<Ó=€HÜ”E˜;¨Ñ3°sÑ:Ó;Ó<€IÜ�6‰6�#�x ¨K¸ÓDÐDr+   c            
       ón   ‡ — e Zd ZdZ	 	 d	deeee   f   deeeeeef   f   defˆ fd„Z	d„ Z
defd„Zˆ xZS )
r   a/  Crops the given image at the center.
    If the image is torch Tensor, it is expected
    to have [..., H, W] shape, where ... means an arbitrary number of leading dimensions.
    If image size is smaller than output size along any edge, image is padded with 0 and then center cropped.

    Args:
        size (sequence or int): Desired output size of the crop. If size is an
            int instead of sequence like (h, w), a square crop (size, size) is
            made. If provided a sequence of length 1, it will be interpreted as (size[0], size[0]).
    rp   r¶   r·   c                 ó^   •— t         ‰| �  «        t        |«      | _        || _        || _        y r2   ©r?   r3   rr   rp   r¶   r·   ©r&   rp   r¶   r·   rA   s       €r)   r3   zCenterCropOrPad.__init__F  ó+   ø€ ô 	‰ÑÔÜ Ó%ˆŒ	ØˆŒ	Ø(ˆÕr+   c                 ó\   — t        || j                  | j                  | j                  ¬«      S )ú•
        Args:
            img (PIL Image or Tensor): Image to be cropped.

        Returns:
            PIL Image or Tensor: Cropped image.
        r¹   )r   rp   r¶   r·   )r&   r‹   s     r)   ÚforwardzCenterCropOrPad.forwardQ  s#   € ô " # t§y¡y°t·y±yÈt×O`ÑO`ÔaÐar+   r<   c                 óN   — | j                   j                  › d| j                  › d�S ©Nz(size=ú)©rA   r,   rp   rL   s    r)   rM   zCenterCropOrPad.__repr__[  ó$   € Ø—.‘.×)Ñ)Ð*¨&°·±°¸1Ð=Ð=r+   ©r   Úconstant)r,   r-   r.   r8   r   rm   r   r   rP   r3   rÌ   rM   rQ   rR   s   @r)   r   r   :  se   ø„ ñ	ð 67Ø *ñ		)à˜˜T #™Y˜Ñ'ð	)ð ˜˜U 3¨¨S =Ñ1Ð1Ñ2ð	)ð õ		)òbð>˜#÷ >r+   r   ÚtopÚleftÚheightÚwidthc           
      óÌ  — t        j                  | «      \  }}}	||z   }
||z   }|dk  s|dk  s
|
|	kD  s||kD  r}t        | t        d|
«      z   d«      t        | t        d|«      z   d«      t        |
t        |	|«      z
  d«      t        |t        ||«      z
  d«      g}t        j                  | |||¬«      } t        |d«      }t        |d«      }t        j
                  | ||||«      S )z[ Crops and/or pads image to meet target size, with control over fill and padding_mode.
    r   r¹   )r5   rº   rŠ   r‰   r»   r¼   )r‹   rÔ   rÕ   rÖ   r×   r¶   r·   r¿   rÀ   rÁ   ÚrightÚbottomrÂ   s                r)   r   r   _  sì   € ô $%×#3Ñ#3°CÓ#8Ñ €A€|�[Ø�5‰L€EØ�6‰\€FØˆa‚x�3˜’7˜e kÒ1°V¸lÒ5Jä��œ˜A˜u›Ñ% qÓ)Ü��”s˜1˜f“~Ñ% qÓ)Ü�œ˜K¨Ó.Ñ.°Ó2Ü�œ˜\¨3Ó/Ñ/°Ó3ð	
ˆô �e‰e�C˜¨D¸|ÔLˆä
ˆc�1‹+€CÜˆt�Q‹<€DÜ�6‰6�#�s˜D &¨%Ó0Ð0r+   c            
       ó~   ‡ — e Zd ZdZ	 	 d
deeee   f   deeeeeef   f   defˆ fd„Z	e
d„ «       Zd„ Zdefd	„Zˆ xZS )r   zP Crop and/or pad image with random placement within the crop or pad margin.
    rp   r¶   r·   c                 ó^   •— t         ‰| �  «        t        |«      | _        || _        || _        y r2   rÇ   rÈ   s       €r)   r3   zRandomCropOrPad.__init__  rÉ   r+   c           
      óL  — t        j                  | «      \  }}}||d   z
  }||d   z
  }t        t        j                  t        j                  dt        |«      «      |«      «      }t        t        j                  t        j                  dt        |«      «      |«      «      }||fS )Nr   rj   )r5   rº   rm   rƒ   Úcopysignru   rˆ   Úabs)	r‹   rp   r¿   rÀ   rÁ   Údelta_heightÚdelta_widthrÔ   rÕ   s	            r)   r˜   zRandomCropOrPad.get_paramsŠ  s‰   € ä'(×'7Ñ'7¸Ó'<Ñ$ˆˆ<˜Ø# d¨1¡gÑ-ˆØ! D¨¡GÑ+ˆÜ”$—-‘-¤§¡¨q´#°lÓ2CÓ DÀlÓSÓTˆÜ”4—=‘=¤§¡°´3°{Ó3CÓ!DÀkÓRÓSˆØ�DˆyÐr+   c           	      óÀ   — | j                  || j                  «      \  }}t        |||| j                  d   | j                  d   | j                  | j                  ¬«      S )rË   r   rj   )rÔ   rÕ   rÖ   r×   r¶   r·   )r˜   rp   r   r¶   r·   )r&   r‹   rÔ   rÕ   s       r)   rÌ   zRandomCropOrPad.forward“  sX   € ð —O‘O C¨¯©Ó3‰	ˆˆTÜØØØØ—9‘9˜Q‘<Ø—)‘)˜A‘,Ø—‘Ø×*Ñ*ô
ð 	
r+   r<   c                 óN   — | j                   j                  › d| j                  › d�S rÎ   rÐ   rL   s    r)   rM   zRandomCropOrPad.__repr__¦  rÑ   r+   rÒ   )r,   r-   r.   r8   r   rm   r   r   rP   r3   r´   r˜   rÌ   rM   rQ   rR   s   @r)   r   r   {  sx   ø„ ñð 67Ø *ñ		)à˜˜T #™Y˜Ñ'ð	)ð ˜˜U 3¨¨S =Ñ1Ð1Ñ2ð	)ð õ		)ð ñó ðò
ð&>˜#÷ >r+   r   c                   ó*   — e Zd Zdd„Zed„ «       Zd„ Zy)r   c                 ó    — || _         || _        y r2   )Ú
input_sizer¶   )r&   ræ   r¶   s      r)   r3   zRandomPad.__init__«  s   € Ø$ˆŒØˆ�	r+   c                 óò   — t        j                  | «      \  }}t        |d   |z
  d«      }t        |d   |z
  d«      }t        j                  d|«      }t        j                  d|«      }||z
  }||z
  }	||||	fS )Nrj   r   )r5   r€   rŠ   ru   rˆ   )
r‹   ræ   r×   rÖ   rá   rà   Úpad_leftÚpad_topÚ	pad_rightÚ
pad_bottoms
             r)   r˜   zRandomPad.get_params¯  sƒ   € ä×(Ñ(¨Ó-‰ˆˆvÜ˜* Q™-¨%Ñ/°Ó3ˆÜ˜: a™=¨6Ñ1°1Ó5ˆÜ—>‘> ! [Ó1ˆÜ—.‘.  LÓ1ˆØ (Ñ*ˆ	Ø! GÑ+ˆ
Ø˜ )¨ZÐ7Ð7r+   c                 ó€   — | j                  || j                  «      }t        j                  ||| j                  «      }|S r2   )r˜   ræ   r5   r»   r¶   )r&   r‹   Úpaddings      r)   r*   zRandomPad.__call__º  s1   € Ø—/‘/ # t§¡Ó7ˆÜ�e‰e�C˜ $§)¡)Ó,ˆØˆ
r+   N)r   )r,   r-   r.   r3   r´   r˜   r*   r/   r+   r)   r   r   ª  s    „ óð ñ8ó ð8ór+   r   c                   óN   — e Zd ZdZ	 	 	 	 	 	 	 dd„Ze	 	 	 	 	 dd„«       Zd„ Zd„ Zy)	r   z" Resize and Keep Aspect Ratio
    c	                 ó  — t        |t        t        f«      rt        |«      | _        n	||f| _        |dk(  rt        | _        nt        |«      | _        t        |«      | _        || _	        || _
        || _        || _        || _        y)zù

        Args:
            size:
            longest:
            interpolation:
            random_scale_prob:
            random_scale_range:
            random_scale_area:
            random_aspect_prob:
            random_aspect_range:
        ru   N)rD   rv   rw   rp   rz   r{   r   ÚfloatÚlongestÚrandom_scale_probÚrandom_scale_rangeÚrandom_scale_areaÚrandom_aspect_probÚrandom_aspect_range)	r&   rp   rñ   r{   rò   ró   rô   rõ   rö   s	            r)   r3   zResizeKeepRatio.__init__Ä  sx   € ô. �dœT¤5˜MÔ*Ü˜d›ˆD�Ià˜t˜ˆDŒIØ˜HÒ$Ü!6ˆDÕä!3°MÓ!BˆDÔÜ˜W“~ˆŒØ!2ˆÔØ"4ˆÔØ!2ˆÔØ"4ˆÔØ#6ˆÕ r+   c                 óæ  — t        j                  | «      dd x\  }}	}
|\  }}||z  }|	|z  }t        ||«      |z  t        ||«      d|z
  z  z   }|dkD  rRt	        j                  «       |k  r;t	        j
                  |d   |d   «      }|rdt        j                  |«      z  }||f}nd}|dkD  r‘t	        j                  «       |k  rzt        j                  |d   «      t        j                  |d   «      f}t        j                  t	        j
                  |Ž «      }t        j                  |«      }|d   |z  |d   |z  f}t        |
|«      D ��cg c]  \  }}t        ||z  |z  «      ‘Œ }}}|S c c}}w )zGet parameters
        rj   Nr²   r   )r²   r²   )r5   rº   rŠ   r‰   ru   r‚   rƒ   r‡   r„   r…   Úzipr†   )r‹   Útarget_sizerñ   rò   ró   rô   rõ   rö   r�   rŒ   Úimg_sizer”   r“   Úratio_hÚratio_wr}   Úratio_factorÚ
log_aspectÚaspect_factorr¯   Úfrp   s                         r)   r˜   zResizeKeepRatio.get_paramsê  s{  € ô #$×"2Ñ"2°3Ó"7¸¸Ð";Ð;‰ˆˆu�xØ(Ñˆ�(Ø˜(Ñ"ˆØ˜(Ñ"ˆÜ�G˜WÓ%¨Ñ/´#°g¸wÓ2GÈ2ÐPWÉ<Ñ2XÑXˆà˜qÒ ¤V§]¡]£_Ð7HÒ%HÜ!Ÿ>™>Ð*<¸QÑ*?ÐASÐTUÑAVÓWˆLÙ ð  "¤D§I¡I¨lÓ$;Ñ;�Ø(¨,Ð7‰Là#ˆLà Ò!¤f§m¡m£oÐ8JÒ&JÜŸ(™(Ð#6°qÑ#9Ó:¼D¿H¹HÐEXÐYZÑE[Ó<\Ð]ˆJÜ ŸH™H¤V§^¡^°ZÐ%@ÓAˆMÜ ŸI™I mÓ4ˆMð )¨™O¨mÑ;¸\È!¹_È}Ñ=\Ð]ˆLä14°X¸|Ó1L×M©¨¨A”�a˜!‘e˜e‘mÕ$ÐMˆÑMØˆùó Ns   ÅE-c           
      óˆ  — | j                  || j                  | j                  | j                  | j                  | j
                  | j                  | j                  «      }t        | j                  t        t        f«      r t        j                  | j                  «      }n| j                  }t        j                  |||«      }|S )zÏ
        Args:
            img (PIL Image): Image to be cropped and resized.

        Returns:
            PIL Image: Resized, padded to at least target size, possibly cropped to exactly target size
        )r˜   rp   rñ   rò   ró   rô   rõ   rö   rD   r{   rw   rv   ru   rš   r5   Úresize)r&   r‹   rp   r{   s       r)   r*   zResizeKeepRatio.__call__  s—   € ð �‰Ø�—‘˜DŸL™LØ×"Ñ" D×$;Ñ$;¸T×=SÑ=SØ×#Ñ# T×%=Ñ%=ó
ˆô
 �d×(Ñ(¬5´$¨-Ô8Ü"ŸM™M¨$×*<Ñ*<Ó=‰Mà ×.Ñ.ˆMÜ�h‰h�s˜D -Ó0ˆØˆ
r+   c                 óf  — t        | j                  t        t        f«      r3dj	                  | j                  D �cg c]  }t        |«      ‘Œ c}«      }nt        | j                  «      }| j                  j                  dj                  | j                  «      z   }|d|› �z  }|d| j                  d›�z  }|d| j                  d›�z  }|d| j                  d   d›d	| j                  d
   d›d�z  }|d| j                  d›�z  }|d| j                  d   d›d	| j                  d
   d›d�z  }|S c c}w )NrŸ   r    z, interpolation=z
, longest=z.3fz, random_scale_prob=z, random_scale_range=(r   z, rj   rÏ   z, random_aspect_prob=z, random_aspect_range=(z)))rD   r{   rw   rv   r¬   r   rA   r,   r­   rp   rñ   rò   ró   rõ   rö   r®   s       r)   rM   zResizeKeepRatio.__repr__&  s[  € Ü�d×(Ñ(¬5´$¨-Ô8Ø!Ÿh™hÀt×GYÑGYÖ'ZÀ!Ô(:¸1Õ(=Ò'ZÓ[‰Oä0°×1CÑ1CÓDˆOØŸ™×/Ñ/°+×2DÑ2DÀTÇYÁYÓ2OÑOˆØÐ+¨OÐ+<Ð=Ñ=ˆØ˜: d§l¡l°3Ð%7Ð8Ñ8ˆØÐ/°×0FÑ0FÀsÐ/KÐLÑLˆØÐ1Ø ×3Ñ3°AÑ6°sÐ;¸2¸d×>UÑ>UÐVWÑ>XÐY\Ð=]Ð]^ð`ñ 	`ˆàÐ0°×1HÑ1HÈÐ0MÐNÑNˆØÐ2Ø ×4Ñ4°QÑ7¸Ð<¸B¸t×?WÑ?WÐXYÑ?ZÐ[^Ð>_Ð_aðcñ 	cˆàÐùò ([s   ºD.N)ç        rY   r  )g333333ë?gÍÌÌÌÌÌð?Fr  ©gÍÌÌÌÌÌì?gÃõ(\�Âñ?)r  )r²   gHáz®Gõ?Fr  r  r³   r/   r+   r)   r   r   À  sT   „ ñð Ø$Ø Ø+Ø#Ø!Ø +ó$7ðL ð
 !Ø*Ø#Ø!Ø +ò%ó ð%òNó(r+   r   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )r   Úborder_sizec                 ó0   •— t         ‰| �  «        || _        y r2   )r?   r3   r  )r&   r  rA   s     €r)   r3   zTrimBorder.__init__9  s   ø€ ô 	‰ÑÔØ&ˆÕr+   c                 ó   — t        j                  |«      \  }}| j                  x}}t        ||«      }t        ||«      }t	        d|d| j                  z  z
  «      }t	        d|d| j                  z  z
  «      }t        j
                  |||||«      S )Nr   r   )r5   r€   r  r‰   rŠ   r¼   )r&   r‹   r�   rœ   rÔ   rÕ   rÖ   r×   s           r)   rÌ   zTrimBorder.forward@  s‹   € Ü×Ñ Ó$‰ˆˆ1Ø×%Ñ%Ð%ˆˆdÜ�#�q‹kˆÜ�4˜‹|ˆÜ�Q˜˜A × 0Ñ 0Ñ0Ñ0Ó1ˆÜ�A�q˜1˜t×/Ñ/Ñ/Ñ/Ó0ˆÜ�v‰v�c˜3  f¨eÓ4Ð4r+   )r,   r-   r.   rm   r3   rÌ   rQ   rR   s   @r)   r   r   7  s   ø„ ð'àõ'ö5r+   r   )z3Please provide only two dimensions (h, w) for size.rÒ   );rƒ   rk   ru   rx   Útypingr   r   r   r   r9   Útorchvision.transformsÚ
transformsÚ!torchvision.transforms.functionalÚ
functionalr5   r   rc   ÚImportErrorÚPILr   Únumpyr    Ú__all__r	   r
   r   r   ÚhasattrrW   ÚNEARESTÚBILINEARÚBICUBICÚBOXÚHAMMINGÚLANCZOSrg   Úitemsr_   rf   rd   Ú_pil_interpolation_to_torchr   r   r   rz   rr   r   rE   rm   rP   r   ÚnnÚModuler   r   r   r   r   r   )ÚaÚbs   00r)   ú<module>r      sc  ðÛ Û Û Û ß /Ó /ã Ý +ß -Ð -ð#ÝCØ!Ðõ Û ò€÷ñ ÷=ñ =ô.�J×'Ñ'ô .÷..ñ .ñ8 ˆ5�,Ôà×Ñ× Ñ  )Ø×Ñ×!Ñ! :Ø×Ñ× Ñ  )Ø×Ñ×Ñ˜eØ×Ñ× Ñ  )Ø×Ñ× Ñ  )ð!Ñð 	�‰�yØ�‰˜
Ø�‰�yØ�	‰	�5Ø�‰�yØ�‰�yð!Ðð /H×.MÑ.MÓ.O×P¡d a¨˜Q ™TÓPÐ ñ à×!Ñ! 9Ø×"Ñ" JØ×!Ñ! 9Ø×Ñ˜uØ×!Ñ! 9Ø×!Ñ! 9ð#Ðð 5P×4UÑ4UÓ4W×"X©D¨A¨q 1 a¡4Ó"XÑà"$ÐØ"$Ðò/ò3ò/ñ ,¨JÓ7Ñ9KÈIÓ9VÐWÐ ó
÷gñ gðZ 23Ø&ñ	'EØ�\‰\ð'Eà˜3  S¡	˜>Ñ*ð'Eð �C˜˜s C¨˜}Ñ-Ð-Ñ.ð'Eð ð	'Eð
 ‡\�\ó'EôT">�e—h‘h—o‘oô ">ðV 23Ø&ñ1Ø�\‰\ð1àð1ð ð1ð ð	1ð
 ð1ð �C˜˜s C¨˜}Ñ-Ð-Ñ.ð1ð ð1ð ‡\�\ó1ô8,>�e—h‘h—o‘oô ,>÷^ñ ÷,tñ tôn5�—‘—‘õ 5øðU ò #Ø"Óð#üóJ Qùó #Ys   ±K4 Å'LÇLË4K?Ë>K?