Ë
    £eh~W  ã                   óV  — d Z g d¢ZddlmZ ddlmZ d„ Zd„ Zdd	„Zdd
„Z	d„ Z
dd„Zdddœd„Zdd„Z G d„ de«      Zd„ Zdd„Zedk(  r`ddlZddlZ eej,                  «      dkD  r ej.                   e«       «        ej.                   ej0                  «       j2                  «       yy)z%Variation fonts interpolation models.)ÚnormalizeValueÚnormalizeLocationÚsupportScalarÚpiecewiseLinearMapÚVariationModelé    )ÚnoRoundé   )ÚVariationModelErrorc                 ó2   — | D �cg c]  }|€Œ|‘Œ	 c}S c c}w ©N© )ÚlstÚls     úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/models.pyÚnonNoner      s   € ØÖ,�!˜a™mŠAÒ,Ð,ùÒ,s   …�c                 ó&   — t        d„ | D «       «      S )Nc              3   ó$   K  — | ]  }|d u –— Œ
 y ­wr   r   ©Ú.0r   s     r   ú	<genexpr>zallNone.<locals>.<genexpr>   s   è ø€ Ò&˜Qˆq�DŒyÑ&ùó   ‚©Úall)r   s    r   ÚallNoner      s   € ÜÑ& #Ô&Ó&Ð&ó    Nc                 ón   ‡ ‡‡— ‰€t        ˆ fd„|D «       «      S  ‰‰ «      Št        ˆˆfd„|D «       «      S )Nc              3   ó(   •K  — | ]	  }‰|k(  –— Œ y ­wr   r   )r   ÚitemÚrefs     €r   r   zallEqualTo.<locals>.<genexpr>   s   øè ø€ Ò/ 4�3˜$•;Ñ/ùs   ƒc              3   ó4   •K  — | ]  }‰ ‰|«      k(  –— Œ y ­wr   r   )r   r   ÚmappedÚmappers     €€r   r   zallEqualTo.<locals>.<genexpr>   s   øè ø€ Ò6¨$ˆv™ ›Õ%Ñ6ùó   ƒr   )r   r   r"   r!   s   ` `@r   Ú
allEqualTor$      s3   ú€ Ø€~ÜÓ/¨3Ô/Ó/Ð/á�C‹[€FÜÔ6°#Ô6Ó6Ð6r   c                 óp   — | syt        | «      }	 t        |«      }t        |||¬«      S # t        $ r Y yw xY w)NT)r"   )ÚiterÚnextÚStopIterationr$   )r   r"   ÚitÚfirsts       r   ÚallEqualr+      sD   € ÙØÜ	ˆc‹€BðÜ�R“ˆô �e˜R¨Ô/Ð/øô ò Ùðús   �) ©	5´5c                 ó„   — t        | «      t        |«      k(  sJ ‚t        || «      D ��cg c]
  \  }}|sŒ	|‘Œ c}}S c c}}w r   ©ÚlenÚzip)Útruthr   r   Úts       r   ÚsubListr2   *   s8   € Üˆu‹:œ˜S›Ò!Ð!Ð!Ü˜c 5›/×/‘$�!�QªQŠAÓ/Ð/ùÓ/s   ©
<´<Fc           
      ó@  — |\  }}}||cxk  r|k  sn t        d|d›d|d›d|d›�«      ‚|st        t        | |«      |«      } | |k(  s||k(  ry| |k  r||k7  s
| |kD  r||k(  r| |z
  ||z
  z  S | |kD  r||k7  s| |k  r||k(  sJ d| › d|› d|› d|› d�	«       ‚| |z
  ||z
  z  S )zÙNormalizes value based on a min/default/max triple.

    >>> normalizeValue(400, (100, 400, 900))
    0.0
    >>> normalizeValue(100, (100, 400, 900))
    -1.0
    >>> normalizeValue(650, (100, 400, 900))
    0.5
    z8Invalid axis values, must be minimum, default, maximum: z3.3fz, ç        zOoops... v=z
, triple=(ú))Ú
ValueErrorÚmaxÚmin)ÚvÚtripleÚextrapolateÚlowerÚdefaultÚuppers         r   r   r   /   sþ   € ð #Ñ€Eˆ7�EØ�WÔ% Ô%ÜØFØ�Tˆl˜"˜W T˜N¨"¨U°4¨Lð:ó
ð 	
ñ Ü”�A�u“˜uÓ%ˆàˆG‚|�u ’~Øà	ˆGŠ˜ Ò(¨a°'ªk¸eÀwÒ>NØ�G‘ ¨%¡Ñ0Ð0à�G’ ¨Ò 0Ø�ŠK˜E WÒ,ð	Cà˜˜˜: e W¨B¨w¨i°r¸%¸ÀÐBó	Cð 
ð �G‘ ¨¡Ñ0Ð0r   )Úvalidatec                ó`  — |rkt        | j                  «       «      t        |j                  «       «      k  s8J t        | j                  «       «      t        |j                  «       «      z
  «       ‚i }|j                  «       D ]+  \  }}| j                  ||d   «      }t	        |||¬«      ||<   Œ- |S )aÓ  Normalizes location based on axis min/default/max values from axes.

    >>> axes = {"wght": (100, 400, 900)}
    >>> normalizeLocation({"wght": 400}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 100}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": 900}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 650}, axes)
    {'wght': 0.5}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': -1.0}
    >>> axes = {"wght": (0, 0, 1000)}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": -1}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 500}, axes)
    {'wght': 0.5}
    >>> normalizeLocation({"wght": 1001}, axes)
    {'wght': 1.0}
    >>> axes = {"wght": (0, 1000, 1000)}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": -1}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": 500}, axes)
    {'wght': -0.5}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 1001}, axes)
    {'wght': 0.0}
    r	   )r;   )ÚsetÚkeysÚitemsÚgetr   )ÚlocationÚaxesr;   r?   ÚoutÚtagr:   r9   s           r   r   r   N   s¦   € ñN Ü�8—=‘=“?Ó#¤s¨4¯9©9«;Ó'7Ò7ð 	
