§
    tŠtj[2  ã                  ó’   — d Z ddlmZ ddlZddlmZ ddlZddlmZ ddl	m
Z
 erddlmZmZmZmZ dd„Zddd„Z G d„ d¦  «        ZdS )zN
Utilities for interpreting CSS from Stylers for formatting non-HTML outputs.
é    )ÚannotationsN)ÚTYPE_CHECKING)Ú
CSSWarning)Úfind_stack_level)ÚCallableÚ	GeneratorÚIterableÚIteratorÚprop_fmtÚstrÚreturnr   c                ó   ‡ — d	ˆ fd„}|S )
a)  
    Wrapper to expand shorthand property into top, right, bottom, left properties

    Parameters
    ----------
    side : str
        The border side to expand into properties

    Returns
    -------
        function: Return to call when a 'border(-{side}): {value}' string is encountered
    ÚselfÚCSSResolverÚpropr   Úvaluer   úGenerator[tuple[str, str]]c              3  ód  •K  — |                      ¦   «         }	 | j        t          |¦  «                 }n@# t          $ r3 t	          j        d|› d|› d�t          t          ¦   «         ¬¦  «         Y dS w xY wt          | j	        |d¬¦  «        D ]$\  }}‰ 
                    |¦  «        ||         fV — Œ%dS )a<  
        Expand shorthand property into side-specific property (top, right, bottom, left)

        Parameters
        ----------
            prop (str): CSS property name
            value (str): String token for property

        Yields
        ------
            Tuple (str, str): Expanded property, value
        zCould not expand "z: ú"©Ú
stacklevelNT)Ústrict)ÚsplitÚSIDE_SHORTHANDSÚlenÚKeyErrorÚwarningsÚwarnr   r   ÚzipÚSIDESÚformat)r   r   r   ÚtokensÚmappingÚkeyÚidxr   s          €úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pandas/io/formats/css.pyÚexpandz_side_expander.<locals>.expand%   sã   øè è € ð —’‘”ˆð	ØÔ*­3¨v©;¬;Ô7ˆGˆGøÝð 	ð 	ð 	ÝŒMØ5 TÐ5Ð5¨UÐ5Ð5Ð5ÝÝ+Ñ-Ô-ðñ ô ð ð
 ˆFˆFð	øøøõ ˜DœJ¨¸Ð=Ñ=Ô=ð 	4ð 	4‰HˆC�Ø—/’/ #Ñ&Ô&¨¨s¬Ð3Ð3Ð3Ð3Ð3ð	4ð 	4s   ™4 ´9A1Á0A1©r   r   r   r   r   r   r   r   © )r   r'   s   ` r&   Ú_side_expanderr*      s(   ø€ ð4ð 4ð 4ð 4ð 4ð 4ð4 €Mó    Ú Úsidec                ó*   ‡ — ‰ dk    rd‰ › �Š dˆ fd
„}|S )a.  
    Wrapper to expand 'border' property into border color, style, and width properties

    Parameters
    ----------
    side : str
        The border side to expand into properties

    Returns
    -------
        function: Return to call when a 'border(-{side}): {value}' string is encountered
    r,   ú-r   r   r   r   r   r   r   c              3  ó  •‡K  — |                      ¦   «         }t          |¦  «        dk    st          |¦  «        dk    r,t          j        d|› d�t          t          ¦   «         ¬¦  «         d‰› d�dd‰› d	�d
d‰› d�di}|D ]ZŠ‰                     ¦   «         | j        v r
‰|d‰› d	�<   Œ't          ˆfd„| j	        D ¦   «         ¦  «        r
‰|d‰› d�<   ŒQ‰|d‰› d�<   Œ[|  
                    |                     ¦   «         ¦  «        E d{V —† dS )aV  
        Expand border into color, style, and width tuples

        Parameters
        ----------
            prop : str
                CSS property name passed to styler
            value : str
                Value passed to styler for property

        Yields
        ------
            Tuple (str, str): Expanded property, value
        r   é   zToo many tokens provided to "z" (expected 1-3)r   Úborderz-colorÚblackz-styleÚnoneú-widthÚmediumc              3  óD   •K  — | ]}|‰                      ¦   «         v V — Œd S ©N)Úlower)Ú.0ÚratioÚtokens     €r&   ú	<genexpr>z3_border_expander.<locals>.expand.<locals>.<genexpr>r   s0   øè è € ÐRÐR°�U˜eŸkšk™mœmÐ+ÐRÐRÐRÐRÐRÐRr+   N)r   r   r   r   r   r   r9   ÚBORDER_STYLESÚanyÚBORDER_WIDTH_RATIOSÚatomizeÚitems)r   r   r   r"   Úborder_declarationsr<   r-   s        @€r&   r'   z _border_expander.<locals>.expandR   s|  øøè è € ð —’‘”ˆÝˆv‰;Œ;˜!ÒÐ�s 6™{œ{¨Qš˜ÝŒMØF°ÐFÐFÐFÝÝ+Ñ-Ô-ðñ ô ð ð "�TÐ!Ð!Ð! 7Ø!�TÐ!Ð!Ð! 6Ø!�TÐ!Ð!Ð! 8ð
