U
    Dvf*                     @   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   E/tmp/pip-unpacked-wheel-qlge9rch/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 rt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stdr6|||| d  kr6|}
|s||| t  |
k r||| t  }
|	|
k st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 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   J   s     r   r   Fr   )	_solver   Zreverse_negater   maxappendEPSILONAssertionErrorr   )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 t | \}}}	d|  krn|  krn|	  krndkstn t |dkst 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>.      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   /  s   zrebaseTent.<locals>.<listcomp>)r   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   
  