¼¸X¿]¹]»_Ó9MÔPSØ�I‰I‹KóQ
ñ :
ó 	
Ð7ð €CØ—z‘z“|ò F‰ˆˆVØ�L‰L˜˜f Q™iÓ(ˆÜ! ! V¸ÔEˆˆCŠðFð €Jr   c                 ó6  — |r|€t        d«      ‚d}|j                  «       D ]ô  \  }\  }}}	|r/|dk(  rŒ||kD  s||	kD  rŒ|dk  r|	dkD  rŒ(| j                  |d«      }
n|| v sJ ‚| |   }
|
|k(  rŒL|rv||   \  }}|
|k  r2||k  r-||k  r||	k  r||
|	z
  ||	z
  z  z  }Œy||k  rF||
|z
  ||z
  z  z  }Œ�||
k  r2||	k  r-||k  r||k  r||
|z
  ||z
  z  z  }Œ°||k  r||
|	z
  ||	z
  z  z  }ŒÄ|
|k  s|	|
k  rd} |S |
|k  r||
|z
  ||z
  z  z  }Œç||
|	z
  ||	z
  z  z  }Œö |S )a‡  Returns the scalar multiplier at location, for a master
    with support.  If ot is True, then a peak value of zero
    for support of an axis means "axis does not participate".  That
    is how OpenType Variation Font technology works.

    If extrapolate is True, axisRanges must be a dict that maps axis
    names to (axisMin, axisMax) tuples.

      >>> supportScalar({}, {})
      1.0
      >>> supportScalar({'wght':.2}, {})
      1.0
      >>> supportScalar({'wght':.2}, {'wght':(0,2,3)})
      0.1
      >>> supportScalar({'wght':2.5}, {'wght':(0,2,4)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}, ot=False)
      0.375
      >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':3}, {'wght':(0,1,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -1.0
      >>> supportScalar({'wght':-1}, {'wght':(0,1,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -1.0
      >>> supportScalar({'wght':3}, {'wght':(0,2,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      1.5
      >>> supportScalar({'wght':-1}, {'wght':(0,2,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -0.5
    z2axisRanges must be passed when extrapolate is Trueg      ð?r4   )Ú	TypeErrorrC   rD   )rE   ÚsupportÚotr;   Ú
axisRangesÚscalarÚaxisr<   Úpeakr>   r9   ÚaxisMinÚaxisMaxs                r   r   r   €   s·  € ñD �zÐ)ÜÐLÓMÐMØ€FØ&-§m¡m£oò (3Ñ"ˆÑ"ˆu�d˜EÙà�sŠ{ØØ�tŠ|˜t eš|ØØ�sŠ{˜u sš{ØØ—‘˜T 3Ó'‰Aà˜8Ñ#Ð#Ð#Ø˜‘ˆAØ�Š9ØáØ)¨$Ñ/ÑˆG�WØ�7Š{˜u¨Ò/Ø˜7’? t¨e¢|Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜t’^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜1’ ¨EÒ!1Ø˜d’? u¨t¢|Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜G’^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØà�Š:˜ !šØˆFØð €Mð	 ˆtŠ8Ø�q˜5‘y T¨E¡\Ñ2Ñ2‰Fà�q˜5‘y T¨E¡\Ñ2Ñ2‰FðQ(3ðR €Mr   c                   óÄ   — e Zd ZdZ	 dddœd„Zd„ Zed„ «       Zeg fd„«       Zd„ Z	d	„ Z
d
„ Zd„ Zedœd„Zedœd„Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Zedœd„Zedœd„Zy)r   a5  Locations must have the base master at the origin (ie. 0).

    If axis-ranges are not provided, values are assumed to be normalized to
    the range [-1, 1].

    If the extrapolate argument is set to True, then values are extrapolated
    outside the axis range.

      >>> from pprint import pprint
      >>> axisRanges = {'wght': (-180, +180), 'wdth': (-1, +1)}
      >>> locations = [       {'wght':100},       {'wght':-100},       {'wght':-180},       {'wdth':+.3},       {'wght':+120,'wdth':.3},       {'wght':+120,'wdth':.2},       {},       {'wght':+180,'wdth':.3},       {'wght':+180},       ]
      >>> model = VariationModel(locations, axisOrder=['wght'], axisRanges=axisRanges)
      >>> pprint(model.locations)
      [{},
       {'wght': -100},
       {'wght': -180},
       {'wght': 100},
       {'wght': 180},
       {'wdth': 0.3},
       {'wdth': 0.3, 'wght': 180},
       {'wdth': 0.3, 'wght': 120},
       {'wdth': 0.2, 'wght': 120}]
      >>> pprint(model.deltaWeights)
      [{},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0, 4: 1.0, 5: 1.0},
       {0: 1.0, 3: 0.75, 4: 0.25, 5: 1.0, 6: 0.6666666666666666},
       {0: 1.0,
        3: 0.75,
        4: 0.25,
        5: 0.6666666666666667,
        6: 0.4444444444444445,
        7: 0.6666666666666667}]
    N)rM   c                ó>  — t        t        d„ |D «       «      «      t        |«      k7  rt        d«      ‚|| _        |�|ng | _        || _        |€J|r| j                  |«      }n6|D ��ch c]  }|j                  «       D ]  }|’Œ Œ }}}|D �ci c]  }|d“Œ }}|| _        |D ���	cg c],  }|j                  «       D ��	ci c]  \  }}	|	dk7  sŒ||	“Œ c}	}‘Œ. }}}}	| j                  || j                  ¬«      }
