
    |-j<i                     0   d dl mZ d dlmZ d dlmZmZ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mZmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5  e0            rddlm6Z6  e.            rd dl7Z7 e/            rd dl8m9Z: ddlm;Z;m<Z< ndZ;dZ< e1j=        e>          Z? e5d           G d de                      Z@ e5d           G d de                      ZAe@ZBdS )    )Iterable)	lru_cache)AnyOptionalUnionN   )BatchFeature)BaseImageProcessor)center_crop)convert_to_rgbdivide_to_patchesget_resize_output_image_sizeget_size_with_aspect_ratiogroup_images_by_shapereorder_images)	normalize)rescale)resize)ChannelDimension
ImageInput	ImageTypeSizeDictget_image_size#get_image_size_for_max_height_widthget_image_typeget_max_height_widthinfer_channel_dimension_formatis_valid_imageload_image_as_tensor)ImagesKwargsUnpack)
TensorTypeis_torch_availableis_torchvision_availableis_vision_availablelogging)is_rocm_platformis_torchdynamo_compilingrequires)PILImageResampling)
functional)pil_torch_interpolation_mappingtorch_pil_interpolation_mapping)torchtorchvision)backendsc                        e Zd ZdZdee         f fdZedefd            Z	ede
fd            Zde
ee
         z  eee
                  z  fdZ	 	 	 d=d
