U
    QhA                     @   s  d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZmZ erxddlmZmZ eeeeef eeeeef f Zeeef Zeeeeef eeeeef f ZG dd	 d	Zd
ZdZdZdZ de e  e e  e dZ!dZ"de e  e e  e e  e" d	Z#dZ$dZ%de$ e  e% e  e% dZ&de$ e  e% e  e% e  e" d	Z'dd dD Z(dej) Z*G dd deZ+eedf edddZ,eedd d!Z-eeef eeef eeef e
e ed"d#d$Z.deeef eed&d'd(Z/edeeef e
e dd)d*Z0deeeee
e ed+d,d-Z1eed.d/d0Z2d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDd3dEdFdGdHdIdHdJdKdLdMdNdOdPdQdRdSdSdTdUdVdWdXdXdYdZd[d\d]d^d_d`dadbdcdddbdedfdgdhdidjdkdldmdndodpdqdrdsdtdsdudvdwdxdydydzd{d|d}d~d]ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddZ3dd e34 D Z5dS )an  
Color definitions are  used as per CSS3 specification:
http://www.w3.org/TR/css3-color/#svg-color

A few colors have multiple names referring to the sames colors, eg. `grey` and `gray` or `aqua` and `cyan`.

In these cases the LAST color when sorted alphabetically takes preferences,
eg. Color((0, 255, 255)).as_named() == 'cyan' because "cyan" comes after "aqua".
    N)
hls_to_rgb
rgb_to_hls)TYPE_CHECKINGAnyDictOptionalTupleUnioncast)
ColorError)Representationalmost_equal_floats)CallableGeneratorReprArgsc                   @   s<   e Zd ZdZdZeeeee dddZeedddZ	d	S )
RGBAz;
    Internal use only as a representation of a color.
    rgbalpha_tupler   r   r   r   c                 C   s*   || _ || _|| _|| _||||f| _d S Nr   )selfr   r   r   r    r   7./venv/lib/python3.8/site-packages/pydantic/v1/color.py__init__!   s
    zRGBA.__init__)itemreturnc                 C   s
   | j | S r   )r   )r   r   r   r   r   __getitem__)   s    zRGBA.__getitem__N)
__name__
__module____qualname____doc__	__slots__floatr   r   r   r   r   r   r   r   r      s   r   z8\s*(?:#|0x)?([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?\s*zD\s*(?:#|0x)?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?\s*z(\d{1,3}(?:\.\d+)?)z\s*,\s*z\s*rgb\(\s*z\)\s*z(\d(?:\.\d+)?|\.\d+|\d{1,2}%)z\s*rgba\(\s*z\s*\)\s*z((-?\d+(?:\.\d+)?|-?\.\d+)(deg|rad|turn)?z(\d{1,3}(?:\.\d+)?)%z\s*hsl\(\s*c                 C   s   h | ]}t |d  dqS )      int.0cr   r   r   	<setcomp>;   s     r-   Z0123456789abcdefr&   c                   @   s  e Zd ZdZeddddZeeee	f ddddZ
ed	d
dZddeedddZed	ddZed	ddZddee edddZed	ddZddee edddZed	ddZedd	d d!Zed	d"d#Zd$d	d%d&Ze	ed'd(d)Zed	d*d+ZdS ),Color)	_original_rgbaNvaluer   c                 C   sf   |  |  t |ttfr"t|| _n:t |tr8t|| _n$t |trR|j| _|j}n
t	dd|| _d S )Nz%value must be a tuple, list or stringreason)

isinstancetuplelistparse_tupler0   str	parse_strr.   r/   r   )r   r2   r   r   r   r   B   s    


zColor.__init__)field_schemar   c                 C   s   |j ddd d S )Nstringcolor)typeformat)update)clsr;   r   r   r   __modify_schema__R   s    zColor.__modify_schema__)r   c                 C   s   | j S )z0
        Original value passed to Color
        )r/   r   r   r   r   originalV   s    zColor.originalFfallback)rF   r   c             
   C   s~   | j jd krrtttttf |  }z
t| W S  tk
rn } z"|rT|   W Y S t	d|W 5 d }~X Y qzX n|  S d S )Nz=no named color found, use fallback=True, as_hex() or as_rgb())
r0   r   r
   r   r)   as_rgb_tupleCOLORS_BY_VALUEKeyErroras_hex
ValueError)r   rF   rgber   r   r   as_named\   s    
zColor.as_namedc                    s   dd | j dd D }| j jdk	r6|t| j j ddd |D  tdd |D rd fd	dtd
t dD  d  S )z
        Hex string representing the color can be 3, 4, 6 or 8 characters depending on whether the string
        a "short" representation of the color is possible and whether there's an alpha channel.
        c                 S   s   g | ]}t |qS r   float_to_255r*   r   r   r   
<listcomp>n   s     z Color.as_hex.<locals>.<listcomp>N    c                 s   s   | ]}|d V  qdS )Z02xNr   r+   vr   r   r   	<genexpr>r   s     zColor.as_hex.<locals>.<genexpr>c                 s   s   | ]}|t kV  qd S r   )repeat_colorsr*   r   r   r   rV   s   s     c                 3   s   | ]} | V  qd S r   r   r*   rJ   r   r   rV   t   s     r   r&   #)r0   r   appendrP   joinallrangelen)r   valuesr   rX   r   rJ   i   s    $zColor.as_hexc              
   C   s   | j jdkr<dt| j j dt| j j dt| j j dS dt| j j dt| j j dt| j j dt|  d d	S dS )zT
        Color as an rgb(<r>, <g>, <b>) or rgba(<r>, <g>, <b>, <a>) string.
        Nzrgb(, )zrgba(r&   )r0   r   rP   r   r   r   round_alpha_floatrC   r   r   r   as_rgbw   s    0>zColor.as_rgbr   )r   r   c                C   sp   dd | j dd D \}}}|dkrN| j jdkr<|||fS ||||  fS n|rb||||  fS |||fS dS )ap  
        Color as an RGB or RGBA tuple; red, green and blue are in the range 0 to 255, alpha if included is
        in the range 0 to 1.

        :param alpha: whether to include the alpha channel, options are
          None - (default) include alpha only if it's set (e.g. not None)
          True - always include alpha,
          False - always omit alpha,
        c                 s   s   | ]}t |V  qd S r   rO   r*   r   r   r   rV      s     z%Color.as_rgb_tuple.<locals>.<genexpr>NrR   )r0   r   rc   )r   r   r   r   r   r   r   r   rG      s    

zColor.as_rgb_tuplec              
   C   s   | j jdkr@| jdd\}}}d|d dd|dd|dd	S | jd
d\}}}}d|d dd|dd|ddt|d d		S dS )zS
        Color as an hsl(<h>, <s>, <l>) or hsl(<h>, <s>, <l>, <a>) string.
        NFre   zhsl(h  z0.0fr`   z0.0%ra   Tr&   )r0   r   as_hsl_tuplerb   )r   hsZliar   r   r   as_hsl   s
    "zColor.as_hslc                C   sn   t | jj| jj| jj\}}}|dkrL| jjdkr<|||fS ||||  fS |r`||||  fS |||fS dS )a  
        Color as an HSL or HSLA tuple, e.g. hue, saturation, lightness and optionally alpha; all elements are in
        the range 0 to 1.

        NOTE: this is HSL as used in HTML and most other places, not HLS as used in python's colorsys.

        :param alpha: whether to include the alpha channel, options are
          None - (default) include alpha only if it's set (e.g. not None)
          True - always include alpha,
          False - always omit alpha,
        N)r   r0   r   r   r   r   rc   )r   r   rh   lri   r   r   r   rg      s    