t        ||
¬«      | _        |D �cg c]  }| j                  j                  |«      ‘Œ c}| _        | j                  D �cg c]  }|j                  |«      ‘Œ c}| _        | j!                  «        i | _        y c c}}w c c}w c c}	}w c c}	}}w c c}w c c}w )Nc              3   ó`   K  — | ]&  }t        t        |j                  «       «      «      –— Œ( y ­wr   )ÚtupleÚsortedrC   r   s     r   r   z*VariationModel.__init__.<locals>.<genexpr>  s    è ø€ Ò?°”5œ §¡£	Ó*×+Ñ?ùs   ‚,.zLocations must be unique.)éÿÿÿÿr	   r4   )Ú	axisOrder)Úkey)r.   rA   r
   ÚorigLocationsrY   r;   ÚcomputeAxisRangesrB   rM   rC   ÚgetMasterLocationsSortKeyFuncrW   Ú	locationsÚindexÚmappingÚreverseMappingÚ_computeMasterSupportsÚ
_subModels)Úselfr^   rY   r;   rM   ÚlocrO   ÚallAxesÚkr9   ÚkeyFuncr   s               r   Ú__init__zVariationModel.__init__  s{  € ô ŒsÑ?°YÔ?Ó?Ó@ÄCÈ	ÃNÒRÜ%Ð&AÓBÐBà&ˆÔØ&/Ð&;™ÀˆŒØ&ˆÔØÐÙØ!×3Ñ3°IÓ>‘
à+4×L CÀÇÁÃÒL¸š4ÐL˜4ÐL�ÑLØ8?Ö@°˜d G™mÐ@�
Ð@Ø$ˆŒàKT×UÐUÀC s§y¡y£{×?™t˜q !°a¸3³h�a˜‘dÕ?ÐUˆ	ÒUØ×4Ñ4Ø §¡ð 5ó 
ˆô   	¨wÔ7ˆŒð :CÖC°A˜Ÿ™×,Ñ,¨QÕ/ÒCˆŒØ;?¿>¹>ÖJ°a˜yŸ™¨qÕ1ÒJˆÔà×#Ñ#Ô%Øˆ�ùó MùÚ@ùó @ùÔUùò DùÚJs6   Á'E=Â
FÂ%FÂ=FÃFÃFÄ"FÅFÆFc                 óþ   — d|vr| |fS t        d„ |D «       «      }| j                  j                  |«      }|€9t        t	        || j
                  «      | j                  «      }|| j                  |<   |t	        ||«      fS )zºReturn a sub-model and the items that are not None.

        The sub-model is necessary for working with the subset
        of items when some are None.

        The sub-model is cached.Nc              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr   r   ©r   r9   s     r   r   z-VariationModel.getSubModel.<locals>.<genexpr>*  s   è ø€ Ò1 a�A˜T”MÑ1ùr   )rV   rc   rD   r   r2   r[   rY   )rd   rC   rZ   ÚsubModels       r   ÚgetSubModelzVariationModel.getSubModel!  s}   € ð �uÑØ˜�;ÐÜÑ1¨5Ô1Ó1ˆØ—?‘?×&Ñ& sÓ+ˆØÐÜ%¤g¨c°4×3EÑ3EÓ&FÈÏÉÓWˆHØ#+ˆD�O‰O˜CÑ Øœ  eÓ,Ð,Ð,r   c                 ó  — i }| D ��ch c]  }|j                  «       D ]  }|’Œ Œ }}}| D ]M  }|D ]F  }|j                  |d«      }|j                  |||f«      \  }}t        ||«      t        ||«      f||<   ŒH ŒO |S c c}}w )Nr   )rB   rD   r8   r7   )r^   rM   re   rO   rf   ÚvaluerQ   rR   s           r   r\   z VariationModel.computeAxisRanges1  s¢   € àˆ
Ø#,×D˜C¸¿¹»ÒD°’4ÐD�4ÐDˆÑDØò 	LˆCØò L�ØŸ™  aÓ(�Ø#-§>¡>°$¸À¸Ó#GÑ �˜Ü#& u¨gÓ#6¼¸EÀ7Ó8KÐ#K�
˜4Ò ñLð	Lð
 Ðùó Es   ˆA=c                 ó  — i | vrt        d«      ‚i }| D ]_  }t        |«      dk7  rŒt        t        |«      «      }||   }||vrdh||<   |||   vsJ d|›d|›d|›�«       ‚||   j	                  |«       Œa d„ } |||«      }|S )NzBase master not found.r	   r4   zValue "z" in axisPoints["z"] -->  c                 ó    ‡ ‡‡— d„ Šˆˆ ˆfd„}|S )Nc                 ó"   — | dk  rdS | dkD  rdS dS )Nr   rX   r	   r   )r9   s    r   ÚsignzJVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.signN  s   € Ø šU�rÐ:¨a°!ªe¨Ð:¸Ð:r   c           	      óØ  •‡ — t        ‰ «      }‰ j                  «       D ��cg c]  \  }}|‰v r	|‰|   v r|‘Œ }}}‰D �cg c]	  }|‰ v sŒ|‘Œ }}|j                  t        ‰ j	                  «       «      D �cg c]	  }|‰vsŒ|‘Œ c}«       |t        |«       t        ˆfd„|D «       «      t        |«      t        ˆ ˆfd„|D «       «      t        ˆ fd„|D «       «      fS c c}}w c c}w c c}w )Nc              3   óL   •K  — | ]  }|‰v r‰j                  |«      nd –— Œ y­w)i   N)r_   )r   rO   rY   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>_  s.   øè ø€ ò à ð 26¸Ñ1B˜	Ÿ™¨Ô-ÈÓOñùs   ƒ!$c              3   ó4   •K  — | ]  } ‰‰|   «      –— Œ y ­wr   r   )r   rO   re   rt   s     €€r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>d  s   øè ø€ ò Ø,0™˜S ™YŸñùr#   c              3   ó:   •K  — | ]  }t        ‰|   «      –— Œ y ­wr   )Úabs)r   rO   re   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>g  s   øè ø€ ò Ø+/œ˜C ™IŸñùs   ƒ)r.   rC   ÚextendrW   rB   rV   )	re   ÚrankrO   rp   ÚonPointAxesÚorderedAxesrY   Ú
axisPointsrt   s	   `     €€€r   rZ   zIVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.keyQ  s  ù€ Ü˜3“x�ð (+§y¡y£{÷á#˜˜eØ˜zÑ)¨e°zÀ$Ñ7GÑ.Gò ð�ñ ð
 1:ÖI¨¸TÀSº[štÐI�ÐIØ×"Ñ"Ü&,¨S¯X©X«ZÓ&8ÖR˜d¸DÈ	Ò<Q’TÒRôð Ü˜Ó%Ð%Üó à$/ôó ô ˜+Ó&Üô Ø4?ôó ô ó Ø3>ôó ðð ùóùò
 JùâRs   ¡C¿	C"Á	C"Á5	C'Á?C'r   )r~   rY   rZ   rt   s   `` @r   ÚgetKeyz<VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKeyM  s   ú€ ò;öð6 ˆJr   )r
   r.   r'   r&   Úadd)r^   rY   r~   re   rO   rp   r   Úrets           r   r]   z,VariationModel.getMasterLocationsSortKeyFunc<  s´   € à�YÑÜ%Ð&>Ó?Ð?Øˆ
Øò 
	(ˆCÜ�3‹x˜1Š}ØÜœ˜S›	“?ˆDØ˜‘IˆEØ˜:Ñ%Ø$' 5�
˜4Ñ à˜Z¨Ñ-Ñ-ñTâ;@Â$É
ÐSóTØ-à�tÑ× Ñ  Õ'ð
	(ò	ñB �Z Ó+ˆØˆ
r   c                 ó   — |D �cg c]  }||   ‘Œ	 }}|D �cg c]  }| j                   |   ‘Œ c}| _         | j                   D ���cg c],  }|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}‘Œ. }}}}|D �	cg c]  }	| j                  j                  |	«      ‘Œ c}	| _        | j                  D �	cg c]  }	|j                  |	«      ‘Œ c}	| _        i | _        |S c c}w c c}w c c}}w c c}}}w c c}	w c c}	w )Nr4   )r[   rC   r^   r_   r`   ra   rc   )
rd   Úmaster_listr`   ÚidxÚnew_listre   rg   r9   r^   r   s
             r   ÚreorderMasterszVariationModel.reorderMastersq  sç   € ð 18Ö8¨�K Ó$Ð8ˆÐ8ØAHÖI¸#˜d×0Ñ0°Ó5ÒIˆÔàBF×BTÑBT÷
ð 
Ø;>˜cŸi™i›k×6‘d�a˜¨Q°#«XˆQ�‰TÕ6ð
ˆ	ò 
ð :CÖC°A˜Ÿ™×,Ñ,¨QÕ/ÒCˆŒØ;?¿>¹>ÖJ°a˜yŸ™¨qÕ1ÒJˆÔØˆŒØˆùò 9ùÚIùã6ùô
ùò DùÚJs4   …C—C$ÁC/ÁC)Á+C)Á0C/Á>"C6Â6C;Ã)C/c                 óØ  — g | _         | j                  «       }t        |«      D �]4  \  }}t        |j	                  «       «      }|d | D ]ò  }t        |j	                  «       «      |k7  rŒ d}|j                  «       D ],  \  }\  }}	}
||   d   |	k(  rŒ|||   d   cxk  r|
k  rŒ(n d} n |sŒdi }d}|j	                  «       D ][  }||   d   }||v sJ ‚||   \  }}}
||
}}||k  r|}||z
  ||z
  z  }n||k  r|}||z
  |