eded	z  de
ez  d	z  ded         dee         ddfdZd
edefdZ	 	 	 	 	 	 d>ded         deded	z  de
d	z  deded	z  ded	z  deed         df         fdZ	 	 d?d
dded d!d"eddf
d#Ze	 	 d?d
dd$eeef         d%ed&         d"eddf
d'            Zd
dd(eddfd)Zd
dd*eee         z  d+eee         z  ddfd,Z ed-.          	 	 	 	 	 	 d@d/ed	z  d0eee         z  d	z  d1eee         z  d	z  d2ed	z  d3ed	z  ded         defd4            Z ddd2ed3ed/ed0eee         z  d1eee         z  ddfd5Z!d
ddeddfd6Z"ded         d7eded d!d8ed9ed2ed3ed/ed0eee         z  d	z  d1e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$f d<Z% xZ&S )ATorchvisionBackendzATorchvision backend for GPU-accelerated batched image processing.kwargsc                 T     t                      j        di |  | j        di | d S N super__init___set_attributesselfr3   	__class__s     f/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/transformers/image_processing_backends.pyr9   zTorchvisionBackend.__init__Y   ?    ""6"""&&v&&&&&    returnc                 :    t                               d           dS )  
        `bool`: Whether or not this image processor is using the fast (Torchvision) backend.
        The `is_fast` property is deprecated and will be removed in v5.3 of Transformers.
        Use the `backend` attribute instead (e.g., `processor.backend == "torchvision"`).
        The `is_fast` property is deprecated and will be removed in v5.3 of Transformers. Use the `backend` attribute instead (e.g., `processor.backend == 'torchvision'`).Tloggerwarning_oncer<   s    r>   is_fastzTorchvisionBackend.is_fast]   s)     	`	
 	
 	
 tr@   c                     dS )B
        `str`: The backend used by this image processor.
        r/   r6   rH   s    r>   backendzTorchvisionBackend.backendj   s	    
 }r@   image_url_or_urlsc                      t          |t          t          f          r fd|D             S t          |t                    rt	          |          S t          |          r|S t          dt          |                     )z
        Convert a single or a list of URLs / paths into `torch.Tensor` objects.

        Already-valid image objects (tensors, numpy arrays, PIL Images) are passed through
        unchanged so that callers who pre-load images are unaffected.
        c                 :    g | ]}                     |          S r6   )fetch_images).0xr<   s     r>   
<listcomp>z3TorchvisionBackend.fetch_images.<locals>.<listcomp>y   s'    DDDQD%%a((DDDr@   z=only a single or a list of entries is supported but got type=)
isinstancelisttuplestrr   r   	TypeErrortype)r<   rM   s   ` r>   rP   zTorchvisionBackend.fetch_imagesq   s     '$77 	wDDDD2CDDDD)3// 	w'(9:::-.. 	w$$u\`ar\s\suuvvvr@   Nimagedo_convert_rgbinput_data_formatdeviceztorch.devicetorch.Tensorc                 x   t          |          }|t          j        t          j        t          j        fvrt          d|           |r|                     |          }|t          j        k    rt          j        |          }n6|t          j        k    r&t          j
        |                                          }|j        dk    r|                    d          }|t          |          }|t          j        k    r)|                    ddd                                          }||                    |          }|S )z/Process a single image for torchvision backend.Unsupported input image type    r   Nr   )r   r   PILTORCHNUMPY
ValueErrorr   tvFpil_to_tensorr.   
from_numpy
contiguousndim	unsqueezer   r   LASTpermuteto)r<   rZ   r[   r\   r]   r3   
image_types          r>   process_imagez TorchvisionBackend.process_image   s    $E**
imY_ioNNNIZIIJJJ 	/''..E&&%e,,EE9?**$U++6688E:??OOA&&E$ >u E E 0 555MM!Q**5577EHHV$$Er@   c                      t          |          S zConvert an image to RGB format.r   r<   rZ   s     r>   r   z!TorchvisionBackend.convert_to_rgb       e$$$r@   r   constantFimagespad_size
fill_valuepadding_modereturn_maskdisable_grouping	is_nested)r^   r^   c                    |0|j         r|j        st          d| d          |j         |j        f}nt          |          }t	          |||          \  }	}
i }i }|	                                D ]\  }}|j        dd         }|d         |d         z
  }|d         |d         z
  }|dk     s|dk     rt          d| d	| d          ||k    rdd||f}t          j        ||||
          }|||<   |rKt          j
        |t          j                  ddddddf         }d|dd|d         d|d         f<   |||<   t          ||
|          }|rt          ||
|          }||fS |S )z5Pad images using Torchvision with batched operations.NCPad size must contain 'height' and 'width' keys only. Got pad_size=.)r|   r}   r   r   zrPadding dimensions are negative. Please make sure that the `pad_size` is larger than the image size. Got pad_size=z, image_size=)fillrz   dtype.)r}   )heightwidthre   r   r   itemsshaperf   padr.   
zeros_likeint64r   )r<   rw   rx   ry   rz   r{   r|   r}   r3   grouped_imagesgrouped_images_indexprocessed_images_groupedprocessed_masks_groupedr   stacked_images
image_sizepadding_heightpadding_widthpaddingstacked_masksprocessed_imagesprocessed_maskss                         r>   r   zTorchvisionBackend.pad   s    O t t !rgo!r!r!rsss 8HH+F33H/D%50
 0
 0
,, $& "$%3%9%9%;%; 	? 	?!E>'-bcc2J%a[:a=8N$QK*Q-7M!!]Q%6%6 U08U UGQU U U   X%%a?!$z`l!m!m!m.<$U+ ? % 0u{ S S STWYZ\]\]\]_`_`_`T` aGHc?Z]?OjmOCD1>'.)*BDXdmnnn 	5,-DFZfopppO#_44r@   Tsizeresamplez7PILImageResampling | tvF.InterpolationMode | int | None	antialiasc                 ^   |-t          |t          t          f          rt          |         }n|}nt          j        j        }|t          j        j        k    r+t          	                    d           t          j        j
        }|j        r=|j        r6t          |                                dd         |j        |j                  }n|j        r#t          ||j        dt           j                  }nt|j        r=|j        r6t)          |                                dd         |j        |j                  }n0|j        r|j        r|j        |j        f}nt/          d| d          t1                      r&t3                      r|                     ||||          S t	          j        ||||          S )	z"Resize an image using Torchvision.Na  You have used a torchvision backend image processor with LANCZOS resample which not yet supported for torch.Tensor. BICUBIC resample will be used as an alternative. Please fall back to a pil backend image processor if you want full consistency with the original model.r   Fr   default_to_squarer\   jSize must contain 'height' and 'width' keys, or 'max_height' and 'max_width', or 'shortest_edge' key. Got r   interpolationr   )rT   r*   intr,   rf   InterpolationModeBILINEARLANCZOSrF   rG   BICUBICshortest_edgelongest_edger   r   r   r   FIRST
max_height	max_widthr   r   r   re   r(   r'   _compile_friendly_resizer   )r<   rZ   r   r   r   r3   r   new_sizes           r>   r   zTorchvisionBackend.resize   s    (%7$=>> ) ? I (1:MC1999A  
  19M 	$"3 	1

RSS!"! HH
  	3'"'"2"8	  HH _ 	 	:5::<<;Ldo_c_mnnHH[ 	TZ 	TZ0HH     $%% 	\*:*<*< 	\00-QZ[[[z%R[\\\\r@   r   r   ztvF.InterpolationModec                    | j         t          j        k    r|                                 dz  } t	          j        | |||          } | dz  } t          j        | dk    d|           } t          j        | dk     d|           } |                                                     t          j                  } nt	          j        | |||          } | S )zOA wrapper around tvF.resize for torch.compile compatibility with uint8 tensors.   r      r   )	r   r.   uint8floatrf   r   whereroundrn   )rZ   r   r   r   s       r>   r   z+TorchvisionBackend._compile_friendly_resize  s     ;%+%%KKMMC'EJuhmW`aaaECKEKS%88EK	1e44EKKMM$$U[11EEJuhmW`aaaEr@   scalec                     ||z  S )z5Rescale an image by a scale factor using Torchvision.r6   r<   rZ   r   r3   s       r>   r   zTorchvisionBackend.rescale"  s     u}r@   meanstdc                 .    t          j        |||          S )z%Normalize an image using Torchvision.)rf   r   r<   rZ   r   r   r3   s        r>   r   zTorchvisionBackend.normalize+  s     }UD#...r@   
   )maxsizedo_normalize
