
    rhk                     t   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ZddlmZmZmZ ddlmZmZmZmZ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% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/  e,       rddlm0Z0  e)       rd dl1Z1 e*       rddlm2Z2  e+       rd dl3m4Z5 n	d dl6m4Z5 ndZ2 e-jn                  e8      Z9 ed      dddddddddddddejt                  fde	e;   de	e<   de	e;   de	ee<e=e<   f      de	ee<e=e<   f      de	e;   de	e>   de	e;   de	e   de	e;   de	e   de	d   de	ee?e'f      d e	e   fd!       Z@d4d"d#d$e	e>   d%d#fd&ZAd'ee   d%e=e   fd(ZBd)e=d#   d%eCe>   fd*ZDd+eej                  d#f   d,e>d%e=eej                  d#f      fd-ZF G d. d/e
d01      ZGe( G d2 d3e             ZHy)5    )Iterable)deepcopy)	lru_cachepartial)AnyOptional	TypedDictUnionN   )BaseImageProcessorBatchFeatureget_size_dict)convert_to_rgbget_resize_output_image_sizeget_size_with_aspect_ratiogroup_images_by_shapereorder_images)ChannelDimension
ImageInput	ImageTypeSizeDictget_image_size#get_image_size_for_max_height_widthget_image_typeinfer_channel_dimension_formatmake_flat_list_of_imagesvalidate_kwargsvalidate_preprocess_arguments)Unpack)
TensorTypeauto_docstringis_torch_availableis_torchvision_availableis_torchvision_v2_availableis_vision_availablelogging)is_rocm_platform)PILImageResampling)pil_torch_interpolation_mapping)
functional
   maxsize
do_rescalerescale_factordo_normalize
image_mean	image_stddo_padsize_divisibilitydo_center_crop	crop_size	do_resizesizeresampler(   return_tensorsdata_formatc                     t        | |||||||||	|
|       ||dk7  rt        d      |t        j                  k7  rt        d      y)z
    Checks validity of typically used arguments in an `ImageProcessorFast` `preprocess` method.
    Raises `ValueError` if arguments incompatibility is caught.
    )r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   Nptz6Only returning PyTorch tensors is currently supported.z6Only channel first data format is currently supported.)r   
ValueErrorr   FIRST)r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   s                 {/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/image_processing_utils_fast.py"validate_fast_preprocess_argumentsrA   K   sk    * "%!+% !n&<QRR&,,,QRR -    tensortorch.Tensoraxisreturnc                 n    || j                         S 	 | j                  |      S # t        $ r | cY S w xY w)zF
    Squeezes a tensor, but only if the axis specified has dim 1.
    )rE   )squeezer>   )rC   rE   s     r@   safe_squeezerI   v   s@     |~~~~4~(( s   & 44valuesc                 J    t        |  D cg c]  }t        |       c}S c c}w )zO
    Return the maximum value across all indices of an iterable of values.
    )zipmax)rJ   values_is     r@   max_across_indicesrO      s      +.v,7hCM777s    imagesc                 b    t        | D cg c]  }|j                   c}      \  }}}||fS c c}w )zH
    Get the maximum height and width across all images in a batch.
    )rO   shape)rP   img_
max_height	max_widths        r@   get_max_height_widthrW      s5    
  22O3992OPAz9	"" 3Ps   ,image
patch_sizec                     g }t        | t        j                        \  }}t        d||      D ]9  }t        d||      D ]'  }| dd|||z   |||z   f   }|j	                  |       ) ; |S )a6  
    Divides an image into patches of a specified size.

    Args:
        image (`Union[np.array, "torch.Tensor"]`):
            The input image.
        patch_size (`int`):
            The size of each patch.
    Returns:
        list: A list of Union[np.array, "torch.Tensor"] representing the patches.
    )channel_dimr   N)r   r   r?   rangeappend)rX   rY   patchesheightwidthijpatchs           r@   divide_to_patchesrd      s     G"56F6L6LMMFE1fj) "q%, 	"A!QZ/Q^1CCDENN5!	""
 NrB   c                   v   e Zd ZU ee   ed<   eeeef      ed<   ee   ed<   ee	d      ed<   ee   ed<   eeeef      ed<   ee   ed<   ee	ee
