a
    ¥Q•hÜ@  ã                   @   s  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	£B ZG d
d„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$Zd%Zd&Z d'Z!d(d)„ Z"d*d+„ Z#d,d-„ Z$e	 %¡ Z	e	 &d.¡ e'ee	 ƒZ(d/S )0é    )Ú
hls_to_rgb)ÚcosÚdegreesÚradiansÚsiné   )Ú_BASIC_COLOR_KEYWORDSÚ_EXTENDED_COLOR_KEYWORDSÚ_HASH_REGEXPS)Úparse_one_component_value)gÛ>›‚Ûî?r   gÜ÷qÄAgê?)gÇ=_Œ"jî?r   g�ïÑÇlñ?>	   Úsrgbz
display-p3úxyz-d65zsrgb-linearzprophoto-rgbZrec2020Úxyzza98-rgbúxyz-d50>   ÚoklabÚoklchÚlchÚlabÚhslÚhwbc                       sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z‡ fdd„Z	dd„ Z
‡  ZS )ÚColorzùA 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                 C   sJ   |t v sJ |› d�ƒ‚|| _tdd„ |D ƒƒ| _tdtdt|ƒƒƒ| _d S )Nz is not a supported color spacec                 s   s"   | ]}|d u rd nt |ƒV  qd S ©N)Úfloat©Ú.0Z
coordinate© r   úH/var/www/sistema_ama/venv/lib/python3.9/site-packages/tinycss2/color4.pyÚ	<genexpr>   s   ÿz!Color.__init__.<locals>.<genexpr>g        ç      ð?)ÚCOLOR_SPACESÚspaceÚtupleÚcoordinatesÚmaxÚminr   Úalpha)Úselfr    r"   r%   r   r   r   Ú__init__   s    þ
zColor.__init__c                 C   s2   d  dd„ | jD ƒ¡}d| j› d|› d| j› d�S )Nú c                 s   s   | ]}t |ƒV  qd S r   )Ústrr   r   r   r   r   #   ó    z!Color.__repr__.<locals>.<genexpr>zcolor(z / ú))Újoinr"   r    r%   )r&   r"   r   r   r   Ú__repr__"   s    zColor.__repr__c                 c   s   | j E d H  | jV  d S r   ©r"   r%   ©r&   r   r   r   Ú__iter__&   s    zColor.__iter__c                 C   s   g | j ¢| j‘R | S r   r.   )r&   Úkeyr   r   r   Ú__getitem__*   s    zColor.__getitem__c                 C   s   t t| ƒƒS r   )Úhashr)   r/   r   r   r   Ú__hash__-   s    zColor.__hash__c                    sR   t |tƒrdS t |tƒr$t| ƒ|kS t |tƒrF| j|jkoD| j|jkS tƒ  |¡S )NF)Ú
isinstancer)   r!   r   r    r"   ÚsuperÚ__eq__)r&   Úother©Ú	__class__r   r   r7   0   s    


zColor.__eq__c                    sj  t dd„ | jD ƒƒ}|dkr d}|| jkr8t||| jƒS |dkrì| jdkr|t|d d |d	 d
 |d d
 ƒ}t||| jƒS | jdkrè|dd… \‰‰ ˆˆ  d
kr¶ˆˆˆ   fd }n$‡ ‡fdd„t|d d ddƒD ƒ}t||| jƒS �nv|dk�r‚| jdk�r"tg |¢t‘R Ž }t||| jƒS | jdk�rb|d tt	|d	 ƒƒ }|d t
t	|d	 ƒƒ }t|d ||tƒ}t||| jƒS �nà|dk�r| jdk�r®t|Ž }t||| jƒS | jdk�rb|d tt	|d	 ƒƒ }|d t
t	|d	 ƒƒ }t|d ||ƒ}t||| jƒS �nV|dk�rb| jdk�rBtg |¢t‘R Ž }t||| jƒS | jdk�rntg |¢t‘R Ž }t||| jƒS | jdk�rÂ|d tt	|d	 ƒƒ }|d t
t	|d	 ƒƒ }t||d ||f| jƒS | jdk�röt|Ž }tg |¢t‘R Ž }t||| jƒS | jdk�rb|d tt	|d	 ƒƒ }|d t
t	|d	 ƒƒ }t|d ||ƒ}tg |¢t‘R Ž }t||| jƒS t‚dS )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                 s   s   | ]}|pd V  qdS )r   Nr   r   r   r   r   r   H   r*   zColor.to.<locals>.<genexpr>r   r   r   r   r   éh  é   éd   r   r   Né   c                 3   s&   | ]}|d ˆ ˆ   ˆ d  V  qdS )r=   Nr   ©r   Úchannel©ÚblackÚwhiter   r   r   Z   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   r   rA   r   Úto9   sz    




ý
þ


