ó
    oñ:i~W  ã                   óh  • S r / SQrSSKJr  SSKJr  S rS rSS	 jrSS
 jr	S r
SS jrSSS.S jjrSS jr " S S\5      rS rSS jr\S:X  aa  SSKrSSKr\" \R,                  5      S:”  a  \R.                  " \" 5       5        \R.                  " \R0                  " 5       R2                  5        gg)z%Variation fonts interpolation models.)ÚnormalizeValueÚnormalizeLocationÚsupportScalarÚpiecewiseLinearMapÚVariationModelé    )ÚnoRoundé   )ÚVariationModelErrorc                 ó:   • U  Vs/ s H	  oc  M  UPM     sn$ s  snf ©N© )ÚlstÚls     ÚZ/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/varLib/models.pyÚnonNoner      s   € ÙÓ,’s�!�A‘sÑ,Ð,ùÒ,s   …�c                 ó&   • [        S U  5       5      $ )Nc              3   ó(   #   • U  H  oS L v •  M
     g 7fr   r   ©Ú.0r   s     r   Ú	<genexpr>ÚallNone.<locals>.<genexpr>   s   é € Ð&¢#˜Q�D�y¢#ùó   ‚©Úall)r   s    r   ÚallNoner      s   € ÜÑ&¡#Ó&Ó&Ð&ó    Nc                 ót   ^ ^^• Tc  [        U 4S jU 5       5      $ T" T 5      m[        UU4S jU 5       5      $ )Nc              3   ó.   >#   • U  H
  nTU:H  v •  M     g 7fr   r   )r   ÚitemÚrefs     €r   r   ÚallEqualTo.<locals>.<genexpr>   s   øé € Ð/ª3 4�3˜$–;ª3ùs   ƒc              3   ó:   >#   • U  H  nTT" U5      :H  v •  M     g 7fr   r   )r   r   ÚmappedÚmappers     €€r   r   r!      s   øé € Ð6²#¨$ˆv™ ›Ö%²#ùó   ƒr   )r    r   r$   r#   s   ` `@r   Ú
