a
    ¨º”hB  ã                   @  sÒ   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
 ddlmZ dZdddd	œd
d„Zdddd	œdd„Zdddd	œdd„Zdddd	œdd„Zdddd	œdd„ZeeeeegZG dd„ dƒZG dd„ deƒZdS )z·
Stuff to translate curve segments to palette values (derived from
the corresponding code in GIMP, written by Federico Mena Quintero.
See the GIMP distribution for more information.)
é    )Úannotations)ÚlogÚpiÚsinÚsqrt)ÚIOÚCallableé   )Úo8g»½×Ùß|Û=Úfloat)ÚmiddleÚposÚreturnc                 C  sR   || kr"| t k rdS d| |  S n,||  }d|  } | t k r>dS dd| |   S d S )Ng        ç      à?ç      ð?)ÚEPSILON©r   r   © r   úB/var/www/auris/lib/python3.9/site-packages/PIL/GimpGradientFile.pyÚlinear    s    r   c                 C  s   |t dƒt t| tƒƒ  S )Nr   )r   Úmaxr   r   r   r   r   Úcurved/   s    r   c                 C  s$   t t d tt| |ƒ  ƒd d S )Ng       @r   )r   r   r   r   r   r   r   Úsine3   s    r   c                 C  s   t dt| |ƒd d  ƒS ©Nr   é   ©r   r   r   r   r   r   Úsphere_increasing7   s    r   c                 C  s   dt dt| |ƒd  ƒ S r   r   r   r   r   r   Úsphere_decreasing;   s    r   c                   @  s,   e Zd ZU dZded< d
dddœdd	„ZdS )ÚGradientFileNzblist[tuple[float, float, float, list[float], list[float], Callable[[float, float], float]]] | NoneÚgradienté   Úintztuple[bytes, str])Úentriesr   c                 C  sz  | j d usJ ‚g }d}| j | \}}}}}}	t|ƒD ]4}
|
|d  }||k rn|d7 }| j | \}}}}}}	qF|| }|tk rŠ|	ddƒ}n|	|| | || | ƒ}ttd|d |d  | |d   d ƒƒ}ttd|d |d  | |d   d ƒƒ}ttd|d |d  | |d   d ƒƒ}ttd|d |d  | |d   d ƒƒ}| || | | ¡ q4d |¡dfS )	Nr   r	   r   éÿ   r   é   ó    ZRGBA)r   Úranger   r
   r!   ÚappendÚjoin)Úselfr"   ZpaletteÚixÚx0Úx1ÚxmÚrgb0Úrgb1ÚsegmentÚiÚxÚwZscaleÚrÚgÚbÚar   r   r   Ú
getpaletteR   s&    ,,,,zGradientFile.getpalette)r    )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r8   r   r   r   r   r   C   s   
ô
r   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚGimpGradientFilez(File handler for GIMP's gradient format.z	IO[bytes]ÚNone)Úfpr   c              	   C  sô   |  ¡  d¡sd}t|ƒ‚|  ¡ }| d¡r8|  ¡  ¡ }t|ƒ}g | _t|ƒD ] }|  ¡  ¡ }dd„ |d d… D ƒ}|d |d  }}	|d	 }
|d
d… }|dd… }tt|d ƒ }t|d ƒ}|dkrÖd}t	|ƒ‚| j 
||	|
|||f¡ qNd S )Ns   GIMP Gradientznot a GIMP gradient files   Name: c                 S  s   g | ]}t |ƒ‘qS r   )r   )Ú.0r2   r   r   r   Ú
<listcomp>‡   r%   z-GimpGradientFile.__init__.<locals>.<listcomp>é   r   r   r	   r$   é   é   zcannot handle HSV colour space)ÚreadlineÚ
startswithÚSyntaxErrorÚstripr!   r   r&   ÚsplitÚSEGMENTSÚOSErrorr'   )r)   r?   ÚmsgÚlineÚcountr1   Úsr3   r+   r,   r-   r.   r/   r0   Zcspacer   r   r   Ú__init__v   s*    
zGimpGradientFile.__init__N)r9   r:   r;   Ú__doc__rP   r   r   r   r   r=   s   s   r=   N)rQ   Ú
__future__r   Úmathr   r   r   r   Útypingr   r   Ú_binaryr
   r   r   r   r   r   r   rJ   r   r=   r   r   r   r   Ú<module>   s   0