zColor.to)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r-   r0   r2   r4   r7   rM   Ú__classcell__r   r   r9   r   r      s   	r   c                    sˆ  t | tƒrt| dd�}n| }|jdkr||jdkr4dS |jdkrJtdddƒS t |j¡ }rxtd	d
„ |D ƒƒ}td|dƒS �n|jdkrät	D ]T\‰ }||j
ƒ}|rŠ‡ fdd„| ¡ D ƒ}t|ƒdkrÊ| ¡ nd}td||ƒ  S qŠ�n |jdk�r„dd„ |jD ƒ}|j}	|	dk�r|^}
}t|ƒ}|dv �r\tdd
„ |ddd… D ƒƒ�r\d}|ddd… }n<|dk�rld}n,|dk�r”|d dk�r”| d¡ d}ndS |dd… t|dd… ƒ }}|du �rÄ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�r4|�s4t||ƒS |	d k�rN|�sNt||ƒS |	d!k�rh|�sht||ƒS |	dk�r„|�s„t|
||ƒ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                 s   s   | ]}|d  V  qdS )éÿ   Nr   r?   r   r   r   r       r*   zparse_color.<locals>.<genexpr>r   r3   c                    s   g | ]}t |ˆ  d ƒd ‘qS )é   rW   )Úint)r   Úgroup©Z
multiplierr   r   Ú
<listcomp>¦   s   ÿzparse_color.<locals>.<listcomp>é   Úfunctionc                 S   s   g | ]}|j d vr|‘qS ))Ú
whitespaceÚcomment)Útype©r   Útokenr   r   r   r\   ¬   s   
ÿÚcolor)é   é   c                 s   s   | ]}|d kV  qdS )ú,Nr   rb   r   r   r   r   ³   r*   Nr<   r>   Fre   ú/)rJ   Úrgba)r   Zhslar   r   r   r   r   )r5   r)   r   ra   Ú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)Úinputrc   rd   rJ   ÚregexpÚmatchZchannelsr%   ÚtokensÚnamer    ÚlengthZ
old_syntaxÚargsr   r[   r   Úparse_colorˆ   sp    






þÿ
(












r„   c                 C   sl   t | ƒdkrdS t | ƒdkrh| d jdkr@tdtd| d jƒƒS | d jdkrhtdtd| d jd ƒƒS dS )z¶Parse 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Ú
percentager=   N)ro   ra   r$   r#   rm   )rƒ   r   r   r   rt   Ò   s    rt   c                 C   s6   t | ƒtƒ dhdhfvrdS dd„ | D ƒ}td||ƒS )zØParse 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                 S   s8   g | ]0}|j d kr|jd n|j dkr0|jd nd‘qS )r…   rW   r†   r=   N©ra   rm   ©r   Úargr   r   r   r\   í   s   þz_parse_rgb.<locals>.<listcomp>r   )Ú_typesÚsetr   ©rƒ   r%   r"   r   r   r   ru   â   s    	ýru   c                 C   s”   t | dd… ƒtƒ dhdhfvr$dS t| d ƒ }du r<dS | d jdkrNdn|| d jdkrbdn| d j| d jdkr|dn| d jg}td||ƒS )	zÙParse 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   rT   r<   r   )rŠ   r‹   Ú
_parse_huera   rm   r   ©rƒ   r%   Zhuer"   r   r   r   rv   ô   s    	 ýrv   c                 C   sŒ   t | dd… ƒddhksdS t| d ƒ }du r4dS | d jdkrFdn|| d jdkrZdn| d j| d jdkrtdn| d jg}td||ƒS )	zãParse 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   rT   r<   r   ©rŠ   r�   ra   rm   r   rŽ   r   r   r   rw   	  s    	ýrw   c                 C   sž   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rZdnd | d jdkrpdn| d j| d jdkrŠdnd g}td	||ƒS )
zÎParse 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   rT   r   g      ô?r<   r   ©rŠ   ra   rm   r   rŒ   r   r   r   rx     s    	ûrx   c                 C   s¢   t | dd… ƒddhksdS t| d ƒ }du r4dS | d jdkrFdn| d j| d jdkr`dn| d j| d jdkrzdnd | d jdkr�dn|g}td	||ƒS )
zøParse 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).

    Nr<   r…   r†   r   rT   r   g      ø?r   r�   rŽ   r   r   r   ry   3  s    	üry   c                 C   s´   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 | d jdkrVdn| d j| d jdkrpdnd | d	 jdkr†dn| d	 j| d	 jdkr dnd g}td
||ƒS )zÎParse 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   rT   r   ç{®Gáz„?çü©ñÒMbp?r<   r   r�   rŒ   r   r   r   rz   I  s    	úrz   c                 C   s¸   t | dd… ƒddhksdS t| d ƒ }du r4dS | d jdkrFdn| d j| d jdkr`dnd | d jdkrvdn| d j| d jdkr�dnd	 | d jdkr¦dn|g}td
||ƒS )zõParse 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).

    Nr<   r…   r†   r   rT   r   r‘   r’   r   r�   rŽ   r   r   r   r{   _  s    	ûr{   c                 C   sV   t |ƒddhksdS | jdks,| j } tvr0dS | dkr<d} dd„ |D ƒ}t| ||ƒS )	zKParse a color space name list of coordinates.

    Ranges are [0, 1].

    r…   r†   NrT   r   r   c                 S   s4   g | ],}|j d kr|jn|j dkr,|jd nd‘qS )r…   r†   r=   Nr‡   rˆ   r   r   r   r\   ‚  s   þz _parse_color.<locals>.<listcomp>)rŠ   ra   rj   Ú_FUNCTION_SPACESr   )r    rƒ   r%   r"   r   r   r   r|   v  s    ýr|   c                 C   sœ   | j dkr| jd S | j dkr€| jdkr2| jd S | jdkrN| jd d d S | jdkrft| jƒd S | jdkr˜| jd d S n| j d	kr˜| jd