image_mean	image_std
do_rescalerescale_factorc                     |r<|r:t          j        ||          d|z  z  }t          j        ||          d|z  z  }d}|||fS )N)r]   g      ?F)r.   tensor)r<   r   r   r   r   r   r]   s          r>   !_fuse_mean_std_and_rescale_factorz4TorchvisionBackend._fuse_mean_std_and_rescale_factor5  sa      	, 	j@@@C.DXYJYv>>>#BVWIJ9j00r@   c                     |                      ||||||j                  \  }}}|r6|                     |                    t          j                  ||          }n|r|                     ||          }|S )zFRescale and normalize images using Torchvision (fused for efficiency).)r   r   r   r   r   r]   r   )r   r]   r   rn   r.   float32r   )r<   rw   r   r   r   r   r   s          r>   rescale_and_normalizez(TorchvisionBackend.rescale_and_normalizeF  s     -1,R,R%!!)= -S -
 -
)
Iz  	:^^FIIEMI$B$BJPYZZFF 	:\\&.99Fr@   c                 8   |j         |j        $t          d|                                           |j        dd         \  }}|j         |j        }}||k    s||k    r{||k    r||z
  dz  nd||k    r||z
  dz  nd||k    r||z
  dz   dz  nd||k    r||z
  dz   dz  ndg}t          j        ||d          }|j        dd         \  }}||k    r||k    r|S t          ||z
  dz            }	t          ||z
  dz            }
t          j        ||	|
||          S )	z'Center crop an image using Torchvision.N=The size dictionary must have keys 'height' and 'width'. Got r   ra   r   r   )r   g       @)	r   r   re   keysr   rf   r   r   crop)r<   rZ   r   r3   image_heightimage_widthcrop_height
crop_widthpadding_ltrbcrop_top	crop_lefts              r>   r   zTorchvisionBackend.center_crop_  s    ;$*"4j]a]f]f]h]hjjkkk$)K$4!k"&+tzZ##{\'A'A3=3K3Kk)a//QR5@<5O5O|+11UV7AK7O7Ok)A-!33UV9D|9S9S|+a/A55YZ	L GE<a888E(-BCC(8%L+[(([L-H-H{2c9::z1S899	xxKLLLr@   	do_resizedo_center_crop	crop_sizedo_padreturn_tensorsc           	         t          ||          \  }}i }|                                D ]$\  }}|r|                     |||          }|||<   %t          ||          }t          ||          \  }}i }|                                D ]<\  }}|r|                     ||          }|                     ||||	|
|          }|||<   =t          ||          }|r|                     |||          }t          d|i|          S )z=Preprocess using Torchvision backend (fast, GPU-accelerated).)r|   rZ   r   r   )rx   r|   pixel_valuesdatatensor_type)r   r   r   r   r   r   r   r	   )r<   rw   r   r   r   r   r   r   r   r   r   r   r   rx   r|   r   r3   r   r   resized_images_groupedr   r   resized_imagesr   r   s                            r>   _preprocesszTorchvisionBackend._preprocess{  sf   * 0EV^n/o/o/o,,!#%3%9%9%;%; 	; 	;!E> a!%>W_!`!`,:"5))'(>@TUU 0E^fv/w/w/w,,#% %3%9%9%;%; 	= 	=!E> M!%!1!1.)!L!L!77
NL*V_ N /=$U++)*BDXYY 	p#xx(88^nxoo.2B!CQ_````r@   )NNN)Nr   rv   FFF)NT)NNNNNN)'__name__
__module____qualname____doc__r!   r    r9   propertyboolrI   rW   rL   rU   rP   r   r   r   rp   r   r   r   r   rV   r   r   staticmethodr   r   r   r   r   r   r   r   r   r"   r	   r   __classcell__r=   s   @r>   r2   r2   U   s       KK'!5 ' ' ' ' ' ' 
 
 
 
 X
     XwcDIoT#Y.O w w w w& '+;?+/! !! t! !11D8	!
 (! &! 
! ! ! !F%J %: % % % % "!"#-!(-!&0  0 ^$0  0  $J	0 
 Dj0  0  +0  $;0  
u34nD	E0  0  0  0 l OS3] 3]3] 3] L	3]
 3] 