|z
  z  }nŒE||kD  ri }|}||k(  sŒT|||f||<   Œ] |j                  «       D ]
  \  }}|||<   Œ Œô | j                   j                  |«       �Œ7 | j                  «        y )NTr	   FrX   )ÚsupportsÚ_locationsToRegionsÚ	enumeraterA   rB   rC   ÚappendÚ_computeDeltaWeights)rd   ÚregionsÚiÚregionÚlocAxesÚprev_regionÚrelevantrO   r<   rP   r>   ÚbestAxesÚ	bestRatioÚvalÚlocVÚnewLowerÚnewUpperÚratior:   s                      r   rb   z%VariationModel._computeMasterSupports~  sÜ  € ØˆŒØ×*Ñ*Ó,ˆÜ" 7Ó+ó 2	)‰IˆAˆvÜ˜&Ÿ+™+›-Ó(ˆGà& r¨˜{ò .*�ä�{×'Ñ'Ó)Ó*¨gÒ5Øà�Ø28·,±,³.ò Ñ.�DÑ.˜5 $¨à# DÑ)¨!Ñ,°Ó4Ø  ;¨tÑ#4°QÑ#7Ô?¸%Õ?à#(˜Ùðñ  Øð �Ø�	Ø'×,Ñ,Ó.ò D�DØ% dÑ+¨AÑ.�CØ 6™>Ð)˜>Ø)/°©Ñ&�E˜4 Ø).°˜h�HØ˜T’zØ#&˜Ø!$ t¡°¸±Ñ =™Ø šØ#&˜Ø!$ t¡°¸±Ñ =™ð !Ø˜yÒ(Ø#%˜Ø$)˜	Ø 	Ó)Ø*2°D¸(Ð)C˜ šð%Dð( %-§N¡NÓ$4ò *‘L�D˜&Ø#)�F˜4’Lñ*ð[.*ð^ �M‰M× Ñ  Ö(ðe2	)ðf 	×!Ñ!Õ#r   c                 óâ   — | j                   }| j                  }g }|D ]O  }i }|j                  «       D ]'  \  }}|dkD  rd|||   d   f||<   Œ||   d   |df||<   Œ) |j                  |«       ŒQ |S )Nr   r	   )r^   rM   rC   r‹   )rd   r^   rM   r�   re   r�   rO   r–   s           r   r‰   z"VariationModel._locationsToRegions¶  s˜   € Ø—N‘Nˆ	Ø—_‘_ˆ