kr˜dS dS )zCParse hue token.

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

    r…   r;   Ú	dimensionÚdegÚgradi�  ÚradÚturnrT   Únoner   N)ra   rm   Úunitr   rj   )rc   r   r   r   r�   ‰  s    







r�   c                 C   s6   t ƒ }| D ]&}|jdkr$|jdkr$q
| |j¡ q
|S )z3Get a set of token types, ignoring ``none`` values.rT   r™   )r‹   ra   rj   Úadd)r€   Útypesrc   r   r   r   rŠ   ž  s    rŠ   g&´—Ð^:Œ@gÖ|�ÒT#‚?))g±3DÊL¡ó?g˜’íÕžÙá¿g·|y›OÒ?)gŸŸöªXÆ¤¿g«‚@FíËñ?gÍŽ¨[²¿)gƒvy-�³¿gìÂy"¿ùÚ¿gfm"r
dù?))gƒ
+ÿÿÿï?gˆã/™]Ù?gÈœ!uŸË?)g—Yb  ð?gÂ€ q»¿gˆ[H¿X°¿)g9­  ð?g–p›soè¶¿gÄ!F½ì©ô¿c                 C   s²   | |d  }||d  }||d  }|t kr4|d nt| d d }|t krT|d nt| d d }|t krt|d nt| d d }	d| d }
d||  }d||	  }|
||fS )	Nr   r   r<   gUUUUUUÕ?rX   ét   éô  éÈ   ©ô   _Îµô   _Îº)ÚXÚYÚZÚdÚxÚyÚzÚf0Úf1Úf2ÚLrK   rL   r   r   r   rG   ¶  s       rG   c                 C   s¾   | d d }|d | }||d  }|d t kr8|d nd| d t }| tt  krd| d d d n| t }|d t kr€|d nd| d t }	||d  }
||d  }|	|d  }|
||fS )	NrX   r�   rž   rŸ   r>   r   r   r<   r    )r­   rK   rL   r¦   r«   rª   r¬   r§   r¨   r©   r£   r¤   r¥   r   r   r   rD   Ã  s    $$$rD   c                    sF   | ||f‰ ‡ fdd„t dƒD ƒ‰‡fdd„t dƒD ƒ\}}}|||fS )Nc                    s(   g | ] ‰ t ‡ ‡fd d„tdƒD ƒƒ‘qS )c                 3   s"   | ]}t ˆ  | ˆ|  V  qd S r   )Ú_OKLAB_TO_LMS©r   Új)Úir   r   r   r   Ò  r*   ú+_oklab_to_xyz.<locals>.<listcomp>.<genexpr>r>   ©ÚsumÚrange©r   )r   ©r±   r   r\   Ò  r*   z!_oklab_to_xyz.<locals>.<listcomp>r>   c                    s(   g | ] ‰ t ‡ ‡fd d„tdƒD ƒƒ‘qS )c                 3   s&   | ]}t ˆ  | ˆ| d   V  qdS )r>   N)Ú_LMS_TO_XYZr¯   )r±   Úlmsr   r   r   Ó  r*   r²   r>   r³   r¶   )r¹   r·   r   r\   Ó  r*   )rµ   )r­   rK   rL   r£   r¤   r¥   r   )r   r¹   r   rF   Ð  s    
rF   )Zrebeccapurple)éf   é3   é™   N))Zcolorsysr   Úmathr   r   r   r   Zcolor3r   r	   r
   Úparserr   rE   rH   r“   r   r   r„   rt   ru   rv   rw   rx   ry   rz   r{   r|   r�   rŠ   r¢   r¡   r¸   r®   rG   rD   rF   ÚcopyÚappendÚdictrk   r   r   r   r   Ú<module>   s<   wJ
