B
    eAdD                 @   s   d 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.)
    )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        g      ?g      ?)EPSILON)middlepos r   F/var/www/html/venv/lib/python3.7/site-packages/PIL/GimpGradientFile.pylinear   s    r   c             C   s   |t dt t| t  S )Ng      ?)r   maxr   )r	   r
   r   r   r   curved.   s    r   c             C   s$   t t d tt| |  d d S )Ng       @g      ?)r   r   r   )r	   r
   r   r   r   sine2   s    r   c             C   s   t dt| |d d  S )Ng      ?   )r   r   )r	   r
   r   r   r   sphere_increasing6   s    r   c             C   s   dt dt| |d   S )Ng      ?r   )r   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   sv  g }d}| j | \}}}}}}	xFt|D ]8}
|
|d  }x*||k rf|d7 }| j | \}}}}}}	q>W || }|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*W d|dfS )	Nr   r   g      ?   r          ZRGBA)gradientranger   r   intappendjoin)selfentriespaletteZixx0x1xmrgb0rgb1segmentixwscalergbar   r   r   
getpaletteE   s$    
,,,,zGradientFile.getpalette)r   )__name__
__module____qualname__r   r/   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 }xt|D ]}|   }dd |d d D }|d |d	  }	}
|d
 }|dd }|dd }tt|d  }t|d }|dkrd}t||	|	|
||||f qTW || _
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)r0   r1   r2   __doc__rG   r   r   r   r   r3   e   s   r3   N)rH   mathr   r   r   r   _binaryr   r   r   r   r   r   r   r@   r   r3   r   r   r   r   <module>   s   #