ó
    qyüiØY  ã                   óD  • S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJrJrJrJrJr  SS	KJrJr  SS
KJrJrJrJr  \R8                  " \5      rS\\\      \\   -  \-  S\\\      4S jr  " S S\SS9r! " S S\	5      r"\ " S S\5      5       r#S/r$g)zImage processor class for Fuyu.é    N)Ú
functionalé   )ÚTorchvisionBackend)ÚBatchFeatureÚget_size_dict)Úgroup_images_by_shapeÚreorder_images)Ú
ImageInputÚPILImageResamplingÚSizeDictÚis_valid_imageÚmake_list_of_images)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚauto_docstringÚloggingÚrequires_backendsÚimagesÚreturnc                 ó  • [        U 5      (       a  U //$ [        U [        5      (       a  [        S U  5       5      (       a  U $ [        U [        5      (       a  U  Vs/ s H  n[	        U5      PM     sn$ [        S5      es  snf )Nc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7f©N)Ú
isinstanceÚlist)Ú.0Úimages     Úk/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/models/fuyu/image_processing_fuyu.pyÚ	<genexpr>Ú.make_list_of_list_of_images.<locals>.<genexpr>1   s   é € Ð'TÊVÀE¬
°5¼$×(?Ð(?ÊVùs   ‚zHimages must be a list of list of images or a list of images or an image.)r   r   r   Úallr   Ú
ValueError)r   r   s     r   Úmake_list_of_list_of_imagesr#   +   su   € ô �f×ÑØ�ˆzÐä�&œ$×Ñ¤CÑ'TÉVÓ'T×$TÑ$TØˆä�&œ$×ÑÙ8>Ó?º¨uÔ# EÖ*¹Ñ?Ð?ä
Ð_Ó
`Ð`ùò @s   ÁA?c                   ó>   • \ rS rSr% Sr\S-  \S'   \\S'   \\S'   Sr	g)ÚFuyuImagesKwargsé:   a�  
patch_size (`dict[str, int]`, *optional*, defaults to `{"height": 30, "width": 30}`):
    Dictionary in the format `{"height": int, "width": int}` specifying the size of the patches.
padding_value (`float`, *optional*, defaults to 1.0):
    The value to pad the image with.
padding_mode (`str`, *optional*, defaults to "constant"):
    The padding mode to use when padding the image.
NÚ
patch_sizeÚpadding_valueÚpadding_mode© )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__ÚfloatÚstrÚ__static_attributes__r*   ó    r   r%   r%   :   s   ‡ ñð ˜4‘ÓØÓØÖr4   r%   F)Útotalc                   ó@   • \ rS rSrSrSS\\-  S-  4S jjrS	S jrSr	g)
ÚFuyuBatchFeatureéI   z˜
BatchFeature class for Fuyu image processor and processor.

