U
    Evff                     @  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
dd Zd	d
 Zdd Zdd Z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   )o8g|=c                 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Zmiddlepos r   8/tmp/pip-unpacked-wheel-ciywl2yd/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   sine2   s    r   c                 C  s   t dt| |d d  S Nr
      r   r   r   r   r   r   sphere_increasing6   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dZdddZdS )GradientFileN   c                 C  sl  g }d}| j | \}}}}}}	t|D ]4}
|
|d  }||k r`|d7 }| j | \}}}}}}	q8|| }|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 }||| | |  q&d|dfS )	Nr   r   r	      r          ZRGBA)gradientranger   r   intappendjoin)selfentriesZpaletteixx0x1xmrgb0rgb1segmentixwZscalergbar   r   r   
getpaletteE   s$    ,,,,zGradientFile.getpalette)r   )__name__
__module____qualname__r   r3   r   r   r   r   r   B   s   r   c                   @  s   e Zd ZdZdd ZdS )GimpGradientFilez(File handler for GIMP's gradient format.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||	|	|
||||f qR|| _
d S )N   s   GIMP Gradientznot a GIMP gradient files   Name: c                 S  s   g | ]}t |qS r   )float).0r-   r   r   r   
<listcomp>y   s     z-GimpGradientFile.__init__.<locals>.<listcomp>   r   r   r   r         zcannot handle HSV colour space)readlineSyntaxError
startswithstripr    r   splitSEGMENTSOSErrorr!   r   )r#   fpmsglinecountr   r,   sr.   r&   r'   r(   r)   r*   r+   Zcspacer   r   r   __init__h   s,    
zGimpGradientFile.__init__N)r4   r5   r6   __doc__rK   r   r   r   r   r7   e   s   r7   N)rL   
__future__r   mathr   r   r   r   _binaryr   r   r   r   r   r   r   rD   r   r7   r   r   r   r   <module>   s   #