àˆØò 	#ˆCØˆFØ!Ÿi™i›kò B‘
��dØ˜!’8Ø$% t¨Z¸Ñ-=¸aÑ-@Ð#A�F˜4’Là$.¨tÑ$4°QÑ$7¸¸qÐ#A�F˜4’Lð	Bð
 �N‰N˜6Õ"ð	#ð ˆr   c                 óî   — g | _         t        | j                  «      D ]V  \  }}i }t        | j                  d | «      D ]  \  }}t	        ||«      }|sŒ|||<   Œ | j                   j                  |«       ŒX y r   )ÚdeltaWeightsrŠ   r^   rˆ   r   r‹   )rd   rŽ   re   ÚdeltaWeightÚjrK   rN   s          r   rŒ   z#VariationModel._computeDeltaWeightsÅ  s|   € ØˆÔÜ §¡Ó/ò 	2‰FˆAˆsØˆKä'¨¯©°b°qÐ(9Ó:ò ,‘
��7Ü& s¨GÓ4�ÚØ%+�K ’Nð,ð ×Ñ×$Ñ$ [Õ1ñ	2r   ©Úroundc                óˆ  — t        |«      t        | j                  «      k(  s%J t        |«      t        | j                  «      f«       ‚| j                  }g }t        | j                  «      D ]U  \  }}|||      }|j	                  «       D ]  \  }}	|	dk(  r	|||   z  }Œ|||   |	z  z  }Œ  |j                   ||«      «       ŒW |S )Nr	   )r.   rœ   ra   rŠ   rC   r‹   )
rd   ÚmasterValuesr    r`   rG   rŽ   ÚweightsÚdeltarž   Úweights
             r   Ú	getDeltaszVariationModel.getDeltasÐ  sØ   € Ü�<Ó ¤C¨×(9Ñ(9Ó$:Ò:ð 	
Ü�ÓÜ�×!Ñ!Ó"ð=
ó 	
Ð:ð ×%Ñ%ˆØˆÜ# D×$5Ñ$5Ó6ò 	%‰JˆAˆwØ  ¨¡Ñ,ˆEØ$Ÿ]™]›_ò -‘	��6Ø˜Q’;Ø˜S ™V‘O‘Eà˜S ™V f™_Ñ,‘Eð	-ð
 �J‰J‘u˜U“|Õ$ð	%ð ˆ
r   c                óh   — | j                  |«      \  }}|j                  ||¬«      |j                  fS )NrŸ   )rn   r¦   rˆ   )rd   rC   r    Úmodels       r   ÚgetDeltasAndSupportsz#VariationModel.getDeltasAndSupportsá  s2   € Ø×'Ñ'¨Ó.‰ˆˆuØ�‰˜u¨EˆÓ2°E·N±NÐBÐBr   c           	      ó‚   — | j                   D �cg c]%  }t        ||| j                  | j                  ¬«      ‘Œ' c}S c c}w )zûReturn scalars for each delta, for the given location.
        If interpolating many master-values at the same location,
        this function allows speed up by fetching the scalars once
        and using them with interpolateFromMastersAndScalars().)r;   rM   )rˆ   r   r;   rM   )rd   re   rK   s      r   Ú
getScalarszVariationModel.getScalarså  sB   € ð  Ÿ=™=ö	
ð ô Ø�W¨$×*:Ñ*:ÀtÇÁöò
ð 	
ùò 
s   �*<c                 óH  — | j                  |«      }t        t        t        | j                  «      «      «      D ]0  \  }}|j                  «       D ]  \  }}||xx   ||   |z  z  cc<   Œ Œ2 t        t        |«      «      D �cg c]  }|| j                  |      ‘Œ }}|S c c}w )a­  Return multipliers for each master, for the given location.
        If interpolating many master-values at the same location,
        this function allows speed up by fetching the scalars once
        and using them with interpolateFromValuesAndScalars().

        Note that the scalars used in interpolateFromMastersAndScalars(),
        are *not* the same as the ones returned here. They are the result
        of getScalars().)	r«   ÚreversedÚlistrŠ   rœ   rC   Úranger.   r`   )rd   ÚtargetLocationrG   rŽ   r£   rž   r¥   s          r   ÚgetMasterScalarszVariationModel.getMasterScalarsñ  s�   € ð �o‰o˜nÓ-ˆÜ"¤4¬	°$×2CÑ2CÓ(DÓ#EÓFò 	*‰JˆAˆwØ$Ÿ]™]›_ò *‘	��6Ø�A“˜#˜a™& 6™/Ñ)”ñ*ð	*ô .3´3°s³8«_Ö=¨ˆs�4—<‘< ‘?Ó#Ð=ˆÐ=Øˆ
