o
    õ·i'  ã                   @  s¾   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 dZ
e
r*ddlmZ ddlmZ d	Z	 ddd„Zddd„Zddd„Zddd„Z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é   )Úo8F)ÚCallable)ÚIOg»½×Ùß|Û=ÚmiddleÚfloatÚposÚreturnc                 C  sL   || kr| t k r
dS d| |  S ||  }d|  } | t k rdS dd| |   S )Ng        ç      à?ç      ð?)ÚEPSILON©r   r   © r   úZC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\PIL/GimpGradientFile.pyÚlinear$   s   r   c                 C  s   |t dƒt t| tƒƒ  S )Nr   )r   Úmaxr   r   r   r   r   Úcurved3   ó   r   c                 C  s$   t t d tt| |ƒ  ƒd d S )Ng       @r   )r   r   r   r   r   r   r   Úsine7   s   $r   c                 C  s   t dt| |ƒd d  ƒS ©Nr   é   ©r   r   r   r   r   r   Úsphere_increasing;   r   r   c                 C  s   dt dt| |ƒd  ƒ S r   r   r   r   r   r   Úsphere_decreasing?   r   r   c                   @  s&   e Zd ZU dZded< ddd	d
„ZdS )ÚGradientFileNzblist[tuple[float, float, float, list[float], list[float], Callable[[float, float], float]]] | NoneÚgradienté   ÚentriesÚintr   útuple[bytes, str]c                 C  s~  | j d usJ ‚g }d}| j | \}}}}}}	t|ƒD ]�}
|
|d  }||k r9|d7 }| j | \}}}}}}	||k s&|| }|tk rG|	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 ƒƒ}| || | | ¡ qd |¡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   Ú
getpaletteV   s(   þ,,,,zGradientFile.getpalette)r!   )r"   r#   r   r$   )Ú__name__Ú
__module__Ú__qualname__r    Ú__annotations__r:   r   r   r   r   r   G   s   
 
ôr   c                   @  s   e Zd ZdZd	dd„ZdS )
ÚGimpGradientFilez(File handler for GIMP's gradient format.Úfpú	IO[bytes]r   ÚNonec              	   C  sô   |  ¡  d¡sd}t|ƒ‚|  ¡ }| d¡r|  ¡  ¡ }t|ƒ}g | _t|ƒD ]P}|  ¡  ¡ }dd„ |d d… D ƒ}|d |d }}	|d	 }
|d
d… }|dd… }tt|d ƒ }t|d ƒ}|dkrkd}t	|ƒ‚| j 
||	|
|||f¡ q'd S )Ns   GIMP Gradientznot a GIMP gradient files   Name: c                 S  s   g | ]}t |ƒ‘qS r   )r   )Ú.0r4   r   r   r   Ú
<listcomp>‹   s    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Úcountr3   Úsr5   r-   r.   r/   r0   r1   r2   Zcspacer   r   r   Ú__init__z   s,   
ðzGimpGradientFile.__init__N)r@   rA   r   rB   )r;   r<   r=   Ú__doc__rS   r   r   r   r   r?   w   s    r?   N)r   r   r   r   r   r   )rT   Ú
__future__r   Úmathr   r   r   r   Ú_binaryr   ÚTYPE_CHECKINGÚcollections.abcr	   Útypingr
   r   r   r   r   r   r   rM   r   r?   r   r   r   r   Ú<module>   s&   




0