
    .i[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y)zN
Utilities for interpreting CSS from Stylers for formatting non-HTML outputs.
    )annotationsN)TYPE_CHECKING)
CSSWarning)find_stack_level)Callable	GeneratorIterableIteratorc                     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
    c              3  D  K   |j                         }	 | j                  t        |         }t        | j                  |d      D ]  \  }}j                  |      ||   f  y# t        $ r. t	        j
                  d| d| dt        t                      Y yw xY ww)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)selfpropvaluetokensmappingkeyidxprop_fmts          S/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/io/formats/css.pyexpandz_side_expander.<locals>.expand%   s      	**3v;7G DJJ= 	4HC//#&s33	4  	MM$TF"UG15+-
 	s'   B A& 9B &4BB BB r   CSSResolverr   strr   r&   returnGenerator[tuple[str, str]] )r!   r#   s   ` r"   _side_expanderr*      s    44 M    c                (      dk7  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
     -c              3    K   |j                         }t        |      dk(  st        |      dkD  r(t        j                  d| dt        t                      d ddd d	d
d ddi}|D ]Y  j                         | j                  v r
|d d	<   )t        fd| j                  D              r
|d d<   Q|d d<   [ | j                  |j                               E d{    y7 w)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  B   K   | ]  }|j                         v   y wN)lower).0ratiotokens     r"   	<genexpr>z3_border_expander.<locals>.expand.<locals>.<genexpr>r   s     RUekkm+Rs   N)r   r   r   r   r   r   r8   BORDER_STYLESanyBORDER_WIDTH_RATIOSatomizeitems)r   r   r   r   border_declarationsr;   sides        @r"   r#   z _border_expander.<locals>.expandR   s     v;!s6{QMM/v5EF+- TF&!7TF&!6TF&!8

  	CE{{} 2 22=B#fTF&$9:R9Q9QRR=B#fTF&$9:=B#fTF&$9:	C << 3 9 9 ;<<<s   C)C5-C3.C5r$   r)   )rC   r#   s   ` r"   _border_expanderrD   B   s$     rz4&z'=R Mr+   c                     e Zd ZdZddddddddd	d
ddZej                         Zej                  dddddddddddd       ej                         Zej                  ddi       ej                         Z	e	j                  ddddd       g dZ
g dg d g d!g d"d#Zd$Zi d%D  ci c]  }|rd&| nd't        |       c}}} d(D  ci c]  }d&| t        d)|        c}}}  ed*       ed+      d,Z	 d7	 	 	 	 	 d8d.Z	 	 	 	 	 	 d9d/Z	 	 	 	 	 	 d9d0Zd:d1Zd;d2Zd<d3Zd-ef	 	 	 	 	 	 	 d=d4Zd>d5Zd?d6Zy-c c}}} w c c}}} w )@r%   zH
    A callable for parsing and resolving CSS to atomic properties.
    )pt   )emrG   )rF      )rH         ?)rF   g      ?)rF   H   )ingL&d2?)rL   g