zColor.as_hsl_tuplec                 C   s   | j jd krdS | j jS )N   )r0   r   rC   r   r   r   rc      s    zColor._alpha_floatr   c                 c   s
   | V  d S r   r   )rA   r   r   r   __get_validators__   s    zColor.__get_validators__c                 C   s   | j ddS )NTrE   )rN   rC   r   r   r   __str__   s    zColor.__str__r   c                 C   s    d | j ddfgd|  fg S )NTrE   rL   )rN   rG   rC   r   r   r   __repr_args__   s    zColor.__repr_args__)otherr   c                 C   s   t |to|  | kS r   )r5   r.   rG   )r   rq   r   r   r   __eq__   s    zColor.__eq__c                 C   s   t |  S r   )hashrG   rC   r   r   r   __hash__   s    zColor.__hash__)r    r!   r"   r$   	ColorTyper   classmethodr   r9   r   rB   rD   boolrN   rJ   rd   r   
ColorTuplerG   rk   HslColorTuplerg   r%   rc   rn   ro   rp   rr   r)   rt   r   r   r   r   r.   ?   s$   r.   .r1   c                 C   sz   t | dkr.dd | D \}}}t|||dS t | dkrldd | dd D \}}}t|||t| d S tdddS )	z+
    Parse a tuple or list as a color.
    rR   c                 s   s   | ]}t |V  qd S r   parse_color_valuerT   r   r   r   rV      s     zparse_tuple.<locals>.<genexpr>N   c                 s   s   | ]}t |V  qd S r   rz   rT   r   r   r   rV      s     ztuples must have length 3 or 4r3   )r^   r   parse_float_alphar   )r2   r   r   r   r   r   r   r8      s    r8   c                 C   s  |   }zt| \}}}W n tk
