
    6`g@                     F   d dl mZ d dlmZmZmZmZ ddlmZm	Z	m
Z
 ddlmZ dZdZh dZeh d	z  Z G d
 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dZdZ dZ!d Z"d Z#d Z$ e	j%                    Z	 e	j&        d            e'ee	z             Z(d S )!    )
hls_to_rgb)cosdegreesradianssin   )_BASIC_COLOR_KEYWORDS_EXTENDED_COLOR_KEYWORDS_HASH_REGEXPS)parse_one_component_value)g>?r   gqAg?)g=_"j?r   gl?>	   a98-rgb
display-p3srgb-linearprophoto-rgbxyzsrgbrec2020xyz-d50xyz-d65>   hslhwblablchoklaboklchc                   F     e Zd ZdZd Zd Zd Zd Zd Z fdZ	d Z
 xZS )	ColorzA specified color in a defined color space.

    The color space is one of ``COLOR_SPACES``.

    Coordinates are floats with undefined ranges, but alpha channel is clipped
    to [0, 1]. Coordinates can also be set to ``None`` when undefined.

    c           	          |t           v sJ | d            || _        t          d |D                       | _        t	          dt          dt          |                              | _        d S )Nz is not a supported color spacec              3   <   K   | ]}|d nt          |          V  d S N)float.0
coordinates     Q/var/www/CMSBlueprintStation/venv/lib/python3.11/site-packages/tinycss2/color4.py	<genexpr>z!Color.__init__.<locals>.<genexpr>   sG       !+ !+ &DDE*,=,=!+ !+ !+ !+ !+ !+    g              ?)COLOR_SPACESspacetuplecoordinatesmaxminr!   alpha)selfr*   r,   r/   s       r%   __init__zColor.__init__   s    $$$&O&O&O$$$
  !+ !+)!+ !+ !+ + + SU5\\2233


r'   c                 v    d                     d | j        D                       }d| j         d| d| j         dS )N c              3   4   K   | ]}t          |          V  d S r    )strr"   s     r%   r&   z!Color.__repr__.<locals>.<genexpr>#   s(      RR:s:RRRRRRr'   zcolor(z / ))joinr,   r*   r/   )r0   r,   s     r%   __repr__zColor.__repr__"   sJ    hhRRAQRRRRRB
BB[BBTZBBBBr'   c              #   6   K   | j         E d {V  | j        V  d S r    r,   r/   r0   s    r%   __iter__zColor.__iter__&   s5      ########jr'   c                 0    g | j         | j        R |         S r    r:   )r0   keys     r%   __getitem__zColor.__getitem__*   s    .!.4:..s33r'   c                 :    t          t          |                     S r    )hashr5   r;   s    r%   __hash__zColor.__hash__-   s    CIIr'   c                 .   t          |t                    rdS t          |t                    rt          |           |k    S t          |t                    r | j        |j        k    o| j        |j        k    S t                                          |          S )NF)
isinstancer5   r+   r   r*   r,   super__eq__)r0   other	__class__s     r%   rF   zColor.__eq__0   s    eS!! 	W5u%% 	W;;%''u%% 	W:,V1AUEV1VVww~~e$$$r'   c                   	 t          d | j        D                       }|dk    rd}|| j        k    rt          ||| j                  S |dk    r| j        dk    rBt          |d         dz  |d         d	z  |d
         d	z            }t          ||| j                  S | j        dk    r`|d