BP(?)mmg      ?)rH   r   )rF   rH   remexpxpcrL   cmrM   q	!!default)rH   g{Gz?)rN   rJ   )rN   g      ?)rN   g?)rN   rG   )rN   g      ?)rN   g      ?)rN      )rH   g?)rH   g333333?)%zxx-smallzx-smallsmallr5   largezx-largezxx-largesmallerlargerrT   r3   )rF   r   )rP      )rP   rU   )rP   rG   )r3   thickr5   thin)r3   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   r0   )rG   rU   r0   r[   )toprightbottomleft)r-   rn   ro   rp   rq   border-r1   )colorstylewidthzborder-{:s}-zmargin-{:s}zpadding-{:s})marginpaddingNc                    t        |t              r| j                  |      }t        | j	                  |            }|i }| j                  ||      }| j                  ||      }| j                  |      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dictr@   _update_initial_update_font_size_update_other_units)r   declarations	inheritedpropss       r"   __call__zCSSResolver.__call__   sp    ^ lC(::l3LT\\,/0I$$UI6&&ui8''..r+   c                    |j                         D ]  \  }}||vs|||<    |j                         }|j                         D ])  \  }}|dk(  r|j                  |d      }|dv r||= %|||<   + |S )Ninheritinitial)r   N)rA   copyget)r   r   r   r   val	new_propss         r"   r|   zCSSResolver._update_initial  s     #* 	"ID#5 !d	" JJL	 	&ID#immD)4''dO"%	$	& r+   c                    |j                  d      r3| j                  |d   | j                  |      | 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*  sN     99[!!%k"##I. 11 "1 "E+
 r+   c                R    |j                  d      r|d   }| j                  |      S y )Nr   )r   _get_float_font_size_from_pt)r   r   font_size_strings      r"   r   zCSSResolver._get_font_size8  s.    99[!$[1445EFFr+   c                \    |j                  d      sJ t        |j                  d            S )NrF   )endswithfloatrstrip)r   r   s     r"   r   z(CSSResolver._get_float_font_size_from_pt>  s-    ((...%,,T233r+   c                   | j                  |      }| j                  D ]h  }d| d}||v r$| j                  ||   || j                        ||<   d| d| fD ]+  }||v s| j                  ||   || j                        ||<   - j |S )Nrr   r4   )em_ptr   zmargin-zpadding-)r   r   r   r?   MARGIN_RATIOS)r   r   	font_sizerC   r   s        r"   r~   zCSSResolver._update_other_unitsB  s    ''.	JJ 	DTF&)Du}"oo$K# $ 8 8 . d #4&)XdV+<= 5="&//d'$($6$6 #2 #E$K	" r+   c                    d fd}t        j                  d      }| |       S |j                         \  }}|dk(  rd}n	 t        |      }|dk7  r&|dk(  r|d}n||z  }d}	 |   \  }}||z  }|dk7  r&t        |d      }t        |      |k(  rt        |      d	d}	|	S |d
d}	|	S # t        $ r
  |       cY S w xY w# t
        $ r
  |       cY S w xY w)Nc                 x    t        j                  dt        t                      j	                  d       S )NzUnhandled size: r   z
1!!defaultr   )r   r   r   r   r   )r   in_valr   s   r"   _errorz&CSSResolver.size_to_pt.<locals>._error[  s7    MM"6*-+-
 ??<[?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 16:=8OLLN	T"9C Cj dlt|= D5LCD '-	c 3JC dl Cms8s?c(1R(H  a|H/   x    x s$   B0 *C 0CCCCc              #     K   |D ][  \  }}|j                         }|j                         }|| j                  v r"| j                  |   } || ||      E d {    V||f ] y 7 wr7   )r8   CSS_EXPANSIONS)r   r   r   r   r#   s        r"   r@   zCSSResolver.atomize  sn     ' 	"KD%::<DKKMEt***,,T2!$e444Ek!	"
 5s   AA&A$A&c              #  \  K   |j                  d      D ]  }|j                         s|j                  d      \  }}}|j                         j                         }|j                         j                         }|r||f nt	        j
                  d|t        t                       yw)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	partitionr8   r   r   r   r   )r   declarations_strdeclr   sepr   s         r"   rz   zCSSResolver.parse  s      %**3/ 	D::<!^^C0ND#s::<%%'D))+##%CCiCD8L/1	s   B*B,r7   )r   zstr | Iterable[tuple[str, str]]r   zdict[str, str] | Noner'   dict[str, str])r   r   r   r   r'   r   )r   r   r'   float | None)r   r&   r'   r   )r   r   r'   r   )r   r&   r   r   r   r{   r'   r&   )r   r	   r'   r(   )r   r&   r'   zIterator[tuple[str, str]])__name__
__module____qualname____doc__UNIT_RATIOSr   r   updater   r?   r=   r   r   rD   r*   r   r   r|   r}   r   r   r~   r   r@   rz   )r9   r   rD   r*   s   0000r"   r%   r%   ~   s4   
 K #'')$%! ##"&!"	
   $$&M&),-%**,		
M* 	O /E ?
 
 "&wtf86Ft6LL
 4
 
 dVn~dV-DEE
 !/!.1N  ,07/57/ )7/ 
	7/r " 
	, " 
	4. 26;--".-DH-	-^"E

s   'D>
E
r%   )r!   r&   r'   r   )r-   )rC   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      sC    # 	    $ 4 (V9xk kr+   