Ë
    T^(h1  ã                   ó–   — d Z ddlZddlmZmZ ddlmZmZmZ  e«       r
ddl	Z	ddl	m
Z
  ej                  e«      Z G d„ de«      ZdgZy)	z'
Feature extractor class for MarkupLM.
é    Né   )ÚBatchFeatureÚFeatureExtractionMixin)Úis_bs4_availableÚloggingÚrequires_backends)ÚBeautifulSoupc                   ó@   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zdefd„Z	ˆ xZ
S )ÚMarkupLMFeatureExtractorao  
    Constructs a MarkupLM feature extractor. This can be used to get a list of nodes and corresponding xpaths from HTML
    strings.

    This feature extractor inherits from [`~feature_extraction_utils.PreTrainedFeatureExtractor`] which contains most
    of the main methods. Users should refer to this superclass for more information regarding those methods.

    c                 ó>   •— t        | dg«       t        ‰| �  di |¤Ž y )NÚbs4© )r   ÚsuperÚ__init__)ÚselfÚkwargsÚ	__class__s     €úv/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/markuplm/feature_extraction_markuplm.pyr   z!MarkupLMFeatureExtractor.__init__+   s   ø€ Ü˜$  Ô(Ü‰ÑÑ"˜6Ó"ó    c           
      ó˜  ‡— g }g }|j                   r|n|j                  Š‰j                  D ]y  }|j                  ‰j                   d¬«      }|j	                  ‰j                   «       |j	                  dt        |«      k(  rdnt        ˆfd„t        |d«      D «       «      «       |ŠŒ{ |j                  «        |j                  «        ||fS )NF)Ú	recursiveé   r   c              3   ó2   •K  — | ]  \  }}|‰u sŒ|–— Œ y ­w)Nr   )Ú.0ÚiÚsÚchilds      €r   ú	<genexpr>z6MarkupLMFeatureExtractor.xpath_soup.<locals>.<genexpr>7   s   øè ø€ Ò1e¹¸¸1ÐZ[Ð_dÒZd´!Ñ1eùs   ƒ�)	ÚnameÚparentÚparentsÚfind_allÚappendÚlenÚnextÚ	enumerateÚreverse)r   ÚelementÚ
xpath_tagsÚxpath_subscriptsr    Úsiblingsr   s         @r   Ú
xpath_soupz#MarkupLMFeatureExtractor.xpath_soup/   s¸   ø€ Øˆ
ØÐØ"Ÿ<š<‘¨W¯^©^ˆØ—m‘mò 	ˆFØ—‘ u§z¡z¸U�ÓCˆHØ×Ñ˜eŸj™jÔ)Ø×#Ñ#Øœ#˜h›-Ò'‘¬TÓ1eÄ	È(ÐTUÓ@VÔ1eÓ-eôð ‰Eð	ð 	×ÑÔØ× Ñ Ô"ØÐ+Ð+Ð+r   c                 ó^  — t        |d«      }g }g }g }|j                  D ]Ä  }t        |t        j                  j
                  «      sŒ(t        |j                  «      t        j                  j                  urŒXt        j                  |«      j                  «       }|sŒ~|j                  |«       | j                  |«      \  }}	|j                  |«       |j                  |	«       ŒÆ t        |«      t        |«      k7  rt        d«      ‚t        |«      t        |«      k7  rt        d«      ‚|||fS )Nzhtml.parserz3Number of doc strings and xtags does not correspondz3Number of doc strings and xsubs does not correspond)r	   ÚdescendantsÚ
