
    ?wg@                     @   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	jJ                         Z	 e	jL                  d        e'ee	z         Z(y )!    )
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        |                  | _        y )Nz is not a supported color spacec              3   :   K   | ]  }|d n
t        |        y wN)float.0
coordinates     F/var/www/horilla/myenv/lib/python3.12/site-packages/tinycss2/color4.py	<genexpr>z!Color.__init__.<locals>.<genexpr>   s'      !+ &DE*,==!+s   g              ?)COLOR_SPACESspacetuplecoordinatesmaxminr!   alpha)selfr)   r+   r.   s       r%   __init__zColor.__init__   sY    $O/N&OO$
  !+)!+ + SU5\23
    c                     dj                  d | j                  D              }d| j                   d| d| j                   dS )N c              3   2   K   | ]  }t        |        y wr    )strr"   s     r%   r&   z!Color.__repr__.<locals>.<genexpr>#   s     R:s:Rs   zcolor(z / ))joinr+   r)   r.   )r/   r+   s     r%   __repr__zColor.__repr__"   s?    hhRAQAQRR

|1[MTZZLBBr1   c              #   T   K   | j                   E d {    | j                   y 7 wr    r+   r.   r/   s    r%   __iter__zColor.__iter__&   s$     ####jj 	$s   (&(c                 >    g | j                   | j                  |   S r    r:   )r/   keys     r%   __getitem__zColor.__getitem__*   s!    .!!.4::.s33r1   c                 *    t        t        |             S r    )hashr5   r;   s    r%   __hash__zColor.__hash__-   s    CIr1   c                    t        |t              ryt        |t              rt        |       |k(  S t        |t              r4| j                  |j                  k(  xr | j
                  |j
                  k(  S t        |   |      S )NF)
isinstancer5   r*   r   r)   r+   super__eq__)r/   other	__class__s     r%   rF   zColor.__eq__0   sk    eS!u%;%''u%::,V1A1AUEVEV1VVw~e$$r1   c                   	 t        d | j                  D              }|dk(  rd}|| j                  k(  rt        ||| j                        S |dk(  r| j                  dk(  r6t        |d   dz  |d   d	z  |d
   d	z        }t        ||| j                        S | j                  dk(  rQ|d
d \  		z   d	k\  r		z   z  fdz  }n	fdt        |d   dz  dd
      D        }t        ||| j                        S t        |dk(  r| j                  dk(  r(t        g |t         }t        ||| j                        S | j                  dk(  rf|d
   t        t        |d               z  }|d
   t        t        |d               z  }t        |d   ||t              }t        ||| j                        S t        |dk(  r| j                  dk(  rt        | }t        ||| j                        S | j                  dk(  ra|d
   t        t        |d               z  }|d
   t        t        |d               z  }t        |d   ||      }t        ||| j                        S t        |dk(  r| j                  dk(  r(t        g |t         }t        ||| j                        S | j                  dk(  r(t        g |t         }t        ||| j                        S | j                  dk(  rW|d
   t        t        |d               z  }|d
   t        t        |d               z  }t        ||d   ||f| j                        S | j                  dk(  r0t        | }t        g |t         }t        ||| j                        S | j                  dk(  rr|d
   t        t        |d               z  }|d
   t        t        |d               z  }t        |d   ||      }t        g |t         }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   | ]
  }|xs d   yw)r   N r"   s     r%   r&   zColor.to.<locals>.<genexpr>H   s     O
JO!OOs   r   r   r   r   r   h     d   r   r   N   c              3   @   K   | ]  }|d z
  z
  z  z   d z    yw)rN   NrK   )r#   channelblackwhites     r%   r&   zColor.to.<locals>.<genexpr>Z   s3      Q# "S5[5%89UBcIQs   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)
