o
    7ήcA                     @   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r<d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*deedf defd d!Z+dedefd"d#Z,d$eeef d%eeef d&eeef d'e
e def
d(d)Z-dNdeeef d+edefd,d-Z.dedeeef de
e fd.d/Z/dOd0ed1ed2ed3ed'e
e defd4d5Z0d6edefd7d8Z1i d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZi d[d\d]d^d_d`dad>dbdcdddedfdgdhdidjdkdldidmdndodpdqdrdsdtdudvdwdxdydzi d{d|d}d~ddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddÓddœddÓddȓddʓdd̓ddΓddГddГddӓddՓddדddٓddۓi ddddޓddddddddddddddddddddddddddddddi dddd ddddddddd	d
ddddddddddddddddddddi dd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d8d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKZ2dLdM e23 D Z4dS (P  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                	   @   sD   e Zd ZdZdZdedededee fddZd	ed
efddZ	dS )RGBAz;
    Internal use only as a representation of a color.
    rgbalpha_tupler   r   r   r   c                 C   s*   || _ || _|| _|| _||||f| _d S Nr   )selfr   r   r   r    r   5/tmp/pip-target-vg8gfxp4/lib/python/pydantic/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-   0123456789abcdefr&   c                   @   s  e Zd ZdZdeddfddZedeee	f ddfdd	Z
defd
dZdddedefddZdefddZdefddZdddee defddZdefddZdddee defddZdefddZed,d d!Zdefd"d#Zd-d%d&Zd'e	defd(d)Zdefd*d+ZdS ).Color)	_original_rgbavaluer   Nc                 C   sf   |  |  t |ttfrt|| _nt |trt|| _nt |tr)|j| _|j}nt	dd|| _d S )Nz%value must be a tuple, list or stringreason)

isinstancetuplelistparse_tupler1   str	parse_strr/   r0   r   )r   r2   r   r   r   r   B   s   



zColor.__init__field_schemac                 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__c                 C   s   | j S )z0
        Original value passed to Color
        )r0   r   r   r   r   originalV   s   zColor.originalFfallbackrF   c             
   C   sr   | j jd u r5tttttf |  }zt| W S  ty4 } z|r+|  W  Y d }~S t	d|d }~ww |  S )Nz=no named color found, use fallback=True, as_hex() or as_rgb())
r1   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ur|t| j j ddd |D  tdd |D r@d 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 )02xNr   r+   vr   r   r   	<genexpr>r       zColor.as_hex.<locals>.<genexpr>c                 s   s    | ]}|t v V  qd S r   )repeat_colorsr*   r   r   r   rW   s   rX   c                 3   s    | ]} | V  qd S r   r   r*   rJ   r   r   rW   t   rX   r   r&   #)r1   r   appendrP   joinallrangelen)r   valuesr   rZ   r   rJ   i   s   $zColor.as_hexc              
   C   s|   | j jdu 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 )zT
        Color as an rgb(<r>, <g>, <b>) or rgba(<r>, <g>, <b>, <a>) string.
        Nzrgb(, )zrgba(r&   )r1   r   rP   r   r   r   round_alpha_floatrC   r   r   r   as_rgbw   s   0,zColor.as_rgbr   r   c                C   sj   dd | j dd D \}}}|du r&| j jdu r|||fS ||||  fS |r0||||  fS |||f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       | ]}t |V  qd S r   rO   r*   r   r   r   rW      rX   z%Color.as_rgb_tuple.<locals>.<genexpr>NrR   )r1   r   re   )r   r   r   r   r   r   r   r   rG      s   


zColor.as_rgb_tuplec              
   C   s   | j jdu 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 )zS
        Color as an hsl(<h>, <s>, <l>) or hsl(<h>, <s>, <l>, <a>) string.
        NFrg   zhsl(h  z0.0frb   z0.0%rc   Tr&   )r1   r   as_hsl_tuplerd   )r   hsliar   r   r   as_hsl   s
   ".zColor.as_hslc                C   sj   t | jj| jj| jj\}}}|du r&| jjdu r|||fS ||||  fS |r0||||  fS |||f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   r1   r   r   r   r   re   )r   r   rk   lrl   r   r   r   rj      s   

zColor.as_hsl_tuplec                 C   s   | j jd u rdS | j jS )Nr   )r1   r   rC   r   r   r   re      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__      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__otherc                 C   s   t |to|  | kS r   )r5   r/   rG   )r   ru   r   r   r   __eq__   s   zColor.__eq__c                 C   s   t |  S r   )hashrG   rC   r   r   r   __hash__   rs   zColor.__hash__)r   r   )r   r   )r    r!   r"   r$   	ColorTyper   classmethodr   r9   r   rB   rD   boolrN   rJ   rf   r   
ColorTuplerG   ro   HslColorTuplerj   r%   re   rq   rr   rt   rv   r)   rx   r   r   r   r   r/   ?   s&    
r/   r2   .r   c                 C   sv   t | dkrdd | D \}}}t|||dS t | dkr6dd | dd D \}}}t|||t| d S tdd)	z+
    Parse a tuple or list as a color.
    rR   c                 s   rh   r   parse_color_valuerU   r   r   r   rW      rX   zparse_tuple.<locals>.<genexpr>N   c                 s   rh   r   r~   rU   r   r   r   rW      rX   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y   Y nw t|||dS tt|}|rL| ^ }}dd |D \}}}|rCt|d dd }nd}t||||S tt	|}|rx| ^ }}dd |D \}}}|rot|dd }nd}t||||S tt
|}|rtg | dR  S tt|}|rt|  S tt|}|r| \}	}
}}t|	|
||S tt|}|r| \}	}
}}}t|	|
||t|S tdd	)
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(   rU   r   r   r   rW      s    zparse_str.<locals>.<genexpr>r&   r'      c                 s   s    | ]}t |d V  qdS )r'   Nr(   rU   r   r   r   rW      s    z&string not recognised as a valid colorr3   )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   value_lowerr   r   r   mrL   rn   r   rk   h_unitsrl   l_r   r   r   r:      sL   	
r:   r   r   r   r   c                 C   s   t t| t|t|t|S r   )r   r   r   )r   r   r   r   r   r   r   r     s   r   r   max_valc                 C   sR   zt | }W n ty   tddw d|  kr |kr!|| S  td| d)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 )r%   rK   r   )r2   r   r=   r   r   r   r     s   
r   c                 C   s   | du rdS zt | tr| drt| dd d }nt| }W n ty-   tddw t|dr5dS d|  kr@dkrA|S  td	d)
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   r   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   rk   r   satlightc                 C   sr   t |dt |d}}t| }|dv r|d d }n|dkr%|t t }n|d }t|||\}}	}
t||	|
|S )zT
    Parse raw hue, saturation, lightness and alpha values and convert to RGBA.
    r   >   Ndegri   radr   )r   r%   radsr   r   )rk   r   r   r   r   s_valuel_valueh_valuer   r   r   r   r   r   r   A  s   r   r,   c                 C   s   t t| d S )Nr   )r)   rd   )r,   r   r   r   rP   T  s   rP   	aliceblue)      r   antiquewhite)         aqua)r   r   r   
aquamarine)   r      azure)r   r   r   beige)   r      bisque)r         black)r   r   r   blanchedalmond)r   r      blue)r   r   r   
blueviolet)   +      brown)   *   r   	burlywood)         	cadetblue)_         
chartreuse)r   r   r   	chocolate)   i      coral)r   r   P   cornflowerblue)r         cornsilk)r   r   r   crimson)r      <   cyandarkblue)r   r      darkcyan)r   r   r   darkgoldenrod)r         darkgray)   r   r   	darkgreen)r   r   r   darkgrey	darkkhaki)      k   darkmagenta)r   r   r   darkolivegreen)U   r   /   
darkorange)r      r   
darkorchid)   2      darkred)r   r   r   
darksalmon)      z   darkseagreen)      r   darkslateblue)H   =   r   darkslategray)r   O   r   darkslategreydarkturquoise)r         
darkviolet)   r      deeppink)r   r      deepskyblue)r      r   dimgray)r   r   r   dimgrey
dodgerblue)r      r   	firebrick)   "   r  floralwhite)r   r   r   forestgreen)r  r   r  fuchsia)r   r   r   	gainsboro)r   r   r   
ghostwhite)r   r   r   gold)r   r   r   	goldenrod)   r       gray)   r  r  green)r   r  r   greenyellow)   r   r   greyhoneydew)r   r   r   hotpink)r   r      	indianred)r   \   r  indigo)K   r      ivory)r   r   r   khaki)r      r   lavender)r%  r%  r   lavenderblush)r   r   r   	lawngreen)|      r   lemonchiffon)r   r   r   	lightblue)r     r%  
lightcoral)r   r  r  	lightcyan)   r   r   lightgoldenrodyellow)r   r   r   	lightgray)r   r   r   
lightgreen)r     r  	lightgrey	lightpink)r         lightsalmon)r   r   r   lightseagreen)r  r
     lightskyblue)r   r   r   lightslategray)w      r   lightslategreylightsteelblue)   r   r   lightyellow)r   r   r0  lime)r   r   r   	limegreen)r   r   r   linen)r   r   r%  magentamaroon)r  r   r   mediumaquamarine)f   r   r;  
mediumblue)r   r   r   mediumorchid)   r   r   mediumpurple)r  p      mediumseagreen)r      q   mediumslateblue){   h   r4  mediumspringgreen)r   r      mediumturquoise)r   r   r   mediumvioletred)         midnightblue)   r_  rO  	mintcream)r   r   r   	mistyrose)r   r      moccasin)r   r      navajowhite)r   r   r  navy)r   r   r  oldlace)   r   r%  olive)r  r  r   	olivedrab)r      #   orange)r   r   r   	orangered)r   E   r   orchid)r  rO     palegoldenrod)r4     r;  	palegreen)      ru  paleturquoise)   r4  r4  palevioletred)rP  rO  r  
papayawhip)r         	peachpuff)r   r     peru)r   r]  ?   pink)r         plum)   r   r  
powderblue)rB  r0  r%  purple)r  r   r  red)r   r   r   	rosybrown)r   r   r   	royalblue)A   r   rb  saddlebrown)r   ro     salmon)r   r  r   
sandybrown)      `   seagreen).   r   W   seashell)r   r   r4  sienna)r   R   -   silver)r  r  r  skyblue)r   r   r   	slateblue)j   Z   r   	slategray)rO  r  r  	slategreysnow)r   r   r   springgreen)r   r   r   	steelblue)F   r"  r  )r   r  r   )r   r  r  )r-  r  r-  )r   c   G   )@   r0     )r4  r"  r4  )r   r   rR  )r   r   r   )r   r   r   )r   r   r   )rX  r   r   )tantealthistletomato	turquoisevioletwheatwhite
whitesmokeyellowyellowgreenc                 C   s   i | ]\}}||qS r   r   )r+   krV   r   r   r   
<dictcomp>  s    r  )r   r   )5r#   mathr   colorsysr   r   typingr   r   r   r   r   r	   r
   errorsr   utilsr   r   r   r   r)   r%   r|   r9   ry   r}   r   r   r   _r_255_r_commar   _r_alphar   _r_h_r_slr   r   rY   pir   r/   r8   r:   r   r   r   r   rP   r   itemsrH   r   r   r   r   <module>   s   	$""$$
 ::""*	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
 
 