d         \  		z   d	k    r		z   z  fdz  }n'	fdt          |d         dz  dd
          D             }t          ||| j                  S n]|dk    r| j        dk    r)t          g |t          R  }t          ||| j                  S | j        dk    r|d
         t          t          |d                             z  }|d
         t          t          |d                             z  }t          |d         ||t                    }t          ||| j                  S n|dk    r| j        dk    rt          | }t          ||| j                  S | j        dk    r|d
         t          t          |d                             z  }|d
         t          t          |d                             z  }t          |d         ||          }t          ||| j                  S n|dk    r| j        dk    r)t          g |t          R  }t          ||| j                  S | j        dk    r)t          g |t          R  }t          ||| j                  S | j        dk    ru|d
         t          t          |d                             z  }|d
         t          t          |d                             z  }t          ||d         ||f| j                  S | j        dk    r2t          | }t          g |t          R  }t          ||| j                  S | j        dk    r|d
         t          t          |d                             z  }|d
         t          t          |d                             z  }t          |d         ||          }t          g |t          R  }t          ||| j                  S t          )a  Return new instance with coordinates transformed to given ``space``.

        The destination color space is one of ``SPACES``.

        ``None`` coordinates are always transformed into ``0`` values.

        Here are the supported combinations:

        - from hsl and hwb to srgb;
        - from lab and lch to xyz-d50;
        - from oklab and oklch to xyz-d65;
        - from xyz-d50, xyz-d65, lch, oklab and oklch to lab.

        c              3      K   | ]}|pd V  	dS )r   N r"   s     r%   r&   zColor.to.<locals>.<genexpr>H   s&      OO
JO!OOOOOOr'   r   r   r   r   r   h     d   r   r   N   c              3   :   K   | ]}|d z
  z
  z  z   d z  V  dS )rN   NrK   )r#   channelblackwhites     r%   r&   zColor.to.<locals>.<genexpr>Z   sW       Q Q# "S5[5%89UBcIQ Q Q Q Q Qr'   g      ?r   r   r   r   r   )r+   r,   r*   r   r/   r   _lab_to_xyzD50r   r   r   _oklab_to_xyz_xyz_to_labD65NotImplementedError)
r0   r*   r,   rgbr   abr   rR   rS   s
           @@r%   tozColor.to9   s    OOd>NOOOOOE>>EDJTZ888f__zU"" NS(NS(NS( 
 UC444u$$*122u5=C'' EEM24q8CCQ Q Q Q Q'1+a.32FQ'O'OQ Q QC UC444 % izU""!4;4444UC444u$$NSQ)@)@%A%AANSQ)@)@%A%AA!+a.!Q<<UC444	 %
 izW$$#[1UC444w&&NSQ)@)@%A%AANSQ)@)@%A%AA#KNAq99UC444	 '
 e^^zY&&!4;4444UC444y((!4;4444UC444u$$NSQ)@)@%A%AANSQ)@)@%A%AAU[^Q$:DJGGGw&&#[1!,3,,,,UC444w&&NSQ)@)@%A%AANSQ)@)@%A%AA#KNAq99!,3,,,,UC444!!r'   )__name__
__module____qualname____doc__r1   r8   r<   r?   rB   rF   r]   __classcell__)rH   s   @r%   r   r      s         4 4 4C C C  4 4 4  % % % % %L" L" L" L" L" L" L"r'   r   c                 x   t          | t                    rt          | d          }n| }|j        dk    rv|j        dk    rdS |j        dk    rt          ddd          S t                              |j                  x}r*t          d	 |D                       }t          d|d
          S dS |j        dk    r}t          D ]s\  } ||j
                  }|r\fd|                                D             }t          |          dk    r|                                nd
}t          d||          c S tdS |j        dk    rvd |j        D             }|j        }	|	dk    r|^}
}t          |          }|dv r0t!          d |d
dd         D                       rd}|ddd         }n5|dk    rd}n,|dk    r$|d         dk    r|                    d           d}ndS |dd         t#          |dd                   }}|dS |	dv rt%          ||          S |	dv rt'          ||          S |	dk    rt)          ||          S |	dk    r|st+          ||          S |	dk    r|st-          ||          S |	dk    r|st/          ||          S |	dk    r|st1          ||          S |	dk    r|st3          |
||          S dS dS dS ) a  Parse a color value as defined in CSS Color Level 4.

    https://www.w3.org/TR/css-color-4/

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :returns:
        * :obj:`None` if the input is not a valid color value.
          (No exception is raised.)
        * The string ``'currentcolor'`` for the ``currentcolor`` keyword
        * A :class:`Color` object for every other values, including keywords.

    T)skip_commentsidentcurrentcolortransparentr   )r   r   r   r   c              3       K   | ]	}|d z  V  