ùò >s   ÂBc                 óˆ   — d}t        | «      t        |«      k(  sJ ‚t        | |«      D ]  \  }}|sŒ	||z  }|€|}Œ||z  }Œ |S )aV  Interpolate from values and scalars coefficients.

        If the values are master-values, then the scalars should be
        fetched from getMasterScalars().

        If the values are deltas, then the scalars should be fetched
        from getScalars(); in which case this is the same as
        interpolateFromDeltasAndScalars().
        Nr-   )ÚvaluesÚscalarsr9   rp   rN   Úcontributions         r   ÚinterpolateFromValuesAndScalarsz.VariationModel.interpolateFromValuesAndScalars  sc   € ð ˆÜ�6‹{œc '›lÒ*Ð*Ð*Ü  ¨Ó1ò 	"‰MˆE�6ÙØØ  6™>ˆLØˆyØ ‘à�\Ñ!‘ð	"ð ˆr   c                 ó.   — t         j                  | |«      S )z>Interpolate from deltas and scalars fetched from getScalars().)r   r¶   )Údeltasr´   s     r   ÚinterpolateFromDeltasAndScalarsz.VariationModel.interpolateFromDeltasAndScalars  s   € ô ×=Ñ=¸fÀgÓNÐNr   c                 óH   — | j                  |«      }| j                  ||«      S )z)Interpolate from deltas, at location loc.)r«   r¹   )rd   re   r¸   r´   s       r   ÚinterpolateFromDeltasz$VariationModel.interpolateFromDeltas  s#   € à—/‘/ #Ó&ˆØ×3Ñ3°F¸GÓDÐDr   c                óH   — | j                  |«      }| j                  ||«      S )z0Interpolate from master-values, at location loc.)r±   r¶   )rd   re   r¢   r    r´   s        r   ÚinterpolateFromMastersz%VariationModel.interpolateFromMasters#  s%   € à×'Ñ'¨Ó,ˆØ×3Ñ3°LÀ'ÓJÐJr   c                óL   — | j                  ||¬«      }| j                  ||«      S )z²Interpolate from master-values, and scalars fetched from
        getScalars(), which is useful when you want to interpolate
        multiple master-values with the same location.rŸ   )r¦   r¹   )rd   r¢   r´   r    r¸   s        r   Ú interpolateFromMastersAndScalarsz/VariationModel.interpolateFromMastersAndScalars(  s)   € ð —‘ °E�Ó:ˆØ×3Ñ3°F¸GÓDÐDr   )NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ri   rn   Ústaticmethodr\   r]   r†   rb   r‰   rŒ   r   r¦   r©   r«   r±   r¶   r¹   r»   r½   r¿   r   r   r   r   r   Ñ   sÉ   „ ñ/ðd 6;ðØJNôò<-ð  ñó ðð Ø;=ò 2ó ð2òhò6$òpò	2ð 07ô ð" 4;ô Cò