Ðð
 ð 	Cð 	CˆEØ�{Š{‰}Œ} Ô 2Ð2Ð2Ø=BÐ#Ð$9¨TÐ$9Ð$9Ð$9Ñ:Ð:ÝÐRÐRÐRÐR¸Ô9QÐRÑRÔRÑRÔRð CØ=BÐ#Ð$9¨TÐ$9Ð$9Ð$9Ñ:Ð:à=BÐ#Ð$9¨TÐ$9Ð$9Ð$9Ñ:Ð:ð —<’<Ð 3× 9Ò 9Ñ ;Ô ;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r+   r(   r)   )r-   r'   s   ` r&   Ú_border_expanderrD   B   s?   ø€ ð ˆr‚z€zØ�4ˆzˆzˆð'=ð '=ð '=ð '=ð '=ð '=ðR €Mr+   c                  ó(  — e Zd ZdZddddddddd	d
ddœZe                     ¦   «         Ze                     ddddddddddddœ¦  «         e                     ¦   «         Ze                     ddi¦  «         e                     ¦   «         Z	e	                     dddddœ¦  «         g d¢Z
g d¢g d ¢g d!¢g d"¢d#œZd$Zi d%„ d&D ¦   «         ¥d'„ d(D ¦   «         ¥ ed)¦  «         ed*¦  «        d+œ¥Z	 dIdJd3„ZdKd5„ZdKd6„ZdLd8„ZdMd<„ZdNd=„Zd,efdOdB„ZdPdE„ZdQdH„Zd,S )Rr   zH
    A callable for parsing and resolving CSS to atomic properties.
    )Úpté   )ÚemrG   )rF   é   )rH   ç      à?)rF   g      è?)rF   éH   )ÚingL&“Éd2Ù?)rL   g