dS )   NrK   )r#   rQ   s     r%   r&   zparse_color.<locals>.<genexpr>   s&      ;;'#;;;;;;r'   r   rA   c                 <    g | ]}t          |z  d           dz  S )   ri   )int)r#   group
multipliers     r%   
<listcomp>zparse_color.<locals>.<listcomp>   s=     1 1 1 
*B//#51 1 1r'      functionc                 $    g | ]}|j         d v|S ))
whitespacecomment)typer#   tokens     r%   ro   zparse_color.<locals>.<listcomp>   s0     < < <z!::: :::r'   color)      c              3   "   K   | ]
}|d k    V  dS ),NrK   rv   s     r%   r&   zparse_color.<locals>.<genexpr>   s&      #K#KUESL#K#K#K#K#K#Kr'   NrM   rO   Fry   /)rZ   rgba)r   hslar   r   r   r   r   )rD   r5   r   ru   lower_valuer   _COLOR_KEYWORDSgetr+   r   valuegroupslenpop	arguments
lower_nameall_parse_alpha
_parse_rgb
_parse_hsl
_parse_hwb
_parse_lab
_parse_lch_parse_oklab_parse_oklch_parse_color)inputrw   rx   rZ   regexpmatchchannelsr/   tokensnamer*   length
old_syntaxargsrn   s                 @r%   parse_colorr      s}    % )%tDDDzW..!>-//A...%))%*;<<<U 	);;U;;;;;Ca(((	) 	) 
v		"/ 	6 	6JF5;''E 61 1 1 1!&1 1 1 +.h--1*<*<!VXu555556	6 	6 
z	!	!< <$< < < 7??#NEFVV#K#KfQTTl#K#K#K K KJCCaC[FFq[[JJq[[VAY#--JJqMMMJJFRaRj,vabbz":":e=F?""dE***_$$dE***U]]dE***U]]:]dE***U]]:]dE***W__Z_e,,,W__Z_e,,,W__Z_tU333I 
"	!F ___r'   c                 H   t          |           dk    rdS t          |           dk    rw| d         j        dk    r)t          dt          d| d         j                            S | d         j        dk    r.t          dt          d| d         j        dz                      S dS dS )zParse a list of one alpha value.

    If args is a list of a single INTEGER, NUMBER or PERCENTAGE token,
    return its value clipped to the 0..1 range. Otherwise, return None.

    r   r(   r   number
percentagerN   N)r   ru   r.   r-   r   )r   s    r%   r   r      s     4yyA~~r	Ta7<8##q#aa//000!W\\))q#aa!455666	 
 *)r'   c                     t          |           t                      dhdhfvrdS d | D             }t          d||          S )zParse a list of RGB channels.

    If args is a list of 3 NUMBER tokens or 3 PERCENTAGE tokens, return
    sRGB :class:`Color`. Otherwise, return None.

    Input R, G, B ranges are [0, 255], output are [0, 1].

    r   r   Nc                 f    g | ].}|j         d k    r
|j        dz  n|j         dk    r
|j        dz  nd/S )r   ri   r   rN   Nru   r   r#   args     r%   ro   z_parse_rgb.<locals>.<listcomp>   sW         8x//	C8|33	C  r'   r   )_typessetr   r   r/   r,   s      r%   r   r      s]     d||CEEH:~>>>    K e,,,r'   c                 V   t          | dd                   t                      dhdhfvrdS t          | d                   x}dS | d         j        dk    rdn|| d         j        dk    rdn| d         j        | d         j        dk    rdn| d         j        g}t          d||          S )	zParse a list of HSL channels.

    If args is a list of 1 NUMBER or ANGLE token and 2 PERCENTAGE tokens,
    return HSL :class:`Color`. Otherwise, return None.

    H range is [0, 360). S, L ranges are [0, 100].

    r   Nr   r   r   re   rM   r   )r   r   