r/   r)   r+   rgbr   abr   rR   rS   s
           @@r%   tozColor.to9   s    Od>N>NOOE>EDJJTZZ88f_zzU" NS(NS(NS(
 UC44u$*12u5=C' EEM24q8CQ'1+a.32FQ'OQC UC44P "!O izzU"!4;44UC44u$NSQ)@%AANSQ)@%AA!+a.!Q<UC44> "!= izzW$#[1UC44w&NSQ)@%AANSQ)@%AA#KNAq9UC44, "!+ e^zzY&!4;44UC44y(!4;44UC44u$NSQ)@%AANSQ)@%AAU[^Q$:DJJGGw&#[1!,3,,UC44w&NSQ)@%AANSQ)@%AA#KNAq9!,3,,UC44!!r1   )__name__
__module____qualname____doc__r0   r8   r<   r?   rB   rF   r]   __classcell__)rH   s   @r%   r   r      s-    4C4%L"r1   r   c                    t        | t              rt        | d      }n| }|j                  dk(  rm|j                  dk(  ry|j                  dk(  rt        ddd      S t        j                  |j                        x}rt        d	 |D              }t        d|d
      S y|j                  dk(  rt        D ]u  \  }} ||j                        }|s|j                         D cg c]  }t        ||z  d      dz   }}t        |      dk(  r|j                         nd
}	t        d||	      c S  y|j                  dk(  rA|j                  D cg c]  }|j                  dvr| }
}j                   }|dk(  r|
^}}
t        |
      }|dv r#t#        d |