3] 3] 3] 3]j  <@	 S/   78 	
 
   \$ 
 
   // huo%/ Xe_$	/ 
/ / / / Yr %)1504"&'++/1 1Tk1 DK'$.1 4;&-	1
 4K1 1 (1 
1 1 1 1   	
  DK' 4;& 
   2MM M
 
M M M M8-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 -a -a -a -a -ar@   r2   )visionc                       e Zd ZdZdee         f fdZedefd            Z	ede
fd            Z	 	 d-ded	edz  d
e
ez  dz  dee         dej        f
dZdedefdZ	 	 	 	 d.deej                 dededz  de
dz  dedeeej                 eej                 f         eej                 z  fdZ	 	 d-dej        dedddedz  dej        f
dZdej        dedej        fdZdej        deee         z  deee         z  dej        fdZdej        dedej        fd Zdeej                 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
ez  dz  defd+Zde e
e!f         f fd,Z" xZ#S )/
PilBackendz9PIL/NumPy backend for portable CPU-only image processing.r3   c                 T     t                      j        di |  | j        di | d S r5   r7   r;   s     r>   r9   zPilBackend.__init__  r?   r@   rA   c                 :    t                               d           dS )rC   rD   FrE   rH   s    r>   rI   zPilBackend.is_fast  s)     	`	
 	
 	
 ur@   c                     dS )rK   pilr6   rH   s    r>   rL   zPilBackend.backend  s	    
 ur@   NrZ   r[   r\   c                 j   t          |          }|t          j        t          j        t          j        fvrt          d|           |r|                     |          }|t          j        k    r0t          j        |          }|j	        dk    r|t          j        n|}n$|t          j        k    r|                                }|j	        dk    rt          j        |d          }|t          |          }|t          j        k    r/t          |t          j                  rt          j        |d          }|S )z'Process a single image for PIL backend.r`      Nra   r   )axis)ra   r   r   )r   r   rb   rc   rd   re   r   nparrayrj   r   rl   numpyexpand_dimsr   rT   ndarray	transpose)r<   rZ   r[   r\   r3   ro   s         r>   rp   zPilBackend.process_image  s    $E**
imY_ioNNNIZIIJJJ 	/''..E&&HUOOEzQ=N=V$4$9$9\m!9?**KKMME:??N5q111E$ >u E E 0 555%,, 7UI66r@   c                      t          |          S rr   rs   rt   s     r>   r   zPilBackend.convert_to_rgb  ru   r@   r   rv   Frw   rx   ry   rz   r{   c                    |0|j         r|j        st          d| d          |j         |j        }}nt          |          \  }}g }	g }
|D ]}t	          |t
          j                  \  }}||z
  }||z
  }|dk     s|dk     rt          d| d| d| d| d		          ||k    s||k    r?d
d|fd|ff}|dk    rt          j        ||d|          }nt          j        |||          }|		                    |           |rBt          j
        ||ft          j                  }d|d|d|f<   |
	                    |           |r|	|
