a
    —Æàgú*  ã                   @   sT   d dl 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)ÚMAX_F2DOT14)Ú	lru_cacheÚ
rebaseTentg      ?c                 C   s   | d  | d  | d  fS )Né   é   r   © ©Úvr   r   úZ/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/varLib/instancer/solver.pyÚ_reverse_negate
   s    r   Fc                    s  |\}}}}}| \}}	}
||	kr@dd„ t t| ƒ| ¡ | ƒD ƒS ||krT||	k rTg 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| |
|	   }t||ƒ|	|f}d}| || |f¡ |
|k�r.|||f}|}| || |f¡ nR|
|k�r@|
t7 }
||
|f}d}|
||f}d}| || |f¡ | || |f¡ �n||	k�r’|	}
|	d| |
|	   }||k�s´J ‚d�r6|||| d  k�r6|}
|�s||| t  |
k �r||| t  }
|	|
k �sJ ‚t||ƒ|	|
f}d}| || |f¡ nPt||ƒ|	|f}d}|	||f}|}| || |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 u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   J   ó    r   r   Fr   )Ú_solver   Zreverse_negater   ÚmaxÚappendÚEPSILONr   )ÚtentÚ	axisLimitÚnegativeÚaxisMinÚaxisDefÚaxisMaxÚ_distanceNegativeÚ_distancePositiveÚlowerÚpeakÚupperZgainÚoutZoutGainZcrossingÚlocr   Úloc1Zscalar1Úloc2Zscalar2ZnewUpperr   r   r   r      sˆ    
ýþ















r   é€   c                    s¬   ˆ \}}}}}d|  kr6|  kr6|  kr6dks<n J ‚| \}}}	d|  krn|  krn|	  krndkstn J ‚|dks€J ‚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
   ˆ   | ¡S r   )ZrenormalizeValuer	   )r   r   r   Ú<lambda>.  r   zrebaseTent.<locals>.<lambda>c                    sF   g | ]>\}}|r||d ur<ˆ |d ƒˆ |d ƒˆ |d ƒfnd f‘qS )Nr   r   r   r   )r   r   r
   )Únr   r   r   /  s   þzrebaseTent.<locals>.<listcomp>)r   )r   r   r   r   r   r    r!   r"   r#   r$   Zsolsr   )r   r-   r   r     s    .
.

þN)F)ZfontTools.varLib.modelsr   ZfontTools.misc.fixedToolsr   Ú	functoolsr   Ú__all__r   r   r   r   r   r   r   r   Ú<module>   s   
  