U
    ڲg:                     @  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   8/tmp/pip-unpacked-wheel-xela2va7/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 k	st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   AssertionError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__r9   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 d dkr d}t||  }|dr>|   }t|}g | _t|D ]}|   }dd |d d D }|d |d	  }}	|d
 }
|dd }|dd }tt|d  }t|d }|dkrd}t	|| j
||	|
|||f qTd S )N   s   GIMP Gradientznot a GIMP gradient files   Name: c                 S  s   g | ]}t |qS r   )r   ).0r3   r   r   r   
<listcomp>   s     z-GimpGradientFile.__init__.<locals>.<listcomp>   r   r   r	   r$         zcannot handle HSV colour space)readlineSyntaxError
startswithstripr!   r   r'   splitSEGMENTSOSErrorr(   )r*   r@   msglinecountr2   sr4   r,   r-   r.   r/   r0   r1   Zcspacer   r   r   __init__v   s*    
zGimpGradientFile.__init__N)r:   r;   r<   __doc__rR   r   r   r   r   r>   s   s   r>   N)rS   
__future__r   mathr   r   r   r   typingr   r   _binaryr
   r   r   r   r   r   r   rL   r   r>   r   r   r   r   <module>   s   0