…B¡P(¤?)Úmmg      Ð?)rH   r   )rF   rH   ÚremÚexÚpxÚpcrL   ÚcmrM   Úqú	!!default)rH   g{®Gáz„?)rN   rJ   )rN   g      ä?)rN   gš™™™™™é?)rN   rG   )rN   g      ò?)rN   g      ø?)rN   é   )rH   g«ªªªªªê?)rH   g333333ó?)ú%zxx-smallzx-smallÚsmallr6   Úlargezx-largezxx-largeÚsmallerÚlargerrT   r4   )rF   r   )rP   é   )rP   rU   )rP   rG   )r4   Úthickr6   Úthin)r4   ÚhiddenÚdottedÚdashedÚsolidÚdoubleÚgrooveÚridgeÚinsetÚoutsetÚmediumdashdotÚ
dashdotdotÚhairÚmediumdashdotdotÚdashdotÚslantdashdotÚmediumdashed)r   r   r   r   )r   rG   r   rG   )r   rG   rU   rG   )r   rG   rU   r1   )rG   rU   r1   r[   )ÚtopÚrightÚbottomÚleftc                ó<   — i | ]}|rd |› �ndt          |¦  «        “ŒS )úborder-r2   )rD   ©r:   r   s     r&   ú
<dictcomp>zCSSResolver.<dictcomp>Ï   sF   € ð 
ð 
ð 
àð "&Ð3Ð�tÐÐÐ¨8Õ6FÀtÑ6LÔ6Lð
ð 
ð 
r+   )r,   rn   ro   rp   rq   c                ó:   — i | ]}d |› �t          d|› �¦  «        “ŒS )rs   zborder-{:s}-)r*   rt   s     r&   ru   zCSSResolver.<dictcomp>Ó   sC   € ð 
ð 
ð 
àð �dÐÐ�nÐ-D¸dÐ-DÐ-DÑEÔEð
ð 
ð 
r+   )ÚcolorÚstyleÚwidthzmargin-{:s}zpadding-{:s})ÚmarginÚpaddingNÚdeclarationsústr | Iterable[tuple[str, str]]Ú	inheritedúdict[str, str] | Noner   údict[str, str]c                ó$  — t          |t          ¦  «        r|                      |¦  «        }t          |                      |¦  «        ¦  «        }|€i }|                      ||¦  «        }|                      ||¦  «        }|                      |¦  «        S )aÒ  
        The given declarations to atomic properties.

        Parameters
        ----------
        declarations_str : str | Iterable[tuple[str, str]]
            A CSS string or set of CSS declaration tuples
            e.g. "font-weight: bold; background: blue" or
            {("font-weight", "bold"), ("background", "blue")}
        inherited : dict, optional
            Atomic properties indicating the inherited style context in which
            declarations_str is to be resolved. ``inherited`` should already
            be resolved, i.e. valid output of this method.

        Returns
        -------
        dict
            Atomic CSS 2.2 properties.

        Examples
        --------
        >>> resolve = CSSResolver()
        >>> inherited = {"font-family": "serif", "font-weight": "bold"}
        >>> out = resolve(
        ...     '''
        ...               border-color: BLUE RED;
        ...               font-size: 1em;
        ...               font-size: 2em;
        ...               font-weight: normal;
        ...               font-weight: inherit;
        ...               ''',
        ...     inherited,
        ... )
        >>> sorted(out.items())  # doctest: +NORMALIZE_WHITESPACE
        [('border-bottom-color', 'blue'),
         ('border-left-color', 'red'),
         ('border-right-color', 'red'),
         ('border-top-color', 'blue'),
         ('font-family', 'serif'),
         ('font-size', '24pt'),
         ('font-weight', 'bold')]
        )Ú
isinstancer   ÚparseÚdictrA   Ú_update_initialÚ_update_font_sizeÚ_update_other_units)r   r|   r~   Úpropss       r&   Ú__call__zCSSResolver.__call__Û   sŠ   € õ^ �l¥CÑ(Ô(ð 	4ØŸ:š: lÑ3Ô3ˆLÝ�T—\’\ ,Ñ/Ô/Ñ0Ô0ˆØÐØˆIà×$Ò$ U¨IÑ6Ô6ˆØ×&Ò& u¨iÑ8Ô8ˆØ×'Ò'¨Ñ.Ô.Ð.r+   rˆ   c                óú   — |                      ¦   «         D ]\  }}||vr|||<   Œ|                     ¦   «         }|                      ¦   «         D ].\  }}|dk    r|                     |d¦  «        }|dv r||= Œ)|||<   Œ/|S )NÚinheritÚinitial)rŒ   N)rB   ÚcopyÚget)r   rˆ   r~   r   ÚvalÚ	new_propss         r&   r…   zCSSResolver._update_initial  s¢   € ð #ŸšÑ*Ô*ð 	"ð 	"‰IˆD�#Ø˜5Ð Ð Ø!��d‘øà—J’J‘L”Lˆ	ØŸš™œð 	&ð 	&‰IˆD�#Ø�iÒÐØ—m’m D¨)Ñ4Ô4�àÐ'Ð'Ð'à˜d�O�Oà"%�	˜$‘�ØÐr+   c                ó¢   — |                      d¦  «        r9|                      |d         |                      |¦  «        | j        ¬¦  «        |d<   |S )Nú	font-size©Úconversions)rŽ   Ú
size_to_ptÚ_get_font_sizeÚFONT_SIZE_RATIOS)r   rˆ   r~   s      r&   r†   zCSSResolver._update_font_size*  s[   € ð �9Š9�[Ñ!Ô!ð 	Ø!%§¢Ø�kÔ"Ø×#Ò# IÑ.Ô.Ø Ô1ð "1ñ "ô "ˆE�+Ñð
 ˆr+   úfloat | Nonec                ój   — |                      d¦  «        r|d         }|                      |¦  «        S d S )Nr’   )rŽ   Ú_get_float_font_size_from_pt)r   rˆ   Úfont_size_strings      r&   r–   zCSSResolver._get_font_size8  s<   € Ø�9Š9�[Ñ!Ô!ð 	GØ$ [Ô1ÐØ×4Ò4Ð5EÑFÔFÐFØˆtr+   r›   r   Úfloatc                ót   — |                      d¦  «        sJ ‚t          |                     d¦  «        ¦  «        S )NrF   )Úendswithrœ   Úrstrip)r   r›   s     r&   rš   z(CSSResolver._get_float_font_size_from_pt>  s9   € Ø×(Ò(¨Ñ.Ô.Ð.Ð.Ð.ÝÐ%×,Ò,¨TÑ2Ô2Ñ3Ô3Ð3r+   c                ó  — |                       |¦  «        }| j        D ]i}d|› d�}||v r&|                      ||         || j        ¬¦  «        ||<   d|› �d|› �fD ],}||v r&|                      ||         || j        ¬¦  «        ||<   Œ-Œj|S )Nrs   r5   )Úem_ptr”   zmargin-zpadding-)r–   r    r•   r@   ÚMARGIN_RATIOS)r   rˆ   Ú	font_sizer-   r   s        r&   r‡   zCSSResolver._update_other_unitsB  sÔ   € Ø×'Ò'¨Ñ.Ô.ˆ	à”Jð 	ð 	ˆDØ)˜TÐ)Ð)Ð)ˆDØ�uˆ}ˆ}Ø"ŸošoØ˜$”KØ#Ø $Ô 8ð .ñ ô ��d‘ð * 4Ð)Ð)Ð+<°dÐ+<Ð+<Ð=ð ð �Ø˜5�=�=à"&§/¢/Ø˜dœØ'Ø$(Ô$6ð #2ñ #ô #�E˜$‘Køðð ˆr+   Úin_valr¡   r”   r„   c                ó  ‡ ‡‡— dˆˆˆ fd„}t          j        d‰¦  «        }|€
 |¦   «         S |                     ¦   «         \  }}|dk    rd}n+	 t          |¦  «        }n# t          $ r  |¦   «         cY S w xY w|dk    rE|dk    r|€d	}n||z  }d}Œ	 ‰|         \  }}n# t
          $ r  |¦   «         cY S w xY w||z  }|dk    °Et          |d