d
dd   D              rd}|
ddd   }
n*|dk(  rd}n"|dk(  r|
d   dk(  r|
j                  d       d}ny|
dd t%        |
dd       }	}|	y|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t1        ||	      S |d k(  r|st3        ||	      S |dk(  r|st5        ||	      S yyyc c}w c c}w )!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    yw)   NrK   )r#   rQ   s     r%   r&   zparse_color.<locals>.<genexpr>   s     ;'#;   r   rA      ri      function)
whitespacecommentcolor)      c              3   &   K   | ]	  }|d k(    yw),NrK   )r#   tokens     r%   r&   zparse_color.<locals>.<genexpr>   s     #KUESL#Krj   NrM   rO   Frq   /)rZ   rgba)r   hslar   r   r   r   r   )rD   r5   r   typelower_valuer   _COLOR_KEYWORDSgetr*   r   valuegroupsintlenpop	arguments
lower_nameall_parse_alpha
_parse_rgb
_parse_hsl
_parse_hwb
_parse_lab
_parse_lch_parse_oklab_parse_oklch_parse_color)inputru   rp   rZ   
multiplierregexpmatchgroupchannelsr.   tokensnamer)   length
old_syntaxargss                   r%   parse_colorr      s    %)%tDzzW.!-/A..%))%*;*;<<U<;U;;Ca(( = 
v	"/ 	6J5;;'E "'1 
*B/#51 1 +.h-1*<!VXu55	6 
z	!$<zz!:: < < 7?#NEFVV#KfQTTl#K KJCaC[Fq[Jq[VAY#-JJqMJRaj,vabz":e=?"dE**_$dE**U]dE**U]:dE**U]:dE**W_Ze,,W_Ze,,W_ZtU33 &0_G 
"1<s   I=	Jc                    t        |       dk(  ryt        |       dk(  rn| 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 yy)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   ry   r-   r,   r}   )r   s    r%   r   r      s     4yA~	Ta7<<8#q#aa/00!W\\\)q#aa!4566 * 
r1   c                     t        |       t               dhdhfvry| D cg c]@  }|j                  dk(  r|j                  dz  n|j                  dk(  r|j                  dz  ndB }}t	        d||      S c c}w )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   Nri   rN   r   )_typessetry   r}   r   )r   r.   argr+   s       r%   r   r      s     d|CEH:~>>   88x/		C88|3		C	>K  e,,	s   AA4c                 0   t        | dd       t               dhdhfvryt        | d         x}y| 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_huery   r}   r   r   r.   huer+   s       r%   r   r      s     d12hzL>BB$q'""+Q'SQ'T!W]]Q'T!W]]K
 U++r1   c                    t        | dd       ddhk  syt        | d         x}y| 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   ry   r}   r   r   s       r%   r   r   	  s     $qr(,77$q'""+Q'SQ'T!W]]Q'T!W]]K
 U++r1   c                 j   t        |       ddhk  sy| 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   ry   r}   r   r   r.   r+   s      r%   r   r     s     $<Hl33Q'T!W]]Q'GMM$q',,(":QEQ'GMM$q',,(":QEK U++r1   c                 J   t        | dd       ddhk  syt        | d         x}y| 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(,77$q'""+Q'T!W]]Q'GMM$q',,(":QDQ'S	K U++r1   c                    t        |       ddhk  sy| 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Q'GMM$q',,(":QEQ'GMM$q',,(":QFQ'GMM$q',,(":QFK +u--r1   c                 x   t        | dd       ddhk  syt        | d         x}y| 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(,77$q'""+Q'GMM$q',,(":QEQ'GMM$q',,(":QFQ'SK +u--r1   c                 .   t        |      ddhk  sy| j                  dk7  s| j                  x} t        vry| dk(  rd} |D cg c]=  }|j                  dk(  r|j                  n|j                  dk(  r|j                  dz  nd? }}t        | ||      S c c}w )zKParse a color space name list of coordinates.

    Ranges are [0, 1].

    r   r   Nre   r   r   rN   )r   ry   rz   _FUNCTION_SPACESr}   r   )r)   r   r.   r   r+   s        r%   r   r   v  s     $<Hl33zzW%*;*;!;DT T~   XX)		88|3		C	>K  U++	s   ABc                    | j                   dk(  r| j                  dz  S | j                   dk(  r| 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 y| j                   d	k(  r| j                  d
k(  ryyy)zCParse hue token.

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

    r   rL   	dimensiondeggradi  radturnre   noner   N)ry   r}   unitr   rz   )ru   s    r%   r   r     s     zzX{{S  	{	"::;;$$ZZ6!;;$s*S00ZZ5 5;;'#--ZZ6!;;$s** "	w	5#4#4#> $?	r1   c                     t               }| D ]<  }|j                  dk(  r|j                  dk(  r"|j                  |j                         > |S )z3Get a set of token types, ignoring ``none`` values.re   r   )r   ry   rz   add)r   typesru   s      r%   r   r     sK    EE :: U%6%6&%@		%** Lr1   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         kD  r|dz  nt        |z  dz   dz  }|t         kD  r|dz  nt        |z  dz   dz  }|t         kD  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7Nr1   c                 4   | dz   dz  }|dz  |z   }||dz  z
  }|dz  t         kD  r|dz  nd|z  dz
  t        z  }| t        t         z  kD  r| dz   dz  dz  n| t        z  }|dz  t         kD  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!GcMqb2'<A"#cCi-1r6S.Q	QWA!GcMqb2'<A	AaDA	AaDA	AaDAa7Nr1   c           	         | ||ft        d      D cg c]   t        fdt        d      D              " c}t        d      D cg c]   t        fdt        d      D              " c}\  }}}|||fS c c}w c c}w )NrO   c              3   B   K   | ]  }t            |   |   z    y wr    )_OKLAB_TO_LMS)r#   jir   s     r%   r&   z _oklab_to_xyz.<locals>.<genexpr>  s$     >}Q"SV+>s   c              3   H   K   | ]  }t            |   |   d z  z    yw)rO   N)_LMS_TO_XYZ)r#   r   r   lmss     r%   r&   z _oklab_to_xyz.<locals>.<genexpr>  s'     CQ;q>!$s1vqy0Cs   ")rangesum)	r   r[   r\   r   r   r   r   r   r   s	      `   @@r%   rV   rV     so    a)CHMa
Q13>U1X>>
QCMRSTXVsC%(CCVGAq!a7N RVs   %A>%B)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   r1   r%   <module>r      s     + + R R -:: 
  "PPt" t"nG4T7 -$,*,*,*,,.,..,&* 


 9388:      A B,/GGHr1   