U
    »mœd+  ã                   @   sX   d dl mZmZ d dlmZ d dlmZ dgZdZdd„ Z	dd	d
„Z
edƒdd„ ƒZdS )é    )ÚsupportScalarÚnormalizeValue)ÚMAX_F2DOT14)Ú	lru_cacheÚ
rebaseTentg      ?c                 C   s   | d  | d  | d  fS )Né   é   r   © ©Úvr	   r	   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/varLib/instancer/solver.pyÚ_reverse_negate
   s    r   Fc                    sF  |\}}}| \}}}||kr<dd„ t t| ƒt|ƒ| ƒD ƒS ||krP||k rPg S ||k rŒtd|id| iƒ‰ |||f} ‡ fdd„t | |ƒD ƒS td|id| iƒ}	|	d fg}
td|id| iƒ}|	|k�rž|d|	 ||  d|   }|||f}d}|
 ||	 |f¡ ||k�r:|||f}td|id| iƒ}|
 ||	 |f¡ n`||k�rL|t7 }|||f}d}|||f}td|id| iƒ}|
 ||	 |f¡ |
 ||	 |f¡ �n||| d  |k�rX|�sî||| t  |k �rî||| t  }||k �sît‚||k�rü|}t||ƒ||f}d}|||f}d}||k �r:|
 ||	 |f¡ ||k �r¶|
 ||	 |f¡ n^t||ƒ||f}d}|||f}td|id| iƒ}|
 ||	 |f¡ ||k �r¶|
 ||	 |f¡ ||k�rð|||f}td|id| iƒ}|
 ||	 |f¡ nR||k�r|t8 }|||f}d}|||f}d}|
 ||	 |f¡ |
 ||	 |f¡ |
S )Nc                 S   s(   g | ] \}}||d k	rt |ƒnd f‘qS )N)r   ©Ú.0ÚscalarÚtr	   r	   r   Ú
<listcomp>   s   ÿz_solve.<locals>.<listcomp>Útagc                    s   g | ]\}}|ˆ  |f‘qS r	   r	   r   ©Zmultr	   r   r   H   s     r   r   r   )Ú_solver   r   ÚappendÚEPSILONr   ÚAssertionErrorÚmax)ÚtentÚ	axisLimitÚnegativeÚaxisMinÚaxisDefÚaxisMaxÚlowerÚpeakÚupperZgainÚoutZoutGainZcrossingÚlocr   Úloc1Zscalar1Úloc2Zscalar2r	   r   r   r      sŒ    

  ÿþ



















r   é€   c           	         s¨   ˆ \}}}d|  kr2|  kr2|  kr2dks8n t ‚| \}}}d|  krj|  krj|  krjdkspn t ‚|dks|t ‚t| ˆ ƒ}‡ fdd„‰‡fdd	„|D ƒ}|S )
a7  Given a tuple (lower,peak,upper) "tent" and new axis limits
    (axisMin,axisDefault,axisMax), solves how to represent the tent
    under the new axis configuration.  All values are in normalized
    -1,0,+1 coordinate system. Tent values can be outside this range.

    Return value is a list of tuples. Each tuple is of the form
    (scalar,tent), where scalar is a multipler to multiply any
    delta-sets by, and tent is a new tent for that output delta-set.
    If tent value is None, that is a special deltaset that should
    be always-enabled (called "gain").éÿÿÿÿr   éþÿÿÿr   r   c                    s   t | ˆ dd�S )NT)Zextrapolate)r   r
   )r   r	   r   Ú<lambda>4  ó    zrebaseTent.<locals>.<lambda>c                    sF   g | ]>\}}|r||d k	r<ˆ |d ƒˆ |d ƒˆ |d ƒfnd f‘qS )Nr   r   r   r	   )r   r   r   )Únr	   r   r   5  s   þzrebaseTent.<locals>.<listcomp>)r   r   )	r   r   r   r   r   r    r!   r"   Zsolsr	   )r   r,   r   r     s    
.
.

þN)F)ZfontTools.varLib.modelsr   r   ZfontTools.misc.fixedToolsr   Ú	functoolsr   Ú__all__r   r   r   r   r	   r	   r	   r   Ú<module>   s   
  