
    ^j                         d 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
 ddlmZ dd	lmZmZ dd
lmZmZmZmZ ddlmZmZ ddlmZmZ  G d ded      Ze G d de
             ZdgZy)z'Image processor class for EfficientNet.    )	lru_cache)OptionalN)
functional   )TorchvisionBackend)BatchFeature)group_images_by_shapereorder_images)IMAGENET_STANDARD_MEANIMAGENET_STANDARD_STDPILImageResamplingSizeDict)ImagesKwargsUnpack)
TensorTypeauto_docstringc                   &    e Zd ZU dZeed<   eed<   y) EfficientNetImageProcessorKwargsak  
    rescale_offset (`bool`, *optional*, defaults to `self.rescale_offset`):
        Whether to rescale the image between [-max_range/2, scale_range/2] instead of [0, scale_range].
    include_top (`bool`, *optional*, defaults to `self.include_top`):
        Normalize the image again with the standard deviation only for image classification if set to True.
    rescale_offsetinclude_topN)__name__
__module____qualname____doc__bool__annotations__     /var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/efficientnet/image_processing_efficientnet.pyr   r   #   s     r   r   F)totalc            %           e Zd ZdZeZej                  Ze	Z
eZdddZdddZdZdZdZdZdZdZdZdee   f fd	Z	 d*d
ddededdfdZ ed      	 	 	 	 	 	 	 d+dedz  deee   z  dz  deee   z  dz  dedz  dedz  ded   dedz  defd       Z	 d*dddedededeee   z  deee   z  deddfdZ 	 	 d,ded   dede!d d!d"ed#e!dedededeee   z  dz  deee   z  dz  d$edz  d%e!dz  d&edz  d'e"e#z  dz  ded(ede$f$d)Z% xZ&S )-EfficientNetImageProcessorzITorchvision backend for EfficientNet with rescale offset and include_top.iZ  )heightwidthi!  TFgp?kwargsc                 $    t        |   di | y )Nr   )super__init__)selfr%   	__class__s     r   r(   z#EfficientNetImageProcessor.__init__B   s    "6"r   imageztorch.Tensorscaleoffsetreturnc                     ||z  }|r|dz  }|S )z@Rescale by scale; if offset=True then image = image * scale - 1.   r   )r)   r+   r,   r-   r%   rescaleds         r   rescalez"EfficientNetImageProcessor.rescaleE   s     5=MHr   
   )maxsizeNdo_normalize
image_mean	image_std
do_rescalerescale_factordeviceztorch.devicer   c                     |r@|r>|s<t        j                  ||      d|z  z  }t        j                  ||      d|z  z  }d}|||fS )N)r:   g      ?F)torchtensor)r)   r5   r6   r7   r8   r9   r:   r   s           r   !_fuse_mean_std_and_rescale_factorz<EfficientNetImageProcessor._fuse_mean_std_and_rescale_factorR   sQ     ,~j@C.DXYJYv>#BVWIJ9j00r   imagesc           	          | j                  ||||||j                  |      \  }}}|r| j                  |||      }|r1| j                  |j	                  t
        j                        ||      }|S )N)r5   r6   r7   r8   r9   r:   r   )r-   )dtype)r>   r:   r2   	normalizetor<   float32)r)   r?   r8   r9   r5   r6   r7   r   s           r   "rescale_and_normalize_efficientnetz=EfficientNetImageProcessor.rescale_and_normalize_efficientnetc   s}     -1,R,R%!!)==) -S -
)
Iz \\&.\PF^^FIIEMMI$BJPYZFr   	do_resizesizeresamplez7PILImageResampling | tvF.InterpolationMode | int | Nonedo_center_crop	crop_sizedo_padpad_sizedisable_groupingreturn_tensorsr   c           
         t        ||      \  }}i }|j                         D ]  \  }}|r| j                  |||      }|||<   ! t        ||      }t        ||      \  }}i }|j                         D ]J  \  }}|r| j	                  ||      }| j                  ||||	|
||      }|r| j                  |d|      }|||<   L t        ||      }t        d|i|      S )z&Custom preprocessing for EfficientNet.)rM   r   pixel_values)datatensor_type)r	   itemsresizer
   center_croprE   rB   r   )r)   r?   rF   rG   rH   rI   rJ   r8   r9   r5   r6   r7   rK   rL   rM   rN   r   r   r%   grouped_imagesgrouped_images_indexresized_images_groupedshapestacked_imagesresized_imagesprocessed_images_groupedprocessed_imagess                              r   _preprocessz&EfficientNetImageProcessor._preprocess}   s   , 0EV^n/o,,!#%3%9%9%; 	;!E>!%^T8!L,:"5)	; ((>@TU/D^fv/w,,#% %3%9%9%; 	=!E>!%!1!1.)!L!DD
NL*V_aoN !%9!M.<$U+	= **BDXY.2B!CQ_``r   )F)NNNNNNF)FT)'r   r   r   r   r   valid_kwargsr   BICUBICrH   r   r6   r   r7   rG   rJ   rF   rI   r8   r9   r   r5   r   r   r(   floatr   r2   r   listr   tupler>   rE   r   strr   r   r^   __classcell__)r*   s   @r   r"   r"   /   s   S3L!))H'J%IC(D-IINJNNLK#(H!I # 	  	 
 r %)1504"&'++/&+1Tk1 DK'$.1 4;&-	1
 4K1 1 (1 t1 
1 10  %  	
  DK' 4;&  
V  % %*a^$*a *a 	*a
 L*a *a *a *a *a *a DK'$.*a 4;&-*a t*a T/*a +*a  j(4/!*a" #*a$ %*a( 
)*ar   r"   )r   	functoolsr   typingr   r<   torchvision.transforms.v2r   tvFimage_processing_backendsr   image_processing_utilsr   image_transformsr	   r
   image_utilsr   r   r   r   processing_utilsr   r   utilsr   r   r   r"   __all__r   r   r   <module>rq      sl    .    7 ; 2 E  5 /	|5 	 wa!3 wa wat (
(r   