f      ed	<   ee   ed
<   ee	e
ee
   f      ed<   ee	e
ee
   f      ed<   ee   ed<   ee	eef      ed<   ee   ed<   ee	eef      ed<   ed   ed<   ee   ed<   y)DefaultFastImageProcessorKwargsr7   r8   default_to_squarer(   F.InterpolationModer9   r5   r6   r.   r/   r0   r1   r2   do_convert_rgbr:   r;   input_data_formattorch.devicedevicedisable_groupingN)__name__
__module____qualname__r   bool__annotations__dictstrintr
   floatlistr    r    rB   r@   rf   rf      s   ~
4S>
""~%uHIJJTN"S#X''U3:.//4. ud5k1233eT%[0122TN"U3
?344*++c+;&; <==^$$tn$rB   rf   F)totalc                   <    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZej"                  ZdZdZdgZeZ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&e#   f   de%e#e&e#   f   dd	fdZ' e(d      	 	 	 	 	 	 d=de!e   de!e%e#e)e#   f      de!e%e#e)e#   f      de!e   de!e#   de!d   defd       Z*d d	dede#dede%e#e)e#   f   de%e#e)e#   f   dd	fd!Z+dd	d
e,e-e f   dd	fd"Z.de/de/fd#Z0de,fd$Z1	 d>d e/d%e de/fd&Z2	 	 	 d?de/d'e!e   d(e!e%e-ef      de!d   dd	f
d)Z3	 	 	 	 d@d e/d'e!e   d(e!e%e-ef      de!d   d%e de)d	   fd*Z4	 	 	 	 	 	 d=d
e!e   d+e!e   d,e!e   de!e%e#e)e#   f      de!e%e#e)e#   f      d-e!e   de,fd.Z5	 	 	 	 	 	 	 	 	 	 	 	 dAde!e   de!e#   de!e   de!e%e#ee#   f      de!e%e#ee#   f      d/e!e   d
e!e   d0e!e   d+e!e   d1e!e%d2      d3e!e%e-e6f      d-e!e   fd4Z7d e/dee   de8fd5Z9e:d e/dee   de8fd6       Z;dd7d e/d'ed(ede!e%e-df      dee   de8fd8Z<d e)d	   d/ed
ede!d   d0ed+edede#dede!e%e#e)e#   f      de!e%e#e)e#   f      d9e!e   d3e!e%e-e6f      de8fd:Z= fd;Z> xZ?S )BBaseImageProcessorFastNTgp?pixel_valueskwargsrF   c                 b   t        |   di | | j                  |      }|j                  d| j                        }|'t        ||j                  d| j                              nd | _        |j                  d| j                        }|t        |d      nd | _        | j                  j                  D ]E  }|j                  |d       }|t        | ||       %t        | |t        t        | |d                    G t        | j                  j                  j                               | _        y )Nr8   rg   r8   rg   r6   
param_namery   )super__init__filter_out_unused_kwargspopr8   r   rg   r6   valid_kwargsrs   setattrr   getattrrx   keys_valid_kwargs_names)selfr~   r8   r6   keykwarg	__class__s         r@   r   zBaseImageProcessorFast.__init__   s    	"6"..v6zz&$)),  tvzzBUW[WmWm7no 		
 JJ{DNN;	MVMby[Ihl$$44 	GCJJsD)E c5)c8GD#t,D#EF	G $((9(9(I(I(N(N(P#Q rB   rX   rD   r8   interpolationri   	antialiasc                    ||nt         j                  j                  }|j                  r?|j                  r3t        |j                         dd |j                  |j                        }n|j                  r(t        ||j                  dt        j                        }n|j                  r?|j                  r3t        |j                         dd |j                  |j                        }n@|j                  r%|j                  r|j                  |j                  f}nt        d| d      t         j"                  j%                         rt'               r| j)                  ||||      S t        j*                  ||||      S )a@  
        Resize an image to `(size["height"], size["width"])`.

        Args:
            image (`torch.Tensor`):
                Image to resize.
            size (`SizeDict`):
                Dictionary in the format `{"height": int, "width": int}` specifying the size of the output image.
            interpolation (`InterpolationMode`, *optional*, defaults to `InterpolationMode.BILINEAR`):
                `InterpolationMode` filter to use when resizing the image e.g. `InterpolationMode.BICUBIC`.

        Returns:
            `torch.Tensor`: The resized image.
        NF)r8   rg   rk   zjSize must contain 'height' and 'width' keys, or 'max_height' and 'max_width', or 'shortest_edge' key. Got .r   r   )FInterpolationModeBILINEARshortest_edgelongest_edger   r8   r   r   r?   rU   rV   r   r_   r`   r>   torchcompileris_compilingr'   compile_friendly_resizeresize)r   rX   r8   r   r   r~   new_sizes          r@   r   zBaseImageProcessorFast.resize   s@   , *7)BH[H[HdHd$"3"3 2

RS!""!!H
 3''"'"2"8"8	H __:5::<;Ldoo_c_m_mnH[[TZZTZZ0H6  >>&&(-=-?//xPYZZxxx}PYZZrB   r   c                    | j                   t        j                  k(  r| j                         dz  } t	        j
                  | |||      } | dz  } t        j                  | dkD  d|       } t        j                  | dk  d|       } | j                         j                  t        j                        } | S t	        j
                  | |||      } | S )z{
        A wrapper around `F.resize` so that it is compatible with torch.compile when the image is a uint8 tensor.
           r      r   )	dtyper   uint8rw   r   r   whereroundto)rX   r   r   r   s       r@   r   z.BaseImageProcessorFast.compile_friendly_resize$  s     ;;%++%KKMC'EHHUHMU^_ECKEKKS%8EKK	1e4EKKM$$U[[1E  HHUHMU^_ErB   scalec                     ||z  S )a?  
        Rescale an image by a scale factor. image = image * scale.

        Args:
            image (`torch.Tensor`):
                Image to rescale.
            scale (`float`):
                The scaling factor to rescale pixel values by.

        Returns:
            `torch.Tensor`: The rescaled image.
        ry   )r   rX   r   r~   s       r@   rescalezBaseImageProcessorFast.rescale9  s    $ u}rB   meanstdc                 0    t        j                  |||      S )a  
        Normalize an image. image = (image - image_mean) / image_std.

        Args:
            image (`torch.Tensor`):
                Image to normalize.
            mean (`torch.Tensor`, `float` or `Iterable[float]`):
                Image mean to use for normalization.
            std (`torch.Tensor`, `float` or `Iterable[float]`):
                Image standard deviation to use for normalization.

        Returns:
            `torch.Tensor`: The normalized image.
        )r   	normalize)r   rX   r   r   r~   s        r@   r   z BaseImageProcessorFast.normalizeM  s    * {{5$,,rB   r+   r,   r0   r1   r2   r.   r/   rm   rl   c                     |r>|r<t        j                  ||      d|z  z  }t        j                  ||      d|z  z  }d}|||fS )Nrm   g      ?F)r   rC   )r   r0   r1   r2   r.   r/   rm   s          r@   !_fuse_mean_std_and_rescale_factorz8BaseImageProcessorFast._fuse_mean_std_and_rescale_factord  sO     ,j@C.DXYJYv>#BVWIJ9j00rB   rP   c                     | j                  ||||||j                        \  }}}|r3| j                  |j                  t        j
                        ||      }|S |r| j                  ||      }|S )z/
        Rescale and normalize images.
        )r0   r1   r2   r.   r/   rm   )r   )r   rm   r   r   r   float32r   )r   rP   r.   r/   r0   r1   r2   s          r@   rescale_and_normalizez,BaseImageProcessorFast.rescale_and_normalizeu  s     -1,R,R%!!)== -S -
)
Iz ^^FIIEMMI$BJPYZF  \\&.9FrB   c                     |j                   |j                  t        d|j                                t	        j
                  ||d   |d   f      S )a  
        Center crop an image to `(size["height"], size["width"])`. If the input size is smaller than `crop_size` along
        any edge, the image is padded with 0's and then center cropped.

        Args:
            image (`"torch.Tensor"`):
                Image to center crop.
            size (`dict[str, int]`):
                Size of the output image.

        Returns:
            `torch.Tensor`: The center cropped image.
        z=The size dictionary must have keys 'height' and 'width'. Got r_   r`   )r_   r`   r>   r   r   center_crop)r   rX   r8   r~   s       r@   r   z"BaseImageProcessorFast.center_crop  sS    & ;;$**"4\]a]f]f]h\ijkk}}UT(^T']$CDDrB   c                     t        |      S )a'  
        Converts an image to RGB format. Only converts if the image is of type PIL.Image.Image, otherwise returns the image
        as is.
        Args:
            image (ImageInput):
                The image to convert.

        Returns:
            ImageInput: The converted image.
        )r   )r   rX   s     r@   r   z%BaseImageProcessorFast.convert_to_rgb  s     e$$rB   c                     | j                   |S | j                   D ]1  }||v st        j                  d| d       |j                  |       3 |S )zJ
        Filter out the unused kwargs from the kwargs dictionary.
        z!This processor does not use the `z ` parameter. It will be ignored.)unused_kwargsloggerwarning_oncer   )r   r~   
kwarg_names      r@   r   z/BaseImageProcessorFast.filter_out_unused_kwargs  s^     %M,, 	'JV###&G
|Ss$tu

:&	' rB   expected_ndimsc                     t        ||      S )z
        Prepare the images structure for processing.

        Args:
            images (`ImageInput`):
                The input images to process.

        Returns:
            `ImageInput`: The images with a valid nesting.
        r   )r   )r   rP   r   s      r@   _prepare_images_structurez0BaseImageProcessorFast._prepare_images_structure  s     (~NNrB   rj   rk   c                 f   t        |      }|t        j                  t        j                  t        j                  fvrt        d|       |r| j                  |      }|t        j                  k(  rt        j                  |      }n6|t        j                  k(  r#t        j                  |      j                         }|j                  dk(  r|j                  d      }|t        |      }|t        j                   k(  r!|j#                  ddd      j                         }||j%                  |      }|S )NzUnsupported input image type    r   r   )r   r   PILTORCHNUMPYr>   r   r   pil_to_tensorr   
from_numpy
contiguousndim	unsqueezer   r   LASTpermuter   )r   rX   rj   rk   rm   
image_types         r@   _process_imagez%BaseImageProcessorFast._process_image  s    $E*
immY__iooNN<ZLIJJ''.E&OOE*E9??*$$U+668E ::?OOA&E $ >u E 0 5 55MM!Q*557E HHV$ErB   c           
      L   | j                  ||      }t        | j                  |||      }t        |      dkD  xr t	        |d   t
        t        f      }|r'|D 	cg c]  }|D 	cg c]
  }	 ||	       c}	 }
}}	|
S |D 	cg c]
  }	 ||	       }
}	|
S c c}	w c c}	}w c c}	w )a  
        Prepare image-like inputs for processing.

        Args:
            images (`ImageInput`):
                The image-like inputs to process.
            do_convert_rgb (`bool`, *optional*):
                Whether to convert the images to RGB.
            input_data_format (`str` or `ChannelDimension`, *optional*):
                The input data format of the images.
            device (`torch.device`, *optional*):
                The device to put the processed images on.
            expected_ndims (`int`, *optional*):
                The expected number of dimensions for the images. (can be 2 for segmentation maps etc.)

        Returns:
            List[`torch.Tensor`]: The processed images.
        r   rj   rk   rm   r   )r   r   r   len
isinstancerx   tuple)r   rP   rj   rk   rm   r   process_image_partialhas_nested_structurenested_listrS   processed_imagess              r@   _prepare_image_like_inputsz1BaseImageProcessorFast._prepare_image_like_inputs  s    8 //~/V 'Rclr!

  #6{QW:fQi$PU3WgmnXc{ S!6s!; Snn   GMMs 5c :MM	 !TnMs   	B&B5BB!Br6   rg   r;   c                 :   |i }|t        d	i t        ||      }|t        d	i t        |d      }t        |t              rt	        |      }t        |t              rt	        |      }|t
        j                  }||d<   ||d<   ||d<   ||d<   ||d<   ||d<   |S )
z
        Update kwargs that need further processing before being validated
        Can be overridden by subclasses to customize the processing of kwargs.
        r   r6   r   r8   rg   r1   r2   r;   ry   )r   r   r   rx   r   r   r?   )r   r8   r6   rg   r1   r2   r;   r~   s           r@   _further_process_kwargsz.BaseImageProcessorFast._further_process_kwargs(  s     >F\mIZ[\D  T={#STIj$'z*Ji&i(I*00Kv'{&7"#)|'{ +}rB   r7   r5   r9   rh   r:   c                 2    t        |||||||||	|
||       y)z@
        validate the kwargs for the preprocess method.
        )r.   r/   r0   r1   r2   r7   r8   r5   r6   r9   r:   r;   N)rA   )r   r.   r/   r0   r1   r2   r7   r8   r5   r6   r9   r:   r;   r~   s                 r@   _validate_preprocess_kwargsz2BaseImageProcessorFast._validate_preprocess_kwargsL  s0    & 	+!)%!))#	
rB   c                 .     | j                   |g|i |S N)
preprocess)r   rP   argsr~   s       r@   __call__zBaseImageProcessorFast.__call__n  s    tv7777rB   c           	      8   t        |j                         | j                         | j                  D ]  }|j                  |t	        | |d              ! |j                  d      }|j                  d      }|j                  d      } | j                  d
i |} | j                  d
i | |j                  d      }t        |t        t        f      r	t        |   n||d<   |j                  d       |j                  d        | j                  |g||||d	|S )N)captured_kwargsvalid_processor_keysrj   rk   rm   r9   r   rg   r;   r   ry   )r   r   r   
setdefaultr   r   r   r   r   rv   r(   r)   _preprocess_image_like_inputs)	r   rP   r   r~   r   rj   rk   rm   r9   s	            r@   r   z!BaseImageProcessorFast.preprocessq  s0    	DLdLde 22 	KJj'$
D*IJ	K  $45"JJ':;H% .--77 	)((262 ::j) :DHsTfNg9h+H5nv 	
 	

&'

=!1t11

*8L]fl
pv
 	
rB   r   c                X    | j                  ||||      } | j                  |g|i |S )z
        Preprocess image-like inputs.
        To be overriden by subclasses when image-like inputs other than images should be processed.
        It can be used for segmentation maps, depth maps, etc.
        )rP   rj   rk   rm   )r   _preprocess)r   rP   rj   rk   rm   r   r~   s          r@   r   z4BaseImageProcessorFast._preprocess_image_like_inputs  sC     00.L]fl 1 
  t8888rB   rn   c           	         t        ||      \  }}i }|j                         D ]   \  }}|r| j                  |||      }|||<   " t        ||      }t        ||      \  }}i }|j                         D ]4  \  }}|r| j	                  ||      }| j                  ||||	|
|      }|||<   6 t        ||      }|rt        j                  |d      n|}t        d|i|      S )N)rn   )rX   r8   r   r   )dimr}   )datatensor_type)	r   itemsr   r   r   r   r   stackr   )r   rP   r7   r8   r   r5   r6   r.   r/   r0   r1   r2   rn   r:   r~   grouped_imagesgrouped_images_indexresized_images_groupedrR   stacked_imagesresized_imagesprocessed_images_groupedr   s                          r@   r   z"BaseImageProcessorFast._preprocess  s#   $ 0EV^n/o,,!#%3%9%9%; 	;!E>!%>\i!j,:"5)	; ((>@TU 0E^fv/w,,#% %3%9%9%; 	=!E>!%!1!1.)!L!77
NL*V_N /=$U+	= **BDXYCQ5;;'7Q?Wg.2B!CQ_``rB   c                 l    t         |          }|j                  dd        |j                  dd        |S )N_valid_processor_keysr   )r   to_dictr   )r   encoder_dictr   s     r@   r   zBaseImageProcessorFast.to_dict  s7    w(0$7.5rB   )NT)NNNNNN)   )NNN)NNNr   )NNNNNNNNNNNN)@ro   rp   rq   r9   r1   r2   r8   rg   r6   r7   r5   r.   r/   r0   rj   r:   r   r?   r;   rk   rm   model_input_namesrf   r   r   r   r   r   rr   r   staticmethodr   rv   r   r   rw   r   r
   r   r   r   rx   r   r   rt   ru   r   r   r   r   r   r   r   r   r    r   r   r   r!   r   r   r   r   __classcell__)r   s   @r@   r|   r|      s   HJIDIINJNLNN"((KF'(2LMR89R 
R8 044[4[ 4[ -	4[
 4[ 
4[l  :>	S/   56 	
 
 ( 
 
(-- E8E?*+- 5(5/)*	- 
-. r (,:>9=%)*.+/1tn1 U5$u+#5671 E%e"456	1
 TN1 !1 (1 
1 1   	
  %e,- U+, 
8EE 38nE
 
E.%% 
% t    OO O 
	O( *.DH+/$$ !$ $E#/?*?$@A	$
 ($ 
$R *.DH+/* *  !*  $E#/?*?$@A	* 
 (*  *  
n	* \ $((,,0:>9=26"x " H%" $D>	"
 U5$u+#567" E%e"456" ./" 
"L &**.'+;?:>$(#')-(,QU;?26 
TN 
 ! 
 tn	 

 U5%,#678 
 E%u"567 
 D> 
 x  
 ! 
 H% 
 5!LMN 
 !sJ!78 
 ./ 
D8z 8FCb<c 8ht 8 #
 #
fEd>e #
jv #
 #
V 8<99 	9
 ,9 sN2349 899 
9(*a^$*a *a 	*a
   56*a *a *a *a *a *a U5$u+#567*a E%e"456*a #4.*a !sJ!78*a  
!*aX rB   r|   r   )Icollections.abcr   copyr   	functoolsr   r   typingr   r   r	   r
   numpynpimage_processing_utilsr   r   r   image_transformsr   r   r   r   r   image_utilsr   r   r   r   r   r   r   r   r   r   r   processing_utilsr   utilsr    r!   r"   r#   r$   r%   r&   utils.import_utilsr'   r(   r   r)   torchvision.transforms.v2r*   r   torchvision.transforms
get_loggerro   r   r?   rr   rw   rx   rv   ru   rA   rI   rO   r   rW   arrayrd   rf   r|   ry   rB   r@   <module>r     s   %  ( 2 2  S S     %   1 /<"$=:&*#			H	% 2!%&*#'6:59!'+%)$( $#/37;.>.D.D'S'SUO'S 4.'S ud5k123	'S
 eT%[012'S TN'S  }'S TN'S !'S ~'S 8
'S +,'S U3
?34'S *+'S 'ST
 
x} 
 
8x} 8c 8#n!5 #%* #>)*8;	%.(
)*0%iu %( Z/ Z ZrB   