o
    h*                     @   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   u/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/varLib/instancer/solver.py_reverse_negate
   s   r   Fc                    s  |\}}}}}| \}}	}
||	kr dd t t| | | D S ||kr*||	k r*g S ||	k rHt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 ng|
|kr|
t7 }
||
|f}d}|
||f}d}||| |f ||| |f n>||	kr|	}
|	d| |
|	   }||ksJ 	 t|||	|f}d}|	||f}|}||| |f |	|k r||| |f ||kr|||f}td|id| i}||| |f |S ||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   multr   r   r   J   s    r   r   )_solver   reverse_negater   maxappendEPSILONr   )tent	axisLimitnegativeaxisMinaxisDefaxisMax_distanceNegative_distancePositivelowerpeakuppergainoutoutGaincrossinglocr   loc1scalar1loc2scalar2newUpperr   r   r   r      s|   








!


r      c                    s    \}}}}}d|  kr|  kr|  krdksJ  J | \}}}	d|  kr9|  kr9|	  kr9dks<J  J |dksBJ 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   )renormalizeValuer	   )r   r   r   <lambda>.  s   
 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    0zrebaseTent.<locals>.<listcomp>)r   )r   r   r   r   r    r!   r"   r#   r$   r%   solsr   )r   r5   r   r     s   0
0

N)F)fontTools.varLib.modelsr   fontTools.misc.fixedToolsr   	functoolsr   __all__r   r   r   r   r   r   r   r   <module>   s    
  