isinstancer   r(   ÚNavigableStringÚtyper    ÚTagÚhtmlÚunescapeÚstripr#   r,   r$   Ú
ValueError)
r   Úhtml_stringÚ	html_codeÚall_doc_stringsÚstring2xtag_seqÚstring2xsubs_seqr(   Útext_in_this_tagr)   r*   s
             r   Úget_three_from_singlez.MarkupLMFeatureExtractor.get_three_from_single>   s  € Ü! +¨}Ó=ˆ	àˆØˆØÐà ×,Ñ,ò 	:ˆGÜ˜'¤3§;¡;×#>Ñ#>Õ?Ü˜Ÿ™Ó'¬s¯{©{¯©Ñ>Øä#'§=¡=°Ó#9×#?Ñ#?Ó#AÐ Ù'Øà×&Ñ&Ð'7Ô8à/3¯©¸wÓ/GÑ,�
Ð,Ø×&Ñ& zÔ2Ø ×'Ñ'Ð(8Õ9ð	:ô ˆÓ¤3 Ó#7Ò7ÜÐRÓSÐSÜˆÓ¤3Ð'7Ó#8Ò8ÜÐRÓSÐSà Ð1AÐAÐAr   c                 ó`   — d}t        ||«      D ]  \  }}|d|› �z  }|dk7  sŒ|d|› d�z  }Œ |S )NÚ ú/r   ú[ú])Úzip)r   r)   r*   ÚxpathÚtagnameÚsubss         r   Úconstruct_xpathz(MarkupLMFeatureExtractor.construct_xpath[   sR   € ØˆÜ  Ð-=Ó>ò 	%‰MˆG�TØ�q˜˜	�]Ñ"ˆEØ�q‹yØ˜1˜T˜F !˜Ñ$‘ð	%ð ˆr   Úreturnc                 óf  — d}t        |t        «      rd}n9t        |t        t        f«      r#t	        |«      dk(  st        |d   t        «      rd}|st        dt        |«      › d�«      ‚t        t        |t        t        f«      xr t        |d   t        «      «      }|s|g}g }g }|D ]t  }| j                  |«      \  }}}	|j                  |«       g }
t        |||	«      D ])  \  }}}| j                  ||«      }|
j                  |«       Œ+ |j                  |
«       Œv ||dœ}t        |d¬«      }|S )	a\  
        Main method to prepare for the model one or several HTML strings.

        Args:
            html_strings (`str`, `List[str]`):
                The HTML string or batch of HTML strings from which to extract nodes and corresponding xpaths.

        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **nodes** -- Nodes.
            - **xpaths** -- Corresponding xpaths.

        Examples:

        ```python
        >>> from transformers import MarkupLMFeatureExtractor

        >>> page_name_1 = "page1.html"
        >>> page_name_2 = "page2.html"
        >>> page_name_3 = "page3.html"

        >>> with open(page_name_1) as f:
        ...     single_html_string = f.read()

        >>> feature_extractor = MarkupLMFeatureExtractor()

        >>> # single example
        >>> encoding = feature_extractor(single_html_string)
        >>> print(encoding.keys())
        >>> # dict_keys(['nodes', 'xpaths'])

        >>> # batched example

        >>> multi_html_strings = []

        >>> with open(page_name_2) as f:
        ...     multi_html_strings.append(f.read())
        >>> with open(page_name_3) as f:
        ...     multi_html_strings.append(f.read())

        >>> encoding = feature_extractor(multi_html_strings)
        >>> print(encoding.keys())
        >>> # dict_keys(['nodes', 'xpaths'])
        ```FTr   zQHTML strings must of type `str`, `List[str]` (batch of examples), but is of type ú.)ÚnodesÚxpathsN)ÚdataÚtensor_type)r/   ÚstrÚlistÚtupler$   r6   r1   Úboolr=   r#   rC   rG   r   )r   Úhtml_stringsÚvalid_stringsÚ
is_batchedrK   rL   r7   r9   r:   r;   Úxpath_stringsÚnodeÚtag_listÚsub_listÚxpath_stringrM   Úencoded_inputss                    r   Ú__call__z!MarkupLMFeatureExtractor.__call__c   sU  € ð` ˆô �l¤CÔ(Ø ‰MÜ˜¤t¬U mÔ4Ü�<Ó  AÒ%¬°LÀ±OÄSÔ)IØ $�áÜð"Ü"& |Ó"4Ð!5°Qð8óð ô
 œ* \´D¼%°=ÓAÒhÄzÐR^Ð_`ÑRaÔcfÓGgÓiˆ
áØ(˜>ˆLð ˆØˆØ'ò 	)ˆKØAE×A[ÑA[Ð\gÓAhÑ>ˆO˜_Ð.>Ø�L‰L˜Ô)ØˆMÜ,/°ÀÐRbÓ,cò 3Ñ(��h Ø#×3Ñ3°H¸hÓG�Ø×$Ñ$ \Õ2ð3ð �M‰M˜-Õ(ð	)ð ¨&Ñ1ˆÜ%¨4¸TÔBˆàÐr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r=   rG   r   r\   Ú__classcell__)r   s   @r   r   r   !   s+   ø„ ñô#ò,òBò:ðT¨÷ Tr   r   )r`   r3   Úfeature_extraction_utilsr   r   Úutilsr   r   r   r   r	   Ú
get_loggerr]   Úloggerr   Ú__all__r   r   r   ú<module>rg      sT   ðñó ç Lß AÑ Añ ÔÛÝ!ð 
ˆ×	Ñ	˜HÓ	%€ôVÐ5ô Vðr &Ð
&�r   