allEqualTor&      s3   ú€ Ø�~ÜÔ/©3Ó/Ó/Ð/á�C‹[€FÜÕ6±#Ó6Ó6Ð6r   c                 ót   • U (       d  g[        U 5      n [        U5      n[        X2US9$ ! [         a     gf = f)NT)r$   )ÚiterÚnextÚStopIterationr&   )r   r$   ÚitÚfirsts       r   ÚallEqualr-      sB   € ÞØÜ	ˆc‹€BðÜ�R“ˆô �e¨Ñ/Ð/øô ó Ùðús   •* ª
7¶7c                 ó”   • [        U 5      [        U5      :X  d   e[        X5       VVs/ s H  u  p#U(       d  M  UPM     snn$ s  snnf r   ©ÚlenÚzip)Útruthr   r   Úts       r   ÚsubListr4   *   s8   € Üˆu‹:œ˜S›Ó!Ð!Ð!Ü˜cœ/Ô/š/‘$�!¬Q�A™/Ò/Ð/ùÓ/s
   ©AºAFc           
      ó@  • Uu  p4nX4s=::  a  U::  d  O  [        SUS SUS SUS 35      eU(       d  [        [        X5      U5      n X:X  d  X5:X  a  gX:  a  X4:w  d
  X:”  a  XT:X  a	  X-
  XC-
  -  $ X:”  a  XT:w  d  X:  a  X4:X  d   SU  SU SU SU S3	5       eX-
  XT-
  -  $ )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�EØÕ% Õ%ÜØFØ�Tˆl˜"˜W T˜N¨"¨U°4¨Lð:ó
ð 	
ö Ü”�A“˜uÓ%ˆàƒ|�u“~Øà	‹˜Ó(¨a«k¸eÓ>NØ‘ ¡Ñ0Ð0à“ Ó 0Ø‹K˜EÓ,ð	Cà˜˜˜: e W¨B¨w¨i°r¸%¸ÀÐBó	Cð 
ð ‘ ¡Ñ0Ð0r   )Úvalidatec                ób  • U(       al  [        U R                  5       5      [        UR                  5       5      ::  d8   [        U R                  5       5      [        UR                  5       5      -
  5       e0 nUR                  5        H%  u  pVU R                  XVS   5      n[	        XvUS9XE'   M'     U$ )aC  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=   rA   ÚoutÚtagr<   r;   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–|‰ˆØ�L‰L˜ Q™iÓ(ˆÜ! !¸ÑEˆ‹ñ $ð €Jr   c                 óV  • U(       a  Uc  [        S5      eSnUR                  5        Hý  u  nu  pxn	U(       a5  US:X  a  M  Xx:”  d  X‰:”  a  M$  US:  a  U	S:”  a  M2  U R                  US5      n
OX`;   d   eX   n
X¨:X  a  MW  U(       aq  XF   u  p¼X«:  a1  X{::  a,  X‹::  a  X‰:  a  XZU	-
  X‰-
  -  -  nM†  X¸:  a  XZU-
  X‡-
  -  -  nM™  O5XÊ:  a0  XÉ::  a+  XÈ::  a  Xx:  a  XZU-
  X‡-
  -  -  nM¼  XŒ:  a  XZU	-
  X‰-
  -  -  nMÏ  X§::  d  Xš::  a  Sn  U$ X¨:  a  XZU-
  X‡-
  -  -  nMñ  XZU	-
  X‰-
  -  -  nMÿ     U$ )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      ð?r6   )Ú	TypeErrorrE   rF   )rG   ÚsupportÚotr=   Ú
axisRangesÚscalarÚaxisr>   Úpeakr@   r;   ÚaxisMinÚaxisMaxs                r   r   r   €   sw  € öD �zÑ)ÜÐLÓMÐMØ€FØ&-§m¡m¦oÑ"ˆÑ"ˆu˜EÞà�s‹{ÙØ‹|˜t›|ÙØ�s‹{˜u s›{ÙØ—‘˜T 3Ó'‰AàÓ#Ð#Ð#Ø‘ˆAØ‹9ÙæØ)Ñ/ÑˆGØ‹{˜uÓ/Ø“? t£|Ø 5™y¨T©\Ñ:Ñ:�FÙØ“^Ø 5™y¨T©\Ñ:Ñ:�FÙð $ð “ Ó!1Ø“? u£|Ø 5™y¨T©\Ñ:Ñ:�FÙØ“^Ø 5™y¨T©\Ñ:Ñ:�FÙà‹:˜›ØˆFØð €Mð	 ‹8Ø˜5‘y T¡\Ñ2Ñ2ŠFà˜5‘y T¡\Ñ2Ñ2ŠFñQ '6ðR €Mr   c                   óÚ   • \ rS rSrSr SSS.S jjrS r\S 5       r\/ 4S j5       r	S	 r
S
 rS rS r\S.S jr\S.S jrS rS r\S 5       r\S 5       rS r\S.S jr\S.S jrSrg)r   éÑ   a­  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)rO   c                óV  • [        [        S U 5       5      5      [        U5      :w  a  [        S5      eXl        Ub  UO/ U l        X0l        UcU  U(       a  U R                  U5      nO<U VVs1 s H  oUR                  5         H  ofiM     M     nnnU Vs0 s H  ofS_M     nnX@l        U VVV	s/ s H/  oUR                  5        VV	s0 s H  u  p‰U	S:w  d  M  X‰_M     sn	nPM1     nnnn	U R                  XR                  S9n
[        XS9U l        U Vs/ s H  o°R                  R                  U5      PM     snU l        U R                   Vs/ s H  o±R                  U5      PM     snU l        U R!                  5         0 U l        g s  snnf s  snf s  sn	nf s  sn	nnf s  snf s  snf )Nc              3   óf   #   • U  H'  n[        [        UR                  5       5      5      v •  M)     g 7fr   )ÚtupleÚsortedrE   r   s     r   r   Ú*VariationModel.__init__.<locals>.<genexpr>  s#   é € Ð?²Y°”5œ §¡£	Ó*×+Ð+²Yùs   ‚/1zLocations must be unique.)éÿÿÿÿr	   r6   )Ú	axisOrder)Úkey)r0   rC   r
   ÚorigLocationsr]   r=   ÚcomputeAxisRangesrD   rO   rE   ÚgetMasterLocationsSortKeyFuncrZ   Ú	locationsÚindexÚmappingÚreverseMappingÚ_computeMasterSupportsÚ
_subModels)Úselfrb   r]   r=   rO   ÚlocrQ   ÚallAxesÚkr;   ÚkeyFuncr   s               r   Ú__init__ÚVariationModel.__init__  sm  € ô ŒsÑ?±YÓ?Ó?Ó@ÄCÈ	ÃNÓRÜ%Ð&AÓBÐBà&ÔØ&/Ñ&;™ÀˆŒØ&ÔØÑÞØ!×3Ñ3°IÓ>‘
á+4ÔLª9 CÇÁÇ¸š4Á™4©9�ÑLÙ8?Ó@º° Gšm¹�
Ð@Ø$ŒáKTÕUÊ9ÀC§y¡y¤{Ô?¢{™t˜q°a¸3±h“d�a’d¡{Õ?É9ˆ	ÒUØ×4Ñ4Ø§¡ð 5ð 
ˆô   	Ñ7ˆŒñ :CÓCº°AŸ™×,Ñ,¨QÖ/¹ÑCˆŒØ;?¿>º>ÓJº>°aŸ™¨qÖ1¹>ÑJˆÔà×#Ñ#Ô%Øˆ�ùó MùÚ@ùó @ùÔUùò DùÚJs6   Á-"F	ÂFÂ0FÃFÃFÃFÄ$F!ÅF&ÆFc                 óü   • SU;  a  X4$ [        S U 5       5      nU R                  R                  U5      nUc7  [        [	        X R
                  5      U R                  5      nX0R                  U'   U[	        X!5      4$ )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   ó(   #   • U  H  oS Lv •  M
     g 7fr   r   ©r   r;   s     r   r   Ú-VariationModel.getSubModel.<locals>.<genexpr>*  s   é € Ð1ª5 a˜T•Mª5ùr   )rY   rg   rF   r   r4   r_   r]   )rh   rE   r^   ÚsubModels       r   ÚgetSubModelÚVariationModel.getSubModel!  su   € ð �uÓØ�;ÐÜÑ1©5Ó1Ó1ˆØ—?‘?×&Ñ& sÓ+ˆØÑÜ%¤g¨c×3EÑ3EÓ&FÈÏÉÓWˆHØ#+�O‰O˜CÑ Øœ Ó,Ð,Ð,r   c                 ó  • 0 nU  VVs1 s H  o"R                  5         H  o3iM     M     nnnU  HK  nU HB  nUR                  US5      nUR                  X5U45      u  pg[        XV5      [        XW5      4X'   MD     MM     U$ s  snnf )Nr   )rD   rF   r:   r9   )rb   rO   ri   rQ   rj   ÚvaluerS   rT   s           r   r`   Ú VariationModel.computeAxisRanges1  s…   € àˆ
Ù#,ÔD¢9˜C¿¹¿°’4¹‘4¡9ˆÑDÛˆCÛ�ØŸ™  aÓ(�Ø#-§>¡>°$À¸Ó#GÑ �Ü#& uÓ#6¼¸EÓ8KÐ#K�
Ó ó  ñ ð
 Ðùó Es   ˆ"B c                 ó  • 0 U ;  a  [        S5      e0 nU  Hd  n[        U5      S:w  a  M  [        [        U5      5      nX4   nXB;  a  S1X$'   XRU   ;  d   SU< SU< SU< 35       eX$   R	                  U5        Mf     S nU" X!5      nU$ )NzBase master not found.r	   r6   zValue "z" in axisPoints["z"] -->  c                 ó"   ^ ^^• S mUU U4S jnU$ )Nc                 ó&   • U S:  a  S$ U S:”  a  S$ S$ )Nr   r\   r	   r   )r;   s    r   ÚsignÚJVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.signN  s   € Ø ›U�rÐ:¨a°!«e¨Ð:¸Ð:r   c           	      ó  >^ • [        T 5      nT R                  5        VVs/ s H  u  p#UT;   d  M  UTU   ;   d  M  UPM     nnnT Vs/ s H  o"T ;   d  M
  UPM     nnUR                  [        T R	                  5       5       Vs/ s H  o"T;  d  M
  UPM     sn5        U[        U5      * [        U4S jU 5       5      [        U5      [        U U4S jU 5       5      [        U 4S jU 5       5      4$ s  snnf s  snf s  snf )Nc              3   óV   >#   • U  H  nUT;   a  TR                  U5      OS v •  M      g7f)i   N)rc   )r   rQ   r]   s     €r   r   Ú\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>_  s-   øé € ð â$/˜Dð 26¸Ó1B˜	Ÿ™¨Ô-ÈÔOÚ$/ùs   ƒ&)c              3   ó:   >#   • U  H  nT" TU   5      v •  M     g 7fr   r   )r   rQ   ri   r|   s     €€r   r   r€   d  s   øé € ð Ú4?¨D™˜S ™YŸ˜²Kùr%   c              3   ó@   >#   • U  H  n[        TU   5      v •  M     g 7fr   )Úabs)r   rQ   ri   s     €r   r   r€   g  s   øé € ð Ú3>¨4œ˜C ™IŸ˜²;ùs   ƒ)r0   rE   ÚextendrZ   rD   rY   )	ri   ÚrankrQ   rw   ÚonPointAxesÚorderedAxesr]   Ú
axisPointsr|   s	   `     €€€r   r^   ÚIVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.keyQ  s  ù€ Ü˜3“x�ð (+§y¡y¤{ôâ'2™˜Ø˜zÑ)ó à.3°zÀ$Ñ7GÑ.G÷ Ù'2ð ñ ñ
 1:ÓI²	¨ÀS¹[Ÿt±	�ÐIØ×"Ñ"Ü&,¨S¯X©X«ZÔ&8ÓRÒ&8˜dÈ	Ñ<Q—TÑ&8ÑRôð Ü˜Ó%Ð%Üô á$/óó ô ˜+Ó&Üõ Ù4?óó ô ô Ù3>óó ðð ùóùò
 JùâRs'   ¡C3±C3¼C3Á		C9ÁC9Â	C>ÂC>r   )rˆ   r]   r^   r|   s   `` @r   ÚgetKeyÚ<VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKeyM  s   ú€ ò;÷ð6 ˆJr   )r
   r0   r)   r(   Úadd)rb   r]   rˆ   ri   rQ   rw   rŠ   Úrets           r   ra   Ú,VariationModel.getMasterLocationsSortKeyFunc<  s£   € à�YÓÜ%Ð&>Ó?Ð?Øˆ
ÛˆCÜ�3‹x˜1‹}ÙÜœ˜S›	“?ˆDØ‘IˆEØÓ%Ø$' 5�
Ñ à¨Ñ-Ó-ñTã;@Ã$Ê
ÐSóTØ-àÑ× Ñ  Ö'ñ ò	ñB �ZÓ+ˆØˆ
r   c                 ó  • U Vs/ s H  o1U   PM	     nnU Vs/ s H  o0R                   U   PM     snU l         U R                    VVVs/ s H/  oUR                  5        VVs0 s H  u  pgUS:w  d  M  Xg_M     snnPM1     nnnnU V	s/ s H  o�R                  R                  U	5      PM     sn	U l        U R                   V	s/ s H  o˜R                  U	5      PM     sn	U l        0 U l        U$ s  snf s  snf s  snnf s  snnnf s  sn	f s  sn	f )Nr6   )r_   rE   rb   rc   rd   re   rg   )
rh   Úmaster_listrd   ÚidxÚnew_listri   rk   r;   rb   r   s
             r   ÚreorderMastersÚVariationModel.reorderMastersq  sê   € ñ 18Ó8²¨ Ô$±ˆÐ8ÙAHÓIÂ¸#×0Ñ0°Ô5ÁÑIˆÔàBF×BTÒBTõ
ÚBT¸3Ÿi™iœkÔ6šk‘d�a¨Q°#©X‹TˆQŠT™kÕ6ÑBTð 	ò 
ñ :CÓCº°AŸ™×,Ñ,¨QÖ/¹ÑCˆŒØ;?¿>º>ÓJº>°aŸ™¨qÖ1¹>ÑJˆÔØˆŒØˆùò 9ùÚIùã6ùô
ùò DùÚJs4   …C,™C1Á	C<Á!C6Á1C6Á7C<Â$DÃDÃ6C<c                 óð  • / U l         U R                  5       n[        U5       GH?  u  p#[        UR	                  5       5      nUS U  Hü  n[        UR	                  5       5      U:w  a  M"  SnUR                  5        H.  u  nu  p‰n
XW   S   U	:X  a  M  X…U   S   s=:  a  U
:  a  M*  O  Sn  O   U(       d  Mo  0 nSnUR	                  5        HW  nXW   S   nXs;   d   eX7   u  pŽn
XŠnnXÞ:  a  UnXÞ-
  XŽ-
  -  nOXí:  a  UnXÞ-
  X®-
  -  nOM?  UU:”  a  0 nUnUU:X  d  MQ  XþU4X·'   MY     UR                  5        H
  u  nnUX7'   M     Mþ     U R                   R                  U5        GMB     U R                  5         g )NTr	   Fr\   )ÚsupportsÚ_locationsToRegionsÚ	enumeraterC   rD   rE   ÚappendÚ_computeDeltaWeights)rh   ÚregionsÚiÚregionÚlocAxesÚprev_regionÚrelevantrQ   r>   rR   r@   ÚbestAxesÚ	bestRatioÚvalÚlocVÚnewLowerÚnewUpperÚratior<   s                      r   rf   Ú%VariationModel._computeMasterSupports~  sž  € ØˆŒØ×*Ñ*Ó,ˆÜ" 7×+‰IˆAÜ˜&Ÿ+™+›-Ó(ˆGà& r¨›{�ä�{×'Ñ'Ó)Ó*¨gÓ5Ùà�Ø28·,±,¶.Ñ.�DÑ.˜5¨à#Ñ)¨!Ñ,°Õ4Ø ¨tÑ#4°QÑ#7Õ?¸%×?à#(˜Ùñ 3Aö  Ùð �Ø�	Ø'×,Ñ,Ö.�DØ%Ñ+¨AÑ.�CØ›>Ð)˜>Ø)/©Ñ&�E Ø).˜h�HØ“zØ#&˜Ø!$¡°±Ñ =™Ø›Ø#&˜Ø!$¡°±Ñ =™ñ !Ø˜yÓ(Ø#%˜Ø$)˜	Ø 	Õ)Ø*2¸(Ð)C˜›ñ% /ð( %-§N¡NÖ$4‘L�D˜&Ø#)�F“Ló %5ñ[  +ð^ �M‰M× Ñ  ×(ñe ,ðf 	×!Ñ!Õ#r   c                 óä   • U R                   nU R                  n/ nU HO  n0 nUR                  5        H%  u  pgUS:”  a  SXrU   S   4XV'   M  X&   S   US4XV'   M'     UR                  U5        MQ     U$ )Nr   r	   )rb   rO   rE   r™   )rh   rb   rO   r›   ri   r�   rQ   r¤   s           r   r—   Ú"VariationModel._locationsToRegions¶  s‚   € Ø—N‘Nˆ	Ø—_‘_ˆ
àˆÛˆCØˆFØ!Ÿi™ižk‘
�Ø˜!“8Ø$% t¸Ñ-=¸aÑ-@Ð#A�F“Là$.Ñ$4°QÑ$7¸¸qÐ#A�F“Lñ	 *ð
 �N‰N˜6Ö"ñ ð ˆr   c                 óú   • / U l         [        U R                  5       H[  u  p0 n[        U R                  S U 5       H  u  pE[	        X%5      nU(       d  M  XcU'   M     U R                   R                  U5        M]     g r   )ÚdeltaWeightsr˜   rb   r–   r   r™   )rh   rœ   ri   ÚdeltaWeightÚjrM   rP   s          r   rš   Ú#VariationModel._computeDeltaWeightsÅ  sl   € ØˆÔÜ §¡Ö/‰FˆAØˆKä'¨¯©°b°qÐ(9Ö:‘
�Ü& sÓ4�ß�6Ø%+ “Nñ ;ð ×Ñ×$Ñ$ [Ö1ò 0r   ©Úroundc                óŒ  • [        U5      [        U R                  5      :X  d%   [        U5      [        U R                  5      45       eU R                  n/ n[        U R                  5       HU  u  pVXU      nUR	                  5        H  u  p‰U	S:X  a	  XtU   -  nM  XtU   U	-  -  nM      UR                  U" U5      5        MW     U$ )Nr	   )r0   r¬   re   r˜   rE   r™   )
rh   ÚmasterValuesr±   rd   rI   rœ   ÚweightsÚdeltar®   Úweights
             r   Ú	getDeltasÚVariationModel.getDeltasÐ  sÄ   € Ü�<Ó ¤C¨×(9Ñ(9Ó$:Ó:ð 	
Ü�ÓÜ�×!Ñ!Ó"ð=
ó 	
Ð:ð ×%Ñ%ˆØˆÜ# D×$5Ñ$5Ö6‰JˆAØ ¨¡Ñ,ˆEØ$Ÿ]™]ž_‘	�Ø˜Q“;Ø ™V‘O’Eà ™V f™_Ñ,’Eñ	 -ð
 �J‰J‘u˜U“|Ö$ñ 7ð ˆ
r   c                ó^   • U R                  U5      u  p1UR                  XS9UR                  4$ )Nr°   )rt   r·   r–   )rh   rE   r±   Úmodels       r   ÚgetDeltasAndSupportsÚ#VariationModel.getDeltasAndSupportsá  s.   € Ø×'Ñ'¨Ó.‰ˆØ�‰˜uˆÐ2°E·N±NÐBÐBr   c           
      ó€   • U R                    Vs/ s H"  n[        XU R                  U R                  S9PM$     sn$ s  snf )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=   rO   )r–   r   r=   rO   )rh   ri   rM   s      r   Ú
getScalarsÚVariationModel.getScalarså  sG   € ð  Ÿ=š=ó	
ò )�ô Ø¨$×*:Ñ*:ÀtÇÁôñ )ñ	
ð 	
ùò 
s   �);c                 óL  • U R                  U5      n[        [        [        U R                  5      5      5       H/  u  p4UR                  5        H  u  pVX%==   X#   U-  -  ss'   M     M1     [        [        U5      5       Vs/ s H  o2U R                  U      PM     nnU$ s  snf )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¬   rE   Úranger0   rd   )rh   ÚtargetLocationrI   rœ   r´   r®   r¶   s          r   ÚgetMasterScalarsÚVariationModel.getMasterScalarsñ  s‹   € ð �o‰o˜nÓ-ˆÜ"¤4¬	°$×2CÑ2CÓ(DÓ#EÖF‰JˆAØ$Ÿ]™]ž_‘	�Ø“˜#™& 6™/Ñ)•ó -ñ Gô .3´3°s³8¬_Ó=ª_¨�4—<‘< ‘?Ô#©_ˆÐ=Øˆ
ùò >s   ÂB!c                 ó–   • Sn[        U 5      [        U5      :X  d   e[        X5       H  u  p4U(       d  M  X4-  nUc  UnM  X%-  nM     U$ )a&  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Úscalarsr;   rw   rP   Úcontributions         r   ÚinterpolateFromValuesAndScalarsÚ.VariationModel.interpolateFromValuesAndScalars  sV   € ð ˆÜ�6‹{œc '›lÓ*Ð*Ð*Ü  Ö1‰MˆEÞÙØ ™>ˆLØ‰yØ ’àÑ!’ñ 2ð ˆr   c                 ó,   • [         R                  X5      $ )z>Interpolate from deltas and scalars fetched from getScalars().)r   rË   )ÚdeltasrÉ   s     r   ÚinterpolateFromDeltasAndScalarsÚ.VariationModel.interpolateFromDeltasAndScalars  s   € ô ×=Ñ=¸fÓNÐNr   c                 óF   • U R                  U5      nU R                  X#5      $ )z)Interpolate from deltas, at location loc.)r¾   rÏ   )rh   ri   rÎ   rÉ   s       r   ÚinterpolateFromDeltasÚ$VariationModel.interpolateFromDeltas  s!   € à—/‘/ #Ó&ˆØ×3Ñ3°FÓDÐDr   c                óF   • U R                  U5      nU R                  X$5      $ )z0Interpolate from master-values, at location loc.)rÅ   rË   )rh   ri   r³   r±   rÉ   s        r   ÚinterpolateFromMastersÚ%VariationModel.interpolateFromMasters#  s#   € à×'Ñ'¨Ó,ˆØ×3Ñ3°LÓJÐJr   c                óB   • U R                  XS9nU R                  XB5      $ )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Ï   )rh   r³   rÉ   r±   rÎ   s        r   Ú interpolateFromMastersAndScalarsÚ/VariationModel.interpolateFromMastersAndScalars(  s%   € ð —‘ �Ð:ˆØ×3Ñ3°FÓDÐDr   )
rg   r]   rO   r¬   r=   rb   rd   r_   re   r–   )NF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rm   rt   Ústaticmethodr`   ra   r“   rf   r—   rš   r   r·   r»   r¾   rÅ   rË   rÏ   rÒ   rÕ   rØ   Ú__static_attributes__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ð Er   r   c                 ó@  ^ • UR                  5       nU(       d  T $ T U;   a  UT    $ [        U5      nT U:  a
  T X   -   U-
  $ [        U5      nT U:”  a
  T X   -   U-
  $ [        U 4S jU 5       5      n[        U 4S jU 5       5      nX   nX   nXgU-
  T U-
  -  XT-
  -  -   $ )Nc              3   ó6   >#   • U  H  oT:  d  M
  Uv •  M     g 7fr   r   ©r   rk   r;   s     €r   r   Ú%piecewiseLinearMap.<locals>.<genexpr>=  ó   øé € Ð%’t�! 1™u�A‰A’tùó   ƒ	�	c              3   ó6   >#   • U  H  oT:”  d  M
  Uv •  M     g 7fr   r   rã   s     €r   r   rä   >  rå   ræ   )rD   r:   r9   )r;   rd   rD   rk   ÚaÚbÚvaÚvbs   `       r   r   r   0  s´   ø€ Ø�<‰<‹>€DÞØˆØˆDƒyØ�q‰zÐÜˆD‹	€AØˆ1ƒuØ�7‘:‰~ Ñ!Ð!ÜˆD‹	€AØˆ1ƒuØ�7‘:‰~ Ñ!Ð!äÔ%‘tÓ%Ó%€AÜÔ%‘tÓ%Ó%€AØ	‰€BØ	‰€BØ�b‘˜Q ™UÑ# q¡uÑ-Ñ-Ð-r   c                 óZ  • SSK Jn  SSKnUR                  S[        R
                  S9nUR                  SSSS	S
9  UR                  SS9nUR                  SSS[        S9  UR                  SSSSSS9  UR                  U 5      n U" U R                  S9  SSKJn  U R                  (       a©  SSKJn  U" 5       nUR                  U R                  5        UR                    Vs/ s H  oˆR"                  PM     n	n[%        S5        U" U	5        UR'                  5         [%        S5        UR                    Vs/ s H  oˆR"                  PM     n	nU" U	5        O[)        [+        S5      [+        S5      S-   5       V
s/ s H  n
[-        U
5      PM     nn
U R.                   Vs/ s H.  n[1        [3        US UR5                  S 5       5       5      5      PM0     n	n[7        U	5      n[%        S!5        U" UR.                  5        [%        S"5        U" UR8                  5        gs  snf s  snf s  sn
f s  snf )#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   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )Úfloatrq   s     r   r   Úmain.<locals>.<genexpr>r  s   é € Ð;ªl¨œE !ŸH˜Hªlùs   ‚Ú,zSorted locations:z	Supports:)Ú	fontToolsrí   ÚargparseÚArgumentParserÚmainrÞ   Úadd_argumentÚadd_mutually_exclusive_groupÚstrÚ
parse_argsÚloglevelrú   ÚdesignspaceÚfontTools.designspaceLibrû   ÚreadÚsourcesrG   ÚprintÚ	normalizerÃ   ÚordÚchrrb   Údictr1   Úsplitr   r–   )Úargsrí   r  ÚparserÚgrouprú   rû   ÚdocÚsÚlocsÚcrH   rº   s                r   r  r  D  sê  € å&Ûà×$Ñ$Ø!Ü—L‘Lð %ð €Fð ×ÑØØØØ/ð	 ñ ð ×/Ñ/¸Ð/Ð>€EØ	×Ñ�t˜_°mÌ#ÐÑNØ	×ÑØØØØØUð ñ ð ×Ñ˜TÓ"€Dá�t—}‘}Ò%Ýà××Ý@á!Ó#ˆØ�‰�×!Ñ!Ô"Ø$'§K¢KÓ0¢K˜q—
”
¡KˆÐ0ÜÐ#Ô$ÙˆtŒØ�‰ŒÜÐ%Ô&Ø$'§K¢KÓ0¢K˜q—
”
¡KˆÐ0Ùˆt�ä %¤c¨#£h´°C³¸1±Ô =Ó>Ò =˜1”�A–Ñ =ˆÐ>àGKÇ~Â~ó
ÚGUÀ!ŒD”�TÑ;¨a¯g©g°c¬lÓ;Ó<Ö=Á~ð 	ð 
ô ˜4Ó €EÜ	Ð
ÔÙ
ˆ5�?‰?ÔÜ	ˆ+ÔÙ
ˆ5�>‰>Õùò# 1ùò
 1ùò ?ùò
s   Ã!HÄ4HÅ7H#Æ5H(Ú__main__r   )F)TFN)rÞ   Ú__all__ÚfontTools.misc.roundToolsr   Úerrorsr
   r   r   r&   r-   r4   r   r   r   Úobjectr   r   r  rÚ   ÚdoctestÚsysr0   Ú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ÓØ�Š‘“Ôà‡H‚HˆW�_Š_Ó×%Ñ%Õ&ð r   