òð" ñó ðð, ñOó ðOòEð
 BIô Kð
 PWõ Er   r   c                 ó6  ‡ — |j                  «       }|s‰ S ‰ |v r|‰    S t        |«      }‰ |k  r‰ ||   z   |z
  S t        |«      }‰ |kD  r‰ ||   z   |z
  S t        ˆ fd„|D «       «      }t        ˆ fd„|D «       «      }||   }||   }|||z
  ‰ |z
  z  ||z
  z  z   S )Nc              3   ó.   •K  — | ]  }|‰k  sŒ	|–— Œ y ­wr   r   ©r   rg   r9   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>=  ó   øè ø€ Ò%�!˜q 1›uŒAÑ%ùó   ƒ
Žc              3   ó.   •K  — | ]  }|‰kD  sŒ	|–— Œ y ­wr   r   rÇ   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>>  rÈ   rÉ   )rB   r8   r7   )r9   r`   rB   rg   ÚaÚbÚvaÚvbs   `       r   r   r   0  sÀ   ø€ Ø�<‰<‹>€DÙØˆØˆD�yØ�q‰zÐÜˆD‹	€AØˆ1‚uØ�7˜1‘:‰~ Ñ!Ð!ÜˆD‹	€AØˆ1‚uØ�7˜1‘:‰~ Ñ!Ð!äÓ%�tÔ%Ó%€AÜÓ%�tÔ%Ó%€AØ	�‰€BØ	�‰€BØ��b‘˜Q ™UÑ# q¨1¡uÑ-Ñ-Ð-r   c                 ó`  — ddl m} ddl}|j                  dt        j
                  ¬«      }|j                  dddd	¬
