a
    ZXh@                     @   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   gqAg?)g=_"j?r   gl?>	   xyz-d50za98-rgbzprophoto-rgbz
display-p3Zrec2020xyz-d65zsrgb-linearxyzsrgb>   oklchlabhslhwblchoklabc                       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 )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                 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   T/var/www/viveiro_mudafortebrasil/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rt| }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rt| }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   ZchannelZblackZ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   r@   r   to9   sz    








zColor.to)__name__
__module____qualname____doc__r'   r-   r0   r2   r4   r7   rJ   __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rt	D ]T\ }||j
}|r fdd| D }t|dkr| nd}td||  S qn|jdkrd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 rdS |	dv rt||S |	dv rt||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|st|
||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)Zskip_commentsidentZcurrentcolorZ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 )   rQ   )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   rV      s   
color)      c                 s   s   | ]}|d kV  qdS ),Nr   r\   r   r   r   r      r*   Nr<   r>   Fr_   /)rG   Zrgba)r   Zhslar   r   r   r   r   )r5   r)   r   r[   lower_valuer   _COLOR_KEYWORDSgetr!   r
   valuegroupslenpop	argumentsZ
lower_nameall_parse_alpha
_parse_rgb
_parse_hsl
_parse_hwb
_parse_lab
_parse_lch_parse_oklab_parse_oklch_parse_color)inputr]   r^   rG   regexpmatchZchannelsr%   tokensnamer    lengthZ
old_syntaxargsr   rU   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 )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
percentager=   N)rh   r[   r$   r#   rf   )r{   r   r   r   rl      s    rl   c                 C   s6   t | t dhdhfvrdS d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                 S   s8   g | ]0}|j d kr|jd n|j dkr0|jd ndqS )r}   rQ   r~   r=   Nr[   rf   r   argr   r   r   rV      s   z_parse_rgb.<locals>.<listcomp>r   )_typessetr   r{   r%   r"   r   r   r   rm      s    	rm   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 )	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   rP   r<   r   )r   r   
_parse_huer[   rf   r   r{   r%   Zhuer"   r   r   r   rn      s    	 rn   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 )	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   rP   r<   r   r   r   r[   rf   r   r   r   r   r   ro   	  s    	ro   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rdnd 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   rP   r   g      ?r<   r   r   r[   rf   r   r   r   r   r   rp     s    	rp   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rd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).

    Nr<   r}   r~   r   rP   r   g      ?r   r   r   r   r   r   rq   3  s    	rq   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rdn| d	 j| d	 jdkrdnd 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   rP   r   {Gz?Mbp?r<   r   r   r   r   r   r   rr   I  s    	rr   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rdnd	 | d jdkrd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).

    Nr<   r}   r~   r   rP   r   r   r   r   r   r   r   r   r   rs   _  s    	rs   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~   NrP   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   rV     s   z _parse_color.<locals>.<listcomp>)r   r[   rc   _FUNCTION_SPACESr   )r    r{   r%   r"   r   r   r   rt   v  s    rt   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rdS dS )zCParse hue token.

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

    r}   r;   Z	dimensiondegZgradi  ZradZturnrP   noner   N)r[   rf   unitr   rc   )r]   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.rP   r   )r   r[   rc   add)rx   typesr]   r   r   r   r     s    r   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                 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?rR   t           _ε   _κ)XYZdxyzf0f1f2LrH   rI   r   r   r   rD     s       rD   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 )	NrR   r   r   r   r>   r   r   r<   r   )r   rH   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   rA     s    $$$rA   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   rV     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   rV     r*   )r   )r   rH   rI   r   r   r   r   )r   r   r   rC     s    
rC   )Zrebeccapurple)f   3      N))Zcolorsysr   mathr   r   r   r   Zcolor3r   r	   r
   parserr   rB   rE   r   r   r   r|   rl   rm   rn   ro   rp   rq   rr   rs   rt   r   r   r   r   r   r   rD   rA   rC   copyappenddictrd   r   r   r   r   <module>   s<   wJ