r.   Y nX t|||dS tt|}|r| ^ }}dd |D \}}}|rt|d dd }nd}t||||S tt	|}|r| ^ }}dd |D \}}}|rt|dd }nd}t||||S tt
|}|rt| d
 S tt|}|r2t|  S tt|}|rb| \}	}
}}t|	|
||S tt|}|r| \}	}
}}}t|	|
||t|S tdd	dS )aQ  
    Parse a string to an RGBA tuple, trying the following formats (in this order):
    * named color, see COLORS_BY_NAME below
    * hex short eg. `<prefix>fff` (prefix can be `#`, `0x` or nothing)
    * hex long eg. `<prefix>ffffff` (prefix can be `#`, `0x` or nothing)
    * `rgb(<r>, <g>, <b>) `
    * `rgba(<r>, <g>, <b>, <a>)`
    Nc                 s   s   | ]}t |d  dV  qdS )r&   r'   Nr(   rT   r   r   r   rV      s     zparse_str.<locals>.<genexpr>r&   r'      c                 s   s   | ]}t |d V  qdS )r'   Nr(   rT   r   r   r   rV      s     z&string not recognised as a valid colorr3   )N)lowerCOLORS_BY_NAMErI   ints_to_rgbare	fullmatchr_hex_shortgroupsr)   
r_hex_longr_rgbr_rgbar_hsl	parse_hslr_hslar}   r   )r2   Zvalue_lowerr   r   r   mrL   rj   r   rh   h_unitsri   Zl_r   r   r   r:      sJ    	r:   )r   r   r   r   r   c                 C   s   t t| t|t|t|S r   )r   r{   r}   r   r   r   r   r     s    r   r~   )r2   max_valr   c                 C   s`   zt | }W n tk
r*   tddY nX d|  kr@|krLn n|| S td| ddS )z
    Parse a value checking it's a valid int in the range 0 to max_val and divide by max_val to give a number
    in the range 0 to 1
    z#color values must be a valid numberr3   r   z'color values must be in the range 0 to N)r%   rK   r   )r2   r   r=   r   r   r   r{     s    r{   c                 C   s   | dkrdS z6t | tr8| dr8t| dd d }nt| }W n tk
r`   tddY nX t|drpdS d|  krdkrn n|S td	ddS )
zG
    Parse a value checking it's a valid float in the range 0 to 1
    N%d   z"alpha values must be a valid floatr3   rm   r   z(alpha values must be in the range 0 to 1)r5   r9   endswithr%   rK   r   r   )r2   r   r   r   r   r}   +  s    