«       |j                  d¬«      }|j                  dddt        ¬«       |j                  ddddd¬«       |j                  | «      }  || j                  ¬«       ddlm} | j                  r¥ddlm}  |«       }|j                  | j                  «       |j                   D �cg c]  }|j"                  ‘Œ }	}t%        d«        ||	«       |j'                  «        t%        d«       |j                   D �cg c]  }|j"                  ‘Œ }	} ||	«       nyt)        t+        d«      t+        d«      dz   «      D �
cg c]  }
t-        |
«      ‘Œ }}
| j.                  D �cg c]-  }t1        t3        |d„ |j5                  d «      D «       «      «      ‘Œ/ }	}t7        |	«      }t%        d!«        ||j.                  «       t%        d"«        ||j8                  «       yc c}w c c}w c c}
w c c}w )#z*Normalize locations on a given designspacer   )ÚconfigLoggerNzfonttools varLib.models)Údescriptionz
--loglevelÚLEVELÚINFOz Logging level (defaults to INFO))Úmetavarr=   ÚhelpT)Úrequiredz-dz--designspaceÚDESIGNSPACE)rÔ   Útypez-lz--locationsÚLOCATIONú+zFMaster locations as comma-separate coordinates. One must be all zeros.)rÔ   ÚnargsrÕ   )Úlevel)Úpprint)ÚDesignSpaceDocumentzOriginal locations:zNormalized locations:ÚAÚZr	   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úfloatrl   s     r   r   zmain.<locals>.<genexpr>r  s   è ø€ Ò;¨œE !ŸHÑ;ùs   ‚ú,zSorted locations:z	Supports:)Ú	fontToolsrÐ   ÚargparseÚArgumentParserÚmainrÃ   Úadd_argumentÚadd_mutually_exclusive_groupÚstrÚ
parse_argsÚloglevelrÝ   ÚdesignspaceÚfontTools.designspaceLibrÞ   ÚreadÚsourcesrE   ÚprintÚ	normalizer¯   ÚordÚchrr^   Údictr/   Úsplitr   rˆ   )ÚargsrÐ   rå   ÚparserÚgrouprÝ   rÞ   ÚdocÚsÚlocsÚcrF   r¨   s                r   rç   rç   D  sç  € å&Ûà×$Ñ$Ø!Ü—L‘Lð %ó €Fð ×ÑØØØØ/ð	 ô ð ×/Ñ/¸Ð/Ó>€EØ	×Ñ�t˜_°mÌ#ÐÔNØ	×ÑØØØØØUð ô ð ×Ñ˜TÓ"€Dá�t—}‘}Õ%Ýà×ÒÝ@á!Ó#ˆØ�‰�×!Ñ!Ô"Ø$'§K¡KÖ0˜q�—
“
Ð0ˆÐ0ÜÐ#Ô$ÙˆtŒØ�‰ŒÜÐ%Ô&Ø$'§K¡KÖ0˜q�—
“
Ð0ˆÐ0Ùˆt�ä %¤c¨#£h´°C³¸1±Ó =Ö>˜1”�A•Ð>ˆÐ>àGKÇ~Á~ö
ØBCŒD”�TÑ;¨a¯g©g°c«lÔ;Ó<Õ=ð
ˆð 
ô ˜4Ó €EÜ	Ð
ÔÙ
ˆ5�?‰?ÔÜ	ˆ+ÔÙ
ˆ5�>‰>Õùò# 1ùò
 1ùò ?ùò
s   Ã.HÄ?H!Æ H&Æ"2H+Ú__main__r   )F)TFN)rÃ   Ú__all__ÚfontTools.misc.roundToolsr   Úerrorsr
   r   r   r$   r+   r2   r   r   r   Úobjectr   r   rç   rÀ   ÚdoctestÚsysr.   ÚargvÚexitÚtestmodÚfailedr   r   r   ú<module>r	     s´   ðÙ +ò€õ .Ý 'ò-ò'ó7ó0ò0ó
1ð>/ÀUô /ódNôb\E�Vô \Eò~
.ó(5ðp ˆzÒßá
ˆ3�8‰8ƒ}�qÒØˆ�‰‘“Ôà€C‡H�Hˆ_ˆW�_‰_Ó×%Ñ%Õ&ð r   