
    rhV$                         d Z ddl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 ddlmZmZ  ej$                  e      Z G d	 d
ed      Z G d ded      Z G d de      ZdgZy)z
Processor class for UDOP.
    )OptionalUnion)logging   )BatchFeature)
ImageInput)ProcessingKwargsProcessorMixin
TextKwargsUnpack)PreTokenizedInput	TextInputc                   l    e Zd ZU eeee   eee      f      ed<   eeee      eeee         f   ed<   y)UdopTextKwargsword_labelsboxesN)__name__
__module____qualname__r   r   listint__annotations__     {/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/models/udop/processing_udop.pyr   r       sH    %S	4S	? :;<<d3i$tDI"7788r   r   F)totalc            
       6    e Zd ZU eed<   dddddddddd	i dZy)UdopProcessorKwargstext_kwargsTFr   )	add_special_tokenspadding
truncationstridereturn_overflowing_tokensreturn_special_tokens_maskreturn_offsets_mappingreturn_lengthverbose)r   images_kwargsN)r   r   r   r   r   	_defaultsr   r   r   r   r   %   s6     #').*/&+"

 Ir   r   c            
            e Zd ZdZddgZdZdZ fdZ	 	 	 	 ddee	   de
eeee   ee   f   d	ee   d
efdZd Zd Zd Zed        Z xZS )UdopProcessora  
    Constructs a UDOP processor which combines a LayoutLMv3 image processor and a UDOP tokenizer into a single processor.

    [`UdopProcessor`] offers all the functionalities you need to prepare data for the model.

    It first uses [`LayoutLMv3ImageProcessor`] to resize, rescale and normalize document images, and optionally applies OCR
    to get words and normalized bounding boxes. These are then provided to [`UdopTokenizer`] or [`UdopTokenizerFast`],
    which turns the words and bounding boxes into token-level `input_ids`, `attention_mask`, `token_type_ids`, `bbox`.
    Optionally, one can provide integer `word_labels`, which are turned into token-level `labels` for token
    classification tasks (such as FUNSD, CORD).

    Additionally, it also supports passing `text_target` and `text_pair_target` to the tokenizer, which can be used to
    prepare labels for language modeling tasks.

    Args:
        image_processor (`LayoutLMv3ImageProcessor`):
            An instance of [`LayoutLMv3ImageProcessor`]. The image processor is a required input.
        tokenizer (`UdopTokenizer` or `UdopTokenizerFast`):
            An instance of [`UdopTokenizer`] or [`UdopTokenizerFast`]. The tokenizer is a required input.
    image_processor	tokenizerLayoutLMv3ImageProcessor)UdopTokenizerUdopTokenizerFastc                 &    t         |   ||       y )N)super__init__)selfr-   r.   	__class__s      r   r4   zUdopProcessor.__init__Q   s    )4r   imagestextkwargsreturnc                 6    | j                   t        fd| j                  j                  i|}|d   j	                  dd      }|d   j	                  dd      }|d   j	                  dd      }	|d   j                  dd      }
|d   j                  d	d      }|d   j                  d
d      }| j                  j                  r|t        d      | j                  j                  r|t        d      |
r|st        d      | | j                  di |d   S  | j                  dd|i|d   }|j	                  dd      }|j	                  dd      }|d   j	                  d
d       |d   j	                  dd       |	|d   d<   ||n||d   d<   ||d   d<   |3| j                  j                  r|	t        |t              r|g}||d   d<    | j                  dd||n|i|d   }|
du r| j                  |d   |d         |d<   |j                  |       |S )a~  
        This method first forwards the `images` argument to [`~UdopImageProcessor.__call__`]. In case
        [`UdopImageProcessor`] was initialized with `apply_ocr` set to `True`, it passes the obtained words and
        bounding boxes along with the additional arguments to [`~UdopTokenizer.__call__`] and returns the output,
        together with the prepared `pixel_values`. In case [`UdopImageProcessor`] was initialized with `apply_ocr` set
        to `False`, it passes the words (`text`/``text_pair`) and `boxes` specified by the user along with the
        additional arguments to [`~UdopTokenizer.__call__`] and returns the output, together with the prepared
        `pixel_values`.

        Alternatively, one can pass `text_target` and `text_pair_target` to prepare the targets of UDOP.

        Please refer to the docstring of the above two methods for more information.
        tokenizer_init_kwargsr   r   Nr   	text_pairr$   Fr&   text_targetzdYou cannot provide bounding boxes if you initialized the image processor with apply_ocr set to True.zaYou cannot provide word labels if you initialized the image processor with apply_ocr set to True.zKYou cannot return overflowing tokens without returning the offsets mapping.r7   r)   wordstext_pair_targetr8   Tpixel_valuesoverflow_to_sample_mappingr   )_merge_kwargsr   r.   init_kwargspopgetr-   	apply_ocr
ValueError
isinstancestrget_overflowing_imagesupdate)r5   r7   r8   audiovideosr9   output_kwargsr   r   r=   r$   r&   r>   featuresfeatures_wordsfeatures_boxesencoded_inputss                    r   __call__zUdopProcessor.__call__T   s   , +**
"&.."<"<
 
 m,00$?#M266}dK!-044[$G	$1-$@$D$DE`bg$h!!.}!=!A!ABZ\a!b#M266}dK))u/@v  )){/Fs  %-Cjkk"!4>> .  ,t++\6\]?=[\H%\\'48N%\\'48N-(,,]DA-(,,-?F8AM-(5=B=NETbM-(1:EM-(7 D$8$8$B$ByGXdC( 6D<Jm,[9+T^^ !-T>.N )D0+/+F+F^,n=Y.Z,( OON+Or   c                     g }|D ]  }|j                  ||           t        |      t        |      k7  r#t        dt        |       dt        |             |S )Nz`Expected length of images to be the same as the length of `overflow_to_sample_mapping`, but got z and )appendlenrH   )r5   r7   rB   images_with_overflow
sample_idxs        r   rK   z$UdopProcessor.get_overflowing_images   sy    !4 	<J ''z(:;	< #$,F(GG,-.eC8R4S3TV 
 $#r   c                 :     | j                   j                  |i |S )z
        This method forwards all its arguments to PreTrainedTokenizer's [`~PreTrainedTokenizer.batch_decode`]. Please
        refer to the docstring of this method for more information.
        )r.   batch_decoder5   argsr9   s      r   r[   zUdopProcessor.batch_decode   s     
 +t~~**D;F;;r   c                 :     | j                   j                  |i |S )z
        This method forwards all its arguments to PreTrainedTokenizer's [`~PreTrainedTokenizer.decode`]. Please refer
        to the docstring of this method for more information.
        )r.   decoder\   s      r   r_   zUdopProcessor.decode   s     
 %t~~$$d5f55r   c                 
    g dS )N)rA   	input_idsbboxattention_maskr   )r5   s    r   model_input_nameszUdopProcessor.model_input_names   s    FFr   )NNNN)r   r   r   __doc__
attributesimage_processor_classtokenizer_classr4   r   r   r   r   r   r   r   r   r   rT   rK   r[   r_   propertyrd   __classcell__)r6   s   @r   r,   r,   7   s    * $[1J6<O5
 (,^bU$U I0$y/4HYCZZ[U ,-U 
Up$<6 G Gr   r,   N)re   typingr   r   transformersr   image_processing_utilsr   image_utilsr   processing_utilsr	   r
   r   r   tokenization_utils_baser   r   
get_loggerr   loggerr   r   r,   __all__r   r   r   <module>rt      sm    #   2 % T T C 
		H	%9Zu 9
*% $UGN UGp 
r   