r}   )rh   r   satlightr   r   c                 C   sr   t |dt |d }}t| }|dkr4|d d }n|dkrJ|t t }n|d }t|||\}}	}
t||	|
|S )zT
    Parse raw hue, saturation, lightness and alpha values and convert to RGBA.
    r   >   Ndegrf   Zradrm   )r{   r%   radsr   r   )rh   r   r   r   r   Zs_valueZl_valueZh_valuer   r   r   r   r   r   r   A  s    r   )r,   r   c                 C   s   t t| d S )Nr~   )r)   rb   )r,   r   r   r   rP   T  s    rP   )      r~   )         )r   r~   r~   )   r~      )r   r~   r~   )   r      )r~         )r   r   r   )r~   r      )r   r   r~   )   +      )   *   r   )         )_         )r   r~   r   )   i      )r~   r   P   )r         )r~   r   r   )r      <   )r   r      )r   r   r   )r         )   r   r   )r   r   r   )      k   )r   r   r   )U   r   /   )r~      r   )   2      )r   r   r   )      z   )      r   )H   =   r   )r   O   r   )r         )   r      )r~   r      )r      r~   )r   r   r   )r      r~   )   "   r   )r~   r   r   )r   r   r   )r~   r   r~   )r   r   r   )r   r   r~   )r~   r   r   )   r       )   r   r   )r   r   r   )   r~   r   )r   r~   r   )r~   r      )r   \   r   )K   r      )r~   r~   r   )r      r   )r   r   r   )r~   r   r   )|      r   )r~   r   r   )r      r   )r   r   r   )   r~   r~   )r   r   r   )r   r   r   )r      r   )r~         )r~   r   r   )r   r      )r   r   r   )w      r   )   r   r   )r~   r~   r   )r   r~   r   )r   r   r   )r   r   r   )r   r   r   )f   r   r   )r   r   r   )   r   r   )r   p      )r      q   ){   h   r   )r   r      )r   r   r   )         )   r   r   )r   r~   r   )r~   r      )r~   r      )r~   r   r   )r   r   r   )   r   r   )r   r   r   )r      #   )r~   r   r   )r~   E   r   )r   r      )r      r   )      r   )   r   r   )r   r   r   )r~         )r~   r      )r   r   ?   )r~         )   r   r  )r   r   r   )r   r   r   )r~   r   r   )r   r   r   )A   r   r   )r   r      )r   r   r   )      `   ).   r   W   )r~   r   r   )r   R   -   )r  r  r  )r   r   r   )j   Z   r   )r   r   r   )r~   r   r   )r   r~   r   )F   r   r   )r   r   r   )r   r   r   )r   r   r   )r~   c   G   )@   r      )r   r   r   )r   r   r   )r~   r~   r~   )r   r   r   )r~   r~   r   )r   r   r   )Z	aliceblueZantiquewhiteZaquaZ
aquamarineZazureZbeigeZbisqueZblackZblanchedalmondZblueZ
bluevioletZbrownZ	burlywoodZ	cadetblueZ
chartreuseZ	chocolateZcoralZcornflowerblueZcornsilkZcrimsonZcyanZdarkblueZdarkcyanZdarkgoldenrodZdarkgrayZ	darkgreenZdarkgreyZ	darkkhakiZdarkmagentaZdarkolivegreenZ
darkorangeZ
darkorchidZdarkredZ
darksalmonZdarkseagreenZdarkslateblueZdarkslategrayZdarkslategreyZdarkturquoiseZ
darkvioletZdeeppinkZdeepskyblueZdimgrayZdimgreyZ
dodgerblueZ	firebrickZfloralwhiteZforestgreenZfuchsiaZ	gainsboroZ
ghostwhiteZgoldZ	goldenrodZgrayZgreenZgreenyellowZgreyZhoneydewZhotpinkZ	indianredZindigoZivoryZkhakiZlavenderZlavenderblushZ	lawngreenZlemonchiffonZ	lightblueZ
lightcoralZ	lightcyanZlightgoldenrodyellowZ	lightgrayZ
lightgreenZ	lightgreyZ	lightpinkZlightsalmonZlightseagreenZlightskyblueZlightslategrayZlightslategreyZlightsteelblueZlightyellowZlimeZ	limegreenZlinenZmagentaZmaroonZmediumaquamarineZ
mediumblueZmediumorchidZmediumpurpleZmediumseagreenZmediumslateblueZmediumspringgreenZmediumturquoiseZmediumvioletredZmidnightblueZ	mintcreamZ	mistyroseZmoccasinZnavajowhiteZnavyZoldlaceZoliveZ	olivedrabZorangeZ	orangeredZorchidZpalegoldenrodZ	palegreenZpaleturquoiseZpalevioletredZ
papayawhipZ	peachpuffZperuZpinkZplumZ
powderblueZpurpleZredZ	rosybrownZ	royalblueZsaddlebrownZsalmonZ
sandybrownZseagreenZseashellZsiennaZsilverZskyblueZ	slateblueZ	slategrayZ	slategreyZsnowZspringgreenZ	steelblueZtanZtealZthistleZtomatoZ	turquoiseZvioletZwheatZwhiteZ
whitesmokeZyellowZyellowgreenc                 C   s   i | ]\}}||qS r   r   )r+   krU   r   r   r   
<dictcomp>  s      r  )r~   )N)6r#   Zmathr   Zcolorsysr   r   typingr   r   r   r   r   r	   r
   Zpydantic.v1.errorsr   Zpydantic.v1.utilsr   r   Zpydantic.v1.typingr   r   r)   r%   rx   r9   ru   ry   r   r   r   Z_r_255Z_r_commar   Z_r_alphar   Z_r_hZ_r_slr   r   rW   Zpir   r.   r8   r:   r   r{   r}   r   rP   r   itemsrH   r   r   r   r   <module>   sr  	$""$$
 :2   