_parse_hueru   r   r   r   r/   huer,   s       r%   r   r      s     d122hzL>BBB$q'"""+Q''SQ''T!W]Q''T!W]K
 U+++r'   c                 <   t          | dd                   ddhk    sdS t          | d                   x}dS | d         j        dk    rdn|| d         j        dk    rdn| d         j        | d         j        dk    rdn| d         j        g}t	          d||          S )	zParse a list of HWB channels.

    If args is a list of 1 NUMBER or ANGLE token and 2 NUMBER or PERCENTAGE
    tokens, return HWB :class:`Color`. Otherwise, return None.

    H range is [0, 360). W, B ranges are [0, 100].

    r   Nr   r   r   re   rM   r   r   r   ru   r   r   r   s       r%   r   r   	  s     $qrr(,777$q'"""+Q''SQ''T!W]Q''T!W]K
 U+++r'   c                 h   t          |           ddhk    sdS | d         j        dk    rdn| d         j        | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  g}t          d	||          S )
zParse a list of CIE Lab channels.

    If args is a list of 3 NUMBER or PERCENTAGE tokens, return Lab
    :class:`Color`. Otherwise, return None.

    L range is [0, 100]. a, b ranges are [-125, 125].

    r   r   Nr   re   r   g      ?rM   r   r   ru   r   r   r   s      r%   r   r     s     $<<Hl333Q''T!W]Q''GM$q',(":":QQEQ''GM$q',(":":QQEK U+++r'   c                 h   t          | dd                   ddhk    sdS t          | d                   x}dS | d         j        dk    rdn| d         j        | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  | d         j        dk    rdn|g}t	          d	||          S )
zParse a list of CIE LCH channels.

    If args is a list of 2 NUMBER or PERCENTAGE tokens and 1 NUMBER or ANGLE
    token, return LCH :class:`Color`. Otherwise, return None.

    L range is [0, 100]. C range is [0, 150]. H ranges is [0, 360).

    NrM   r   r   r   re   r   g      ?r   r   r   s       r%   r   r   3  s     $rr(,777$q'"""+Q''T!W]Q''GM$q',(":":QQDQ''S	K U+++r'   c                    t          |           ddhk    sdS | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  | d	         j        dk    rdn"| d	         j        | d	         j        dk    rdndz  g}t          d
||          S )zParse a list of Oklab channels.

    If args is a list of 3 NUMBER or PERCENTAGE tokens, return Oklab
    :class:`Color`. Otherwise, return None.

    L range is [0, 100]. a, b ranges are [-0.4, 0.4].

    r   r   Nr   re   r   {Gz?Mbp?rM   r   r   r   s      r%   r   r   I  s     $<<Hl333Q''GM$q',(":":QQEQ''GM$q',(":":QQFQ''GM$q',(":":QQFK +u---r'   c                    t          | dd                   ddhk    sdS t          | d                   x}dS | d         j        dk    rdn"| d         j        | d         j        dk    rdndz  | d         j        dk    rdn"| d         j        | d         j        dk    rdnd	z  | d         j        dk    rdn|g}t	          d
||          S )zParse a list of Oklch channels.

    If args is a list of 2 NUMBER or PERCENTAGE tokens and 1 NUMBER or ANGLE
    token, return Oklch :class:`Color`. Otherwise, return None.

    L range is [0, 1]. C range is [0, 0.4]. H range is [0, 360).

    NrM   r   r   r   re   r   r   r   r   r   r   s       r%   r   r   _  s     $rr(,777$q'"""+Q''GM$q',(":":QQEQ''GM$q',(":":QQFQ''SK +u---r'   c                     t          |          ddhk    sdS | j        dk    s| j        x} t          vrdS | dk    rd} d |D             }t	          | ||          S )zKParse a color space name list of coordinates.

    Ranges are [0, 1].

    r   r   Nre   r   r   c                 `    g | ]+}|j         d k    r|j        n|j         dk    r
|j        dz  nd,S )r   r   rN   Nr   r   s     r%   ro   z _parse_color.<locals>.<listcomp>  sS         X))		8|33	C  r'   )r   ru   r   _FUNCTION_SPACESr   )r*   r   r/   r,   s       r%   r   r   v  s     $<<Hl333zW%*;!;DT T T~~    K U+++r'   c                 R   | j         dk    r
| j        dz  S | j         dk    rl| j        dk    r
| j        dz  S | j        dk    r| j        dz  dz  dz  S | j        dk    rt          | j                  dz  S | j        dk    r| j        dz  dz  S dS | j         d	k    r| j        d
k    rdS dS dS )zCParse hue token.

    Range is [0, 360). ``none`` value is 0.

    r   rL   	dimensiondeggradi  radturnre   noner   N)ru   r   unitr   r   )rw   s    r%   r   r     s     zX{S  	{	"	":;$$Z6!!;$s*S00Z5  5;''#--Z6!!;$s** "!	w		5#4#>#>q 
	#>#>r'   c                     t                      }| D ]3}|j        dk    r|j        dk    r|                    |j                   4|S )z3Get a set of token types, ignoring ``none`` values.re   r   )r   ru   r   add)r   typesrw   s      r%   r   r     sS    EEE  :  U%6&%@%@		%*Lr'   g&^:@g|T#?))g3DL?g՞g|yO?)gXƤg@F?g͎[)gvy-gy"ڿgfm"r
d?))g
+?g/]?gȜ!u?)gYb  ?g qg[HX)g9  ?gpso趿g!Fc                 >   | |d         z  }||d         z  }||d         z  }|t           k    r|dz  nt          |z  dz   dz  }|t           k    r|dz  nt          |z  dz   dz  }|t           k    r|dz  nt          |z  dz   dz  }	d|z  dz
  }
d||z
  z  }d||	z
  z  }|
||fS )	Nr   r   rM   gUUUUUU?rk   t           _ε   _κ)XYZdxyzf0f1f2Lr[   r\   s                r%   rW   rW     s    	AaDA	AaDA	AaDASusQw|s&:BSusQw|s&:BSusQw|s&:B	rRArBwArBwAa7Nr'   c                 Z   | dz   dz  }|dz  |z   }||dz  z
  }|dz  t           k    r|dz  nd|z  dz
  t          z  }| t          t           z  k    r| dz   dz  dz  n	| t          z  }|dz  t           k    r|dz  nd|z  dz
  t          z  }	||d         z  }
||d         z  }|	|d         z  }|
||fS )	Nrk   r   r   r   rO   r   r   rM   r   )r   r[   r\   r   r   r   r   r   r   r   r   r   r   s                r%   rT   rT     s    
b&CB	
S2B	a#gB!GcMMqb2'<A"#cCi--1r6S.Q		QWA!GcMMqb2'<A	AaDA	AaDA	AaDAa7Nr'   c                     | ||ffdt          d          D             fdt          d          D             \  }}}|||fS )Nc                 d    g | ]+t          fd t          d          D                       ,S )c              3   P   K   | ] }t                    |         |         z  V  !d S r    )_OKLAB_TO_LMS)r#   jir   s     r%   r&   z+_oklab_to_xyz.<locals>.<listcomp>.<genexpr>  s6      >>}Q"SV+>>>>>>r'   rO   sumrange)r#   r   r   s    @r%   ro   z!_oklab_to_xyz.<locals>.<listcomp>  s@    
Q
Q
Q13>>>>>U1XX>>>>>
Q
Q
Qr'   rO   c                 d    g | ]+t          fd t          d          D                       ,S )c              3   V   K   | ]#}t                    |         |         d z  z  V  $dS )rO   N)_LMS_TO_XYZ)r#   r   r   lmss     r%   r&   z+_oklab_to_xyz.<locals>.<listcomp>.<genexpr>  s9      CCQ;q>!$s1vqy0CCCCCCr'   rO   r   )r#   r   r   s    @r%   ro   z!_oklab_to_xyz.<locals>.<listcomp>  s@    VVVsCCCCC%((CCCCCVVVr'   )r   )r   r[   r\   r   r   r   r   r   s         @@r%   rV   rV     s_    a)C
Q
Q
Q
Qa
Q
Q
QCVVVVUSTXXVVVGAq!a7Nr'   )rebeccapurple)f   3      N))colorsysr   mathr   r   r   r   color3r	   r
   r   parserr   rU   rX   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rT   rV   copyappenddictr   rK   r'   r%   <module>r      s         + + + + + + + + + + + + R R R R R R R R R R - - - - - -::   
  "P"P"PPt" t" t" t" t" t" t" t"nG4 G4 G4T7 7 7 - - -$, , ,*, , ,*, , ,*, , ,,. . .,. . .., , ,&  *   

 
 

 
 
   938::     A B B B$,/GGHHr'   