fS |	S )z)Pad images to specified size using NumPy.Nr   r   channel_dimr   zsPadding dimensions are negative. Please make sure that the `pad_size` is larger than the image size. Got pad_size=(z, z), image_size=(z).)r   r   rv   )modeconstant_values)r   r   r   )r   r   re   r   r   r   r   r   r   appendzerosr   )r<   rw   rx   ry   rz   r{   r3   target_heighttarget_widthr   r   rZ   r   r   r   r   	pad_widthmasks                     r>   r   zPilBackend.pad  s    O t t !rgo!r!r!rsss*2/8><MM*>v*F*F'M< 	- 	-E*5>N>TUUUMFE*V3N(50M!!]Q%6%6 s1>s sBNs s_es sins s s  
 &&%<*?*? $a%81m:LM	:--F5)*V`aaaEEF5),GGGE##E*** -x =RXNNN()WfWfuf_%&&t,,, 	5#_44r@   r   r   zPILImageResampling | Nonereducing_gapc                    |Ft          |t          t          f          s*t          |t          v rt          |         }nt          j        }||nt          j        }|j        rC|j        r<t          |t          j	                  \  }}t          ||f|j        |j                  }n|j        r#t          ||j        dt          j	                  }nz|j        rC|j        r<t          |t          j	                  \  }}t          ||f|j        |j                  }n0|j        r|j        r|j        |j        f}nt#          d| d          t%          ||||t          j	        t          j	                  S )z Resize an image using PIL/NumPy.Nr   Fr   r   r   )r   r   r  data_formatr\   )rT   r*   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   re   	np_resize)	r<   rZ   r   r   r  r3   r   r   r   s	            r>   r   zPilBackend.resize"  s    
8>PRU=V(W(W.:xKj?j?j:8D-6'3889K9T 	$"3 	*5>N>TUUUMFE1"! HH
  	3'"'"2"8	  HH _ 		 		*5>N>TUUUMFE:FE?DO]a]kllHH[ 	TZ 	TZ0HH    
 %(..4
 
 
 	
r@   r   c                 P    t          ||t          j        t          j                  S )z/Rescale an image by a scale factor using NumPy.)r   r  r\   )
np_rescaler   r   r   s       r>   r   zPilBackend.rescaleU  s-     (..4	
 
 
 	
r@   r   r   c                 R    t          |||t          j        t          j                  S )zNormalize an image using NumPy.)r   r   r  r\   )np_normalizer   r   r   s        r>   r   zPilBackend.normalizec  s0     (..4
 
 
 	
r@   c                     |j         |j        $t          d|                                           t	          ||j         |j        ft
          j        t
          j                  S )z!Center crop an image using NumPy.Nr   )r   r  r\   )r   r   re   r   np_center_cropr   r   )r<   rZ   r   r3   s       r>   r   zPilBackend.center_crops  si     ;$*"4j]a]f]f]h]hjjkkk+tz*(..4	
 
 
 	
r@   r   r   r   r   r   r   r   r   r   r   c                 X   g }|D ]z}|r|                      |||          }|r|                     ||          }|r|                     ||          }|	r|                     ||
|          }|                    |           {|r|                     ||          }t          d|i|          S )z2Preprocess using PIL backend (portable, CPU-only).r   )rx   r   r   )r   r   r   r   r   r   r	   )r<   rw   r   r   r   r   r   r   r   r   r   r   r   rx   r   r3   r   rZ   s                     r>   r   zPilBackend._preprocess  s    &  		+ 		+E O%dXNN ;((	:: <UN;; Euj)DD##E**** 	M#xx(88xLL.2B!CQ_````r@   c                     t                                                      }|                    dd                              d          r|d         d d         |d<   |S )Nimage_processor_type Pil)r8   to_dictgetendswith)r<   processor_dictr=   s     r>   r  zPilBackend.to_dict  sa    **4b99BB5II 	a5CDZ5[\_]_\_5`N12r@   )NN)Nr   rv   F)$r   r   r   r   r!   r    r9   r   r   rI   rW   rL   r   r   r   r   rp   r   rU   r   r   rV   r   r   r   r   r   r   r   r"   r	   r   dictr   r  r   r   s   @r>   r   r     s       CC'!5 ' ' ' ' ' ' 
 
 
 
 X
     X '+;?	" "" t" !11D8	"
 &" 
" " " "H%J %: % % % % "!"#-!1  1 RZ 1  1  $J	1 
 Dj1  1  
tBJbj!11	2T"*5E	E1  1  1  1 n 15#'1
 1
z1
 1
 .	1

 Dj1
 
1
 1
 1
 1
f
z
 

 

 
 
 

z
 huo%
 Xe_$	
 

 
 
 
 
z
 

 

 
 
 
""aRZ "a "a 	"a
 ."a "a "a "a "a "a DK'$."a 4;&-"a t"a T/"a j(4/"a" 
#"a "a "a "aHc3h          r@   r   )Ccollections.abcr   	functoolsr   typingr   r   r   r   r   image_processing_baser	   image_processing_utilsr
   image_transformsr   r  r   r   r   r   r   r   r   r  r   r  r   r	  image_utilsr   r   r   r   r   r   r   r   r   r   r   processing_utilsr    r!   utilsr"   r#   r$   r%   r&   utils.import_utilsr'   r(   r)   r*   r.   torchvision.transforms.v2r+   rf   r,   r-   
get_loggerr   rF   r2   r   BaseImageProcessorFastr6   r@   r>   <module>r(     s   % $ $ $ $ $       ' ' ' ' ' ' ' ' ' '     / / / / / / 6 6 6 6 6 6                                                             3 2 2 2 2 2 2 2              U T T T T T T T T T  0////// LLL +;;;;;;]]]]]]]]]&*#&*# 
	H	%	% 
+,,,Ra Ra Ra Ra Ra+ Ra Ra -,Raj
 
;A A A A A# A A  AJ ,   r@   