The outputs dictionary from the processors contains a mix of tensors and lists of tensors.
NÚtensor_typec                 óÞ  ^^^	^
• Uc  U $ U R                  US9u  m	mUU	4S jmUU
4S jnU R                  5        HŸ  u  m
n[        U[        5      (       aG  [        US   [        5      (       a/  U VVs/ s H  oU Vs/ s H
  oc" U5      PM     snPM     snnU T
'   Mb  [        U[        5      (       a  U Vs/ s H
  oc" U5      PM     snU T
'   M”  U" U5      U T
'   M¡     U $ s  snf s  snnf s  snf )a  
Convert the inner content to tensors.

Args:
    tensor_type (`str` or [`~utils.TensorType`], *optional*):
        The type of tensors to use. If `str`, should be one of the values of the enum [`~utils.TensorType`]. If
        `None`, no modification is done.
)r9   c                 ó2   >• T" U 5      (       a  U $ T" U 5      $ r   r*   )ÚelemÚ	as_tensorÚ	is_tensors    €€r   Ú_convert_tensorÚ<FuyuBatchFeature.convert_to_tensors.<locals>._convert_tensor^   s   ø€ Ù˜�‰Ø�Ù˜T“?Ð"r4   c                 óX   >•  T" U 5      $ !   TS:X  a  [        S5      e[        S5      e= f)NÚoverflowing_valueszKUnable to create tensor returning overflowing values of different lengths. zUnable to create tensor, you should probably activate padding with 'padding=True' to have batched tensors with the same length.)r"   )r<   r?   Úkeys    €€r   Ú_safe_convert_tensorÚAFuyuBatchFeature.convert_to_tensors.<locals>._safe_convert_tensorc   sB   ø€ ðÙ& tÓ,Ð,øðØÐ.Ó.Ü$Ð%rÓsÐsÜ ðXóð ús   ƒ ‹)r   )Ú_get_is_as_tensor_fnsÚitemsr   r   )Úselfr9   ÚkwargsrD   ÚvalueÚelemsr<   r?   r=   r>   rC   s          @@@@r   Úconvert_to_tensorsÚ#FuyuBatchFeature.convert_to_tensorsP   sæ   û€ ð ÑØˆKà#×9Ñ9ÀkÐ9ÐRÑˆ	�9ö	#ö
		ð Ÿ*™*ž,‰JˆC�Ü˜%¤×&Ñ&¬:°e¸A±hÄ×+EÑ+EáY^Ô_ÒY^ÐPUÀUÓKÂU¸TÐ2°4Ö8ÁUÔKÑY^Ò_��S“	Ü˜E¤4×(Ñ(áDIÓJÂE¸DÐ1°$Ö7ÁEÑJ��S“	ñ 1°Ó7��S“	ñ 'ð ˆùò LùÓ_ùò Ks   Á2	C$Á;CÂC$Â5C*ÃC$c           
      óø  ^^^^• [        U S/5        SSKmSSKJnJn  0 nTR                  S5      mTct  [        T5      S:”  ae  TS   nU" U5      (       a  OR[        U[        5      (       d"  U" U5      (       d  [        U[        5      (       a  UmO[        S[        U5       S35      eUUUU4S	 jnU R                  5        H¥  u  p‰[        U	[        5      (       aP  [        U	S   [        5      (       a8  / n
U	 H*  nU
R                  U Vs/ s H
  oÇ" U5      PM     sn5        M,     X¥U'   Mj  [        U	[        5      (       a  U	 Vs/ s H
  oÇ" U5      PM     snXX'   M›  U" U	5      XX'   M§     XPl        U $ s  snf s  snf )
a¼  
Send all values to device by calling `v.to(*args, **kwargs)` (PyTorch only). This should support casting in
different `dtypes` and sending the `BatchFeature` to a different `device`.

Args:
    args (`Tuple`):
        Will be passed to the `to(...)` function of the tensors.
    kwargs (`Dict`, *optional*):
        Will be passed to the `to(...)` function of the tensors.

Returns:
    [`BatchFeature`]: The same instance after modification.
Útorchr   Nr   )Úis_torch_deviceÚis_torch_dtypeÚdevicez*Attempting to cast a BatchFeature to type z. This is not supported.c                 ó~   >• TR                   " U 5      (       a  U R                  " T0 TD6$ Tb  U R                  TS9$ U $ )N)rR   )Úis_floating_pointÚto)r<   ÚargsrR   rI   rO   s    €€€€r   Ú_toÚ FuyuBatchFeature.to.<locals>._to�   sD   ø€ à×&Ò& t×,Ñ,à—w’w Ð/¨Ñ/Ð/ØÑ!Ø—w‘w f�wÐ-Ð-àˆKr4   )r   rO   ÚutilsrP   rQ   ÚgetÚlenr   r2   Úintr"   rG   r   ÚappendÚdata)rH   rV   rI   rP   rQ   Únew_dataÚargrW   ÚkÚvÚnew_vrK   r<   rR   rO   s    ``          @@r   rU   ÚFuyuBatchFeature.to{   sN  û€ ô 	˜$  	Ô*Ûç<àˆØ—‘˜HÓ%ˆà‰>œc $›i¨!›mà�q‘'ˆCÙ˜c×"Ñ"àÜ˜C¤×%Ñ%©¸×)=Ñ)=ÄÈCÔQT×AUÑAUØ‘ô !Ð#MÌcÐRUËhÈZÐWoÐ!pÓqÐq÷	ð 	ð —J‘J–L‰DˆAÜ˜!œT×"Ñ"¤z°!°A±$¼×'=Ñ'=à�Û�EØ—L‘L¹Ó!>º° # d¦)¹Ñ!>Ö?ñ à#˜“Ü˜Aœt×$Ñ$á56Ó7²Q¨T˜s 4žy±QÑ7�“á! !›f�“ñ !ð Œ	Øˆùò "?ùò 8s   Ä	E2ÅE7©r^   r   )r   r   )
r+   r,   r-   r.   r/   r2   r   rL   rU   r3   r*   r4   r   r7   r7   I   s#   † ññ)¨c°JÑ.>ÀÑ.Eõ )÷V:r4   r7   c                   óÊ  ^ • \ rS rSrSrSSS.rSSS.r\R                  r	Sr
SrSrSrS	rS	rSrS
r/ SQr\rS\\   4U 4S jjr S5S\S\S\4S jjr  S6S\R6                  S\SSS\S\R6                  4
U 4S jjjrS\S   S\S\SSS\S\ S\S\ \\    -  S-  S\ \\    -  S-  S \S-  S!\ S-  S"\!S-  S#\S-  S$\!\"-  S-  S\#4S% jr$S7S&\S'\S(\S-  S\4S) jjr%S7S\R6                  S(\S-  S\R6                  4S* jjr& S7S+\R6                  S,\R6                  S-\R6                  S.\R6                  S/\S0\S1\S(\'\!\4   S-  S\#4S2 jjr( S7S(\'\!\4   \-  S-  S\'4U 4S3 jjjr)S4r*U =r+$ )8ÚFuyuImageProcessoré¸   Ti8  i€  ©ÚheightÚwidthé   g      ð?Úconstantg      à?gp?©r   Úimage_input_idsÚimage_patchesÚimage_patch_indices_per_batchÚ#image_patch_indices_per_subsequencerI   c                 ó&   >• [         TU ]  " S0 UD6  g )Nr*   )ÚsuperÚ__init__)rH   rI   Ú	__class__s     €r   ru   ÚFuyuImageProcessor.__init__Ï   s   ø€ Ü‰ÒÑ"˜6Ó"r4   r   Úexpected_ndimsr   c                 ó:   • U R                  U5      n[        U5      $ r   )Úfetch_imagesr#   )rH   r   rx   s      r   Ú_prepare_images_structureÚ,FuyuImageProcessor._prepare_images_structureÒ   s   € ð
 ×"Ñ" 6Ó*ˆÜ*¨6Ó2Ð2r4   Nr   ÚsizeÚresamplez7PILImageResampling | tvF.InterpolationMode | int | NoneÚ	antialiasc                 ó  >• Uc  [         R                  nUR                  SS u  pgUR                  UR                  p˜Xy::  a  Xh::  a  U$ X†-  n
X—-  n[        X«5      n[        Xl-  5      n[        X|-  5      n[        TU ]!  U[        XÞS9X4S9$ )av  
Resize an image to fit within `(size.height, size.width)` while maintaining aspect ratio.
Only resizes if the image is larger than the target size.
Args:
    image (`torch.Tensor`):
        Image to resize.
    size (`SizeDict`):
        Dictionary in the format `{"height": int, "width": int}` specifying the max size of the output image.
    resample (`PILImageResampling | tvF.InterpolationMode | int`, *optional*, defaults to `PILImageResampling.BILINEAR`):
        Resampling filter to use when resizing the image.
    antialias (`bool`, *optional*, defaults to `True`):
        Whether to apply antialiasing when resizing.
Néþÿÿÿri   )r~   r   )
r   ÚBILINEARÚshaperj   rk   Úminr\   rt   Úresizer   )rH   r   r}   r~   r   rI   Úimage_heightÚimage_widthÚtarget_heightÚtarget_widthÚheight_scale_factorÚwidth_scale_factorÚoptimal_scale_factorÚ
new_heightÚ	new_widthrv   s                  €r   r…   ÚFuyuImageProcessor.resizeÚ   s¢   ø€ ð* ÑÜ)×2Ñ2ˆHØ$)§K¡K°°Ð$4Ñ!ˆØ&*§k¡k°4·:±:�|àÓ&¨<Ó+HØˆLà+Ñ:ÐØ)Ñ7ÐÜ"Ð#6ÓKÐä˜Ñ<Ó=ˆ
Ü˜Ñ:Ó;ˆ	ä‰w‰~Ø”8 :Ñ?È(ð ð 
ð 	
r4   ztorch.TensorÚ	do_resizeÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdo_padr(   r)   Údisable_groupingÚreturn_tensorsc           	      ó   • U Vs/ s H  nU(       d  M  US   R                   SS  PM      nn[        XSS9u  nn0 nUR                  5        H"  u  nnU(       a  U R                  UX4S9nUUU'   M$     [	        UUSS9nU Vs/ s H  nU(       d  M  US   R                   SS  PM      nnU Vs/ s H	  nUS   /PM     nnU Vs/ s H	  nUS   /PM     nn[        UU5       VVs/ s H  u  nnUS   US   -  /PM     nnnU
(       a  U R                  UUUUUSS9n[        UUSS9u  nn0 nUR                  5        H  u  nnU R                  UXVXxU	5      nUUU'   M!     [	        UUSS9n [        U UUUS	.US
9$ s  snf s  snf s  snf s  snf s  snnf )Nr   r�   T)r—   Ú	is_nested)r   r}   r~   )rš   é   )Úpad_sizeÚ
fill_valuer)   r—   rš   )r   Úimage_unpadded_heightsÚimage_unpadded_widthsÚimage_scale_factors)r^   r9   )	rƒ   r   rG   r…   r	   ÚzipÚpadÚrescale_and_normalizer7   )!rH   r   r�   r}   r~   r‘   r’   r“   r”   r•   r–   r(   r)   r—   r˜   rI   Úbatch_imageÚoriginal_image_sizesÚgrouped_imagesÚgrouped_images_indexÚresized_images_groupedrƒ   Ústacked_imagesÚresized_imagesÚimage_sizesÚ
image_sizerž   rŸ   Úoriginal_sizeÚresized_sizer    Úprocessed_images_groupedÚprocessed_imagess!                                    r   Ú_preprocessÚFuyuImageProcessor._preprocess  s  € ñ& NTÓcÊV¸kÔWbÓ 9 ¨A¡× 4Ñ 4°R°SÓ 9ÉVÐÐcÜ/DØÀñ0
Ñ,ˆÐ,ð "$ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ÞØ!%§¡°>È Ð!`�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÐ`dÑeˆáDRÓbÂN°[ÔVaÓ0�{ 1‘~×+Ñ+¨B¨CÓ0ÁNˆÐbÙDOÓ!PÂK°j :¨a¡=£/ÁKÐÐ!PÙCNÓ OÂ;°Z *¨Q¡-£Á;ÐÐ Oô 03Ð3GÈÔ/Uô
â/UÑ+�˜|ð ˜!‰_˜}¨QÑ/Ñ/Ó0Ù/Uð 	ñ 
ö Ø!ŸX™XØØØ(Ø)Ø!1Øð &ð ˆNô 0EØÐ-=Èñ0
Ñ,ˆÐ,ð $&Ð Ø%3×%9Ñ%9Ö%;Ñ!ˆE�>à!×7Ñ7Ø 
¸LÐV_óˆNð /=Ð$ UÓ+ñ &<ô *Ð*BÐDXÐdhÑiÐäà*Ø*@Ø)>Ø':ñ	ð 'ñ
ð 	
ùòS  dùò cùÚ!PùÚ Oùó
s(   …E6”E6Â E;ÂE;Â+F ÃFÃ"F
r†   r‡   r'   c                 ó<  • UcA  [        U R                  [        5      (       a  U R                  nO[        S0 U R                  D6nUR                  UR                  pTX-  S:w  a  [        SU< SU 35      eX%-  S:w  a  [        SU< SU 35      eX-  nX%-  nXg-  nU$ )a:  
Calculate number of patches required to encode an image.
Args:
    image_height (`int`):
        Height of the image.
    image_width (`int`):
        Width of the image.
    patch_size (`SizeDict`, *optional*):
        Dictionary in the format `{"height": int, "width": int}` specifying the size of the patches.
r   zimage_height=z must be divisible by zimage_width=r*   )r   r'   r   rj   rk   r"   )	rH   r†   r‡   r'   Úpatch_heightÚpatch_widthÚnum_patches_per_dim_hÚnum_patches_per_dim_wÚnum_patchess	            r   Úget_num_patchesÚ"FuyuImageProcessor.get_num_patchesH  s°   € ð ÑÜ˜$Ÿ/™/¬8×4Ñ4Ø!Ÿ_™_‘
ä%Ñ8¨¯©Ñ8�
Ø$.×$5Ñ$5°z×7GÑ7G�kØÑ&¨!Ó+Ü  ™Ð.DÀ\ÀNÐSÓTÐTØÑ$¨Ó)Ü  ™~Ð-CÀKÀ=ÐQÓRÐRØ ,Ñ <ÐØ +Ñ :ÐØ+ÑCˆØÐr4   c                 óÞ  • [        U S/5        UcA  [        U R                  [        5      (       a  U R                  nO[        S0 U R                  D6nUR                  UR
                  pCUR                  u  pV  nUR                  SX35      nUR                  SXD5      n	U	R                  5       n	U	R                  XVSX45      n	U	R                  SSSSS5      n	U	R                  USXc-  U-  5      n	U	$ )	a?  
Convert an image into a tensor of patches using PyTorch's unfold operation.
Args:
    image (`torch.Tensor`):
        Image to convert. Shape: [batch, channels, height, width]
    patch_size (`SizeDict`, *optional*):
        Dictionary in the format `{"height": int, "width": int}` specifying the size of the patches.
rO   é   r   éÿÿÿÿr   é   r›   r*   )r   r   r'   r   rj   rk   rƒ   ÚunfoldÚ
contiguousÚviewÚpermuteÚreshape)
rH   r   r'   r´   rµ   Ú
batch_sizeÚchannelsÚ_Úunfolded_along_heightÚpatchess
             r   Úpatchify_imageÚ!FuyuImageProcessor.patchify_imageb  sÜ   € ô 	˜$  	Ô*ØÑÜ˜$Ÿ/™/¬8×4Ñ4Ø!Ÿ_™_‘
ä%Ñ8¨¯©Ñ8�
Ø$.×$5Ñ$5°z×7GÑ7G�kØ%*§[¡[Ñ"ˆ
˜a à %§¡¨Q°Ó KÐØ'×.Ñ.¨q°+ÓKˆØ×$Ñ$Ó&ˆà—,‘,˜z°R¸ÓSˆØ—/‘/ ! Q¨¨1¨aÓ0ˆØ—/‘/ *¨b°(Ñ2IÈKÑ2WÓXˆØˆr4   Úimage_inputÚimage_presentÚimage_unpadded_hÚimage_unpadded_wÚimage_placeholder_idÚimage_newline_idÚvariable_sizedc	           
      ó`  • [        U S/5        UcB  [        U R                  [        5      (       a  U R                  nO6[        S0 U R                  D6nO [        U[        5      (       d  [        S0 UD6nUR                  UR
                  p©/ n/ n/ n[        UR                  S   5       GHb  n/ n/ n[        UR                  S   5       GH  nX.U4   (       GaÎ  XU4   nUR                  S   UR                  S   nnU(       af  [        U[        R                  " X>U4   U	-  5      U	-  5      n[        U[        R                  " XNU4   U
-  5      U
-  5      nUSS2SU2SU24   nUUnnU R                  UUUS9n[        R                  " U/U[        R                  UR                  S9nU R!                  UR#                  S5      US9R%                  S5      nUUR                  S   :X  d   eU(       a{  UR'                  S	UU
-  5      n[        R                  " UR                  S   S/U[        R                  UR                  S9n[        R(                  " UU/SS
9nUR'                  S	5      nUR+                  U/5        UR+                  U5        UR+                  U5        GMÞ  UR+                  [        R,                  " / [        R                  UR                  S95        GM     UR+                  U5        UR+                  U5        GMe     / n/ nU GH  nSn/ n/ n U HÕ  n!U!U:H  n"[        R.                  " U"5      n[        R0                  " U[        R2                  U!R                  S9R5                  U!5      n#[        R6                  " U!S	5      n$[        R6                  " U!S	5      n%[        R8                  " U"SS9S   n&U#U-   U$U&'   U#U%U&'   UR+                  U$5        U R+                  U%5        UU-  nM×     UR+                  U5        UR+                  U 5        GM
     [;        UUUUUS.S9$ )a  
Process images for model input. In particular, variable-sized images are handled here.

Args:
    image_input (`torch.Tensor` of shape [batch_size, subsequence_size, num_channels, height, width]):
        Tensor of images padded to model input size.
    image_present (`torch.Tensor` of shape [batch_size, subsequence_size, num_images]):
        Tensor of 1s and 0s indicating whether an image is present.
    image_unpadded_h (`torch.Tensor` of shape [batch_size, subsequence_size]):
        Tensor of unpadded image heights.
    image_unpadded_w (`torch.Tensor` of shape [batch_size, subsequence_size]):
        Tensor of unpadded image widths.
    image_placeholder_id (int):
        The id of the image placeholder token. Comes from an associated tokenizer.
    image_newline_id (int):
        The id of the image newline token. Comes from an associated tokenizer.
    variable_sized (bool):
        Whether to process images as variable-sized.
    patch_size (`dict[str, int]`, *optional*):
        Size of the patches.
rO   Nr   r›   r¼   )r†   r‡   r'   )ÚdtyperR   )r   r'   r½   )ÚdimT)Úas_tuplern   re   r*   )r   r   r'   r   rj   rk   Úrangerƒ   r„   ÚmathÚceilr¹   rO   ÚfullÚint32rR   rÉ   Ú	unsqueezeÚsqueezerÃ   Úcatr]   ÚtensorÚcount_nonzeroÚarangeÚint64Útype_asÚ	full_likeÚnonzeror7   )'rH   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   r'   r´   rµ   r   Úbatch_image_patchesÚbatch_image_input_idsÚbatch_indexro   rp   Úsubseq_indexr   r†   r‡   Únew_hÚnew_wr¸   Útensor_of_image_idsrÈ   Únewline_idsrq   rr   Úsample_image_input_idsÚindex_offsetÚper_batch_indicesÚper_subsequence_indicesÚsubseq_image_input_idsÚpatches_maskÚindicesÚindices_in_stream_per_batchÚ!indices_in_stream_per_subsequenceÚpatches_indss'                                          r   Úpreprocess_with_tokenizer_infoÚ1FuyuImageProcessor.preprocess_with_tokenizer_info}  s1  € ô@ 	˜$  	Ô*àÑÜ˜$Ÿ/™/¬8×4Ñ4Ø!Ÿ_™_‘
ä%Ñ8¨¯©Ñ8‘
Ü˜J¬×1Ñ1Ü!Ñ/ JÑ/ˆJØ$.×$5Ñ$5°z×7GÑ7G�kà+-ˆØ8:Ðà:<ÐÜ  ×!2Ñ!2°1Ñ!5×6ˆKØ ˆOØˆMÜ % k×&7Ñ&7¸Ñ&:× ;�Ø ¨lÐ!:×;Ð;Ø'°\Ð(AÑB�EØ05·±¸A±ÀÇÁÈAÁ +�LÞ%ô !$Ø(Ü ŸIšIÐ&6ÀLÐ7PÑ&QÐT`Ñ&`ÓaÐdpÑpó!˜ô !$Ø'Ü ŸIšIÐ&6ÀLÐ7PÑ&QÐT_Ñ&_Ó`ÐcnÑnó!˜ð !&¢a¨¨%¨°°%°Ð&7Ñ 8˜Ø49¸5 k˜Ø"&×"6Ñ"6Ø%1¸{ÐWað #7ð #�Kô +0¯*ª*Ø$˜Ð';Ä5Ç;Á;ÐWb×WiÑWiñ+Ð'ð #×1Ñ1¸¿¹ÈÓ8JÐWaÐ1Ðb×jÑjÐklÓm�GØ&¨'¯-©-¸Ñ*:Ó:Ð:Ð:Þ%à.A×.IÑ.IÈ"ÈkÐ]hÑNhÓ.iÐ+Ü&+§j¢jØ0×6Ñ6°qÑ9¸1Ð=Ø,Ü"'§+¡+Ø#.×#5Ñ#5ñ	'˜ô /4¯iªiÐ9LÈkÐ8ZÐ`aÑ.bÐ+Ø.A×.IÑ.IÈ"Ó.MÐ+Ø—M‘M 5 'Ô*Ø#×*Ñ*Ð+>Ô?Ø!×(Ñ(¨×1à#×*Ñ*¬5¯<ª<¸Ä%Ç+Á+ÐVa×VhÑVhÑ+i×jñU !<ðV "×(Ñ(¨Ô9Ø×&Ñ& }×5ñ_ 7ðb CEÐ%ØHJÐ+ä&;Ð"ØˆLØ "ÐØ&(Ð#Û*@Ð&à5Ð9MÑM�Ü#×1Ò1°,Ó?�ÜŸ,š, {¼%¿+¹+ÐNd×NkÑNkÑl×tÑtØ*ó�ô /4¯oªoÐ>TÐVXÓ.YÐ+Ü49·O²OÐDZÐ\^Ó4_Ð1Ü$Ÿ}š}¨\ÀDÑIÈ!ÑL�à<CÀlÑ<RÐ+¨LÑ9ØBIÐ1°,Ñ?à!×(Ñ(Ð)DÔEØ'×.Ñ.Ð/PÔQØ Ñ+’ñ# +Að& *×0Ñ0Ð1BÔCØ/×6Ñ6Ð7N×Oñ1 '<ô2  à Ø#8Ø!4Ø1NØ7Zññ
ð 	
r4   c           	      ó†   >• [         TU ]  " S0 UD6nUb(  [        U[        5      (       d  [        S0 [	        USS9D6nXS'   U$ )z1
Process Fuyu-specific kwargs before validation.
r'   )Ú
param_namer*   )rt   Ú_standardize_kwargsr   r   r   )rH   r'   rI   rv   s      €r   rû   Ú&FuyuImageProcessor._standardize_kwargs  sJ   ø€ ô ‘Ò,Ñ6¨vÑ6ˆØÑ!¬*°ZÄ×*JÑ*JÜ!ÑW¤M°*ÈÑ$VÑWˆJØ)ˆ|ÑØˆr4   r*   )r   )NTr   ),r+   r,   r-   r.   r�   r}   r'   r   r‚   r~   r–   r(   r)   r“   r”   r•   r‘   r’   Úmodel_input_namesr%   Úvalid_kwargsr   ru   r
   r\   r{   rO   ÚTensorr   Úboolr…   r   r1   r2   r   r7   r±   r¹   rÉ   Údictr÷   rû   r3   Ú__classcell__)rv   s   @r   rg   rg   ¸   sØ  ø† à€IØ TÑ*€DØ¨Ñ,€JØ!×*Ñ*€HØ€FØ€MØ€LØ€LØ€JØ€IØ€JØ€NòÐð $€Lð# Ð(8Ñ!9÷ #ð  ñ3àð3ð ð3ð 
õ	3ð OSØñ&
à�|‰|ð&
ð ð&
ð Lð	&
ð
 ð&
ð 
�‰÷&
ð &
ðPD
à�^Ñ$ðD
ð ðD
ð ð	D
ð
 LðD
ð ðD
ð ðD
ð ðD
ð ˜D ™KÑ'¨$Ñ.ðD
ð ˜4 ™;Ñ&¨Ñ-ðD
ð �t‘ðD
ð ˜t‘|ðD
ð ˜D‘jðD
ð  ™+ðD
ð ˜jÑ(¨4Ñ/ðD
ð" 
ô#D
ñL¨Cð ¸cð ÈxÐZ^Éð Ðjmõ ñ4 E§L¡Lð ¸hÈ¹oð ÐY^×YeÑYeõ ðH -1ñD
à—\‘\ðD
ð —|‘|ðD
ð  Ÿ,™,ð	D
ð
  Ÿ,™,ðD
ð "ðD
ð ðD
ð ðD
ð ˜˜c˜‘N TÑ)ðD
ð 
õD
ðP 8<ñà˜˜c˜‘N XÑ-°Ñ4ðð 
÷	ö r4   rg   )%r/   r×   rO   Útorchvision.transforms.v2r   ÚtvFÚimage_processing_backendsr   Úimage_processing_utilsr   r   Úimage_transformsr   r	   Úimage_utilsr
   r   r   r   r   Úprocessing_utilsr   r   rY   r   r   r   r   Ú
get_loggerr+   Úloggerr   r#   r%   r7   rg   Ú__all__r*   r4   r   Ú<module>r     sÉ   ðñ &ã ã Ý 7å ;ß Aß E÷õ ÷ 5÷ó ð 
×	Ò	˜HÓ	%€ðaØ��jÑ!Ñ" T¨*Ñ%5Ñ5¸
ÑBðaà	ˆ$ˆzÑ
Ñôaô�|¨5ò ôl�|ô lð^ ôVÐ+ó Vó ðVðr
  Ð
 �r4   