¦  «        }t          |¦  «        |k    rt          |¦  «        d›d�}	n|d›d�}	|	S )Nr   r   c                 óˆ   •— t          j        d‰›�t          t          ¦   «         ¬¦  «         ‰                     d‰ ¬¦  «        S )NzUnhandled size: r   z
1!!defaultr“   )r   r   r   r   r•   )r”   r¤   r   s   €€€r&   Ú_errorz&CSSResolver.size_to_pt.<locals>._error[  sK   ø€ ÝŒMØ- 6Ð-Ð-ÝÝ+Ñ-Ô-ðñ ô ð ð
 —?’? <¸[�?ÑIÔIÐIr+   z^(\S*?)([a-zA-Z%!].*)r,   rG   rF   rH   rN   é   ÚdÚf)r   r   )ÚreÚmatchÚgroupsrœ   Ú
ValueErrorr   ÚroundÚint)
r   r¤   r¡   r”   r§   r¬   r�   ÚunitÚmulÚsize_fmts
   `` `      r&   r•   zCSSResolver.size_to_ptX  sƒ  øøø€ ð	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jõ ”Ð1°6Ñ:Ô:ˆØˆ=Ø�6‘8”8ˆOà—L’L‘N”N‰	ˆˆTØ�"Š9ˆ9àˆCˆCð Ý˜C‘j”j��øÝð  ð  ð  Ø�v‘x”x���ð øøøð �dŠlˆlØ�tŠ|ˆ|Ø�=Ø �D�Dà˜5‘L�CØ�DØð Ø'¨Ô-‘	��c�cøÝð  ð  ð  Ø�v‘x”x���ð øøøà�3‰JˆCð �dŠlˆlõ �C˜‰mŒmˆÝˆs‰8Œ8�sŠ?ˆ?Ý˜c™(œ(Ð(Ð(Ð(Ð(ˆHˆHà�|�|�|�|ˆHØˆs$   ÁA ÁA5Á4A5ÂB ÂB5Â4B5r	   r   c              #  óÊ   K  — |D ]]\  }}|                      ¦   «         }|                      ¦   «         }|| j        v r!| j        |         } || ||¦  «        E d {V —† ŒW||fV — Œ^d S r8   )r9   ÚCSS_EXPANSIONS)r   r|   r   r   r'   s        r&   rA   zCSSResolver.atomize‡  s”   è è € Ø'ð 	"ð 	"‰KˆD�%Ø—:’:‘<”<ˆDØ—K’K‘M”MˆEØ�tÔ*Ð*Ð*ØÔ,¨TÔ2�Ø!˜6 $¨¨eÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4à˜E�kÐ!Ð!Ð!Ð!ð	"ð 	"r+   Údeclarations_strúIterator[tuple[str, str]]c              #  ó–  K  — |                      d¦  «        D ]°}|                     ¦   «         sŒ|                     d¦  «        \  }}}|                     ¦   «                              ¦   «         }|                     ¦   «                              ¦   «         }|r||fV — Œ…t	          j        d|›�t          t          ¦   «         ¬¦  «         Œ±dS )zÖ
        Generates (prop, value) pairs from declarations.

        In a future version may generate parsed tokens from tinycss/tinycss2

        Parameters
        ----------
        declarations_str : str
        ú;ú:z-Ill-formatted attribute: expected a colon in r   N)r   ÚstripÚ	partitionr9   r   r   r   r   )r   r¶   Údeclr   Úsepr�   s         r&   rƒ   zCSSResolver.parse‘  s×   è è € ð %×*Ò*¨3Ñ/Ô/ð 	ð 	ˆDØ—:’:‘<”<ð ØØ!Ÿ^š^¨CÑ0Ô0‰NˆD�#�sØ—:’:‘<”<×%Ò%Ñ'Ô'ˆDà—)’)‘+”+×#Ò#Ñ%Ô%ˆCØð Ø˜C�i����å”ØLÀDÐLÐLÝÝ/Ñ1Ô1ðñ ô ð ð ð	ð 	r+   r8   )r|   r}   r~   r   r   r€   )rˆ   r€   r~   r€   r   r€   )rˆ   r€   r   r˜   )r›   r   r   rœ   )rˆ   r€   r   r€   )r¤   r   r¡   r˜   r”   r„   r   r   )r|   r	   r   r   )r¶   r   r   r·   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚUNIT_RATIOSr�   r—   Úupdater¢   r@   r>   r   r    r*   rµ   r‰   r…   r†   r–   rš   r‡   r•   rA   rƒ   r)   r+   r&   r   r   ~   s’  € € € € € ðð ð
 ØØØàØØØØØØðð €Kð #×'Ò'Ñ)Ô)ÐØ×ÒàØ$Ø%Ø!Ø Ø#Ø#Ø"Ø&Ø!Ø"ð	
ð 	
ñô ð ð   ×$Ò$Ñ&Ô&€MØ×Ò˜& )Ð,Ñ-Ô-Ð-à%×*Ò*Ñ,Ô,ÐØ×ÒàØØØð		
ð 	
ñô ð ðð ð €Mð* ˆ<ˆ<Øˆ<ˆ<Øˆ<ˆ<Øˆ<ˆ<ð	ð €Oð /€Eðð
ð 
à>ð
ñ 
ô 
ðð

ð 
à3ð
ñ 
ô 
ðð !�. Ñ/Ô/Ø!�> .Ñ1Ô1ðð ð €Nð  ,0ð7/ð 7/ð 7/ð 7/ð 7/ðrð ð ð ð,ð ð ð ðð ð ð ð4ð 4ð 4ð 4ðð ð ð ð. 26È;ð-ð -ð -ð -ð -ð^"ð "ð "ð "ðð ð ð ð ð r+   r   )r   r   r   r   )r,   )r-   r   r   r   )rÂ   Ú
__future__r   r«   Útypingr   r   Úpandas.errorsr   Úpandas.util._exceptionsr   Úcollections.abcr   r   r	   r
   r*   rD   r   r)   r+   r&   ú<module>rÊ      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø  Ð  Ð  Ð  Ð  Ð  Ø €€€à $Ð $Ð $Ð $Ð $Ð $Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4àð ðð ð ð ð ð ð ð ð ð ð ð ð(ð (ð (ð (ðV9ð 9ð 9ð 9ð 9ðxkð kð kð kð kñ kô kð kð kð kr+   