§
    |Øj]  ã                  óš  — d Z ddlmZ g d¢ZddlmZ ddlmZ ddlm	Z	 ddl
mZ erdd	lmZmZ d
„ Zd„ Zd,d„Zd,d„Zd„ Z	 d-ddœd.d„Z	 d-dddœd/d"„Zd0d$„Z G d%„ d&e¦  «        Zd1d)„Zd,d*„Zed+k    rXddlZddlZ eej        ¦  «        dk    r ej         e¦   «         ¦  «          ej         ej        ¦   «         j         ¦  «         dS dS )2z%Variation fonts interpolation models.é    )Úannotations)ÚnormalizeValueÚnormalizeLocationÚsupportScalarÚpiecewiseLinearMapÚVariationModel)ÚMapping)ÚTYPE_CHECKING)ÚnoRoundé   )ÚVariationModelError)r	   ÚSequencec                ó   — d„ | D ¦   «         S )Nc                ó   — g | ]}|®|‘ŒS ©N© ©Ú.0Úls     úŒ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/fontTools/varLib/models.pyú
<listcomp>znonNone.<locals>.<listcomp>   s   € Ð,Ð,Ð,�!˜a˜mˆA˜m˜m˜mó    r   ©Úlsts    r   ÚnonNoner      s   € Ø,Ð,�sÐ,Ñ,Ô,Ð,r   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó   K  — | ]}|d u V — Œ	d S r   r   r   s     r   ú	<genexpr>zallNone.<locals>.<genexpr>   s&   è è € Ð&Ð&˜Qˆq�DˆyÐ&Ð&Ð&Ð&Ð&Ð&r   ©Úallr   s    r   ÚallNoner!      s   € ÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&Ð&r   Nc                ó�   ‡ ‡‡— ‰€t          ˆ fd„|D ¦   «         ¦  «        S  ‰‰ ¦  «        Št          ˆˆfd„|D ¦   «         ¦  «        S )Nc              3  ó$   •K  — | ]
}‰|k    V — Œd S r   r   )r   ÚitemÚrefs     €r   r   zallEqualTo.<locals>.<genexpr>    s'   øè è € Ð/Ð/ 4�3˜$’;Ð/Ð/Ð/Ð/Ð/Ð/r   c              3  ó6   •K  — | ]}‰ ‰|¦  «        k    V — Œd S r   r   )r   r$   ÚmappedÚmappers     €€r   r   zallEqualTo.<locals>.<genexpr>#   s0   øè è € Ð6Ð6¨$ˆv˜˜ ™œÒ%Ð6Ð6Ð6Ð6Ð6Ð6r   r   )r%   r   r(   r'   s   ` `@r   Ú
allEqualTor)      s`   øøø€ Ø€~ÝÐ/Ð/Ð/Ð/¨3Ð/Ñ/Ô/Ñ/Ô/Ð/àˆV�C‰[Œ[€FÝÐ6Ð6Ð6Ð6Ð6°#Ð6Ñ6Ô6Ñ6Ô6Ð6r   c                ó�   — | sdS t          | ¦  «        }	 t          |¦  «        }n# t          $ r Y dS w xY wt          |||¬¦  «        S )NT)r(   )ÚiterÚnextÚStopIterationr)   )r   r(   ÚitÚfirsts       r   ÚallEqualr0   &   sc   € Øð ØˆtÝ	ˆc‰Œ€BðÝ�R‘”ˆˆøÝð ð ð Øˆtˆtðøøøå�e˜R¨Ð/Ñ/Ô/Ð/s   •% ¥
3²3c                óz   — t          | ¦  «        t          |¦  «        k    sJ ‚d„ t          || ¦  «        D ¦   «         S )Nc                ó   — g | ]	\  }}|¯|‘Œ
S r   r   )r   r   Úts      r   r   zsubList.<locals>.<listcomp>3   s!   € Ð/Ð/Ð/‘$�!�Q¨QÐ/ˆAÐ/Ð/Ð/r   ©ÚlenÚzip)Útruthr   s     r   ÚsubListr8   1   s;   € Ýˆu‰:Œ:�˜S™œÒ!Ð!Ð!Ð!Ø/Ð/�#˜c 5™/œ/Ð/Ñ/Ô/Ð/r   F)Úallow_decreasingÚvÚfloatÚtripleúSequence[float]ÚextrapolateÚboolr9   Úreturnc          
     óæ  — |\  }}}|o||k    }|r||cxk    r|k    s-n n||cxk    r|k    sn t          d|d›d|d›d|d›�¦  «        ‚|rt          | |||f|¦  «        }|r| ndS |st          t          | |¦  «        |¦  «        } | |k    s||k    rdS | |k     r||k    s| |k    r||k    r| |z
  ||z
  z  S | |k    r||k    s#| |k     r||k    sJ d| › d|› d|› d|› d�	¦   «         ‚| |z
  ||z
  z  S )a÷  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

    If allow_decreasing is true, the triple can also be decreasing (e.g. the
    design values of a designspace axis whose map falls as the user values
    rise). Its first value still maps to -1 and its last to +1, so -1 is always
    the minimum of the user axis, even when that is the largest number in the
    triple.

    >>> normalizeValue(38, (38, 28, 23), allow_decreasing=True)
    -1.0
    >>> normalizeValue(33, (38, 28, 23), allow_decreasing=True)
    -0.5
    >>> normalizeValue(23, (38, 28, 23), allow_decreasing=True)
    1.0
    z8Invalid axis values, must be minimum, default, maximum: z3.3fz, ç        zOoops... v=z
, triple=(ú))Ú
ValueErrorr   ÚmaxÚmin)	r:   r<   r>   r9   ÚlowerÚdefaultÚupperÚ
decreasingÚ
normalizeds	            r   r   r   6   s½  € ð: #Ñ€Eˆ7�EØ!Ð3 e¨e¢m€JØ)3ð 
ˆE�WÐ%Ð%Ò%Ð% Ò%Ð%Ð%Ð%Ð%¸À'Ð9RÐ9RÒ9RÐ9RÈUÒ9RÐ9RÐ9RÐ9RÝð:ØÐ9ð:ð :Ø$Ð9ð:ð :Ø-2Ð9ð:ð :ñ
ô 
ð 	
ð ð 2Ý# A¨¨w¸Ð'>ÀÑLÔLˆ
Ø(Ð1�
ˆ{ˆ{¨cÐ1Øð &Ý•�A�u‘”˜uÑ%Ô%ˆàˆG‚|€|�u ’~�~Øˆsà	ˆGŠˆ˜ Ò(Ð(¨a°'ªk¨k¸eÀwÒ>NÐ>NØ�G‘ ¨%¡Ñ0Ð0à�G’� ¨Ò 0Ð 0Ø�ŠKˆK˜E WÒ,Ð,Ð,ØB˜ÐBÐB eÐBÐB¨wÐBÐB¸%ÐBÐBÐBñ -Ô,ð
ð �G‘ ¨¡Ñ0Ð0r   )Úvalidater9   ÚlocationúMapping[str, float]Úaxesú(Mapping[str, tuple[float, float, float]]rL   údict[str, float]c               óÄ  — |r�t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        k    sKJ t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        z
  ¦   «         ‚i }|                     ¦   «         D ]7\  }}|                      ||d         ¦  «        }t	          ||||¬¦  «        ||<   Œ8|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>   r9   )ÚsetÚkeysÚitemsÚgetr   )	rM   rO   r>   rL   r9   ÚoutÚtagr<   r:   s	            r   r   r   l   sÙ   € ð\ ð 
Ý�8—=’=‘?”?Ñ#Ô#¥s¨4¯9ª9©;¬;Ñ'7Ô'7Ò7Ð7Ð7½¸X¿]º]¹_¼_Ñ9MÔ9MÕPSØ�IŠI‰KŒKñQ
ô Q
ñ :
Ñ7Ô7Ð7ð €CØ—z’z‘|”|ð 
ð 
‰ˆˆVØ�LŠL˜˜f QœiÑ(Ô(ˆÝ!Øˆv ;ÐAQð
ñ 
ô 
ˆˆC‰ˆð €Jr   Tc                ó‚  — |r|€t          d¦  «        ‚d}|                     ¦   «         D �]\  }\  }}}	|r8|dk    rŒ||k    s||	k    rŒ |dk     r|	dk    rŒ-|                      |d¦  «        }
n|| v sJ ‚| |         }
|
|k    rŒY|r„||         \  }}|
|k     r7||k    r1||k    r||	k     r||
|	z
  ||	z
  z  z  }Œ�||k     r||
|z
  ||z
  z  z  }Œ¢n<||
k     r6||	k    r0||k    r||k     r||
|z
  ||z
  z  z  }ŒÊ||k     r||
|	z
  ||	z
  z  z  }Œß|
|k    s|	|
k    rd} n&|
|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
    Nz2axisRanges must be passed when extrapolate is Trueg      ð?rB   )Ú	TypeErrorrU   rV   )rM   ÚsupportÚotr>   Ú
axisRangesÚscalarÚaxisrG   ÚpeakrI   r:   ÚaxisMinÚaxisMaxs                r   r   r   §   sü  € ðD ð N�zÐ)ÝÐLÑMÔMÐMØ€FØ&-§m¢m¡o¤oð (3ñ (3Ñ"ˆÑ"ˆu�d˜EØð 	à�sŠ{ˆ{ØØ�tŠ|ˆ|˜t eš|˜|ØØ�sŠ{ˆ{˜u sš{˜{ØØ—’˜T 3Ñ'Ô'ˆAˆAà˜8Ð#Ð#Ð#Ð#Ø˜”ˆAØ�Š9ˆ9Øàð 	Ø)¨$Ô/ÑˆG�WØ�7Š{ˆ{˜u¨Ò/Ð/Ø˜7’?�? t¨e¢| |Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜t’^�^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØð $ð ˜1’� ¨EÒ!1Ð!1Ø˜d’?�? u¨t¢| |Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜G’^�^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØà�Š:ˆ:˜ !š˜ØˆFØˆEàˆtŠ8ˆ8Ø�q˜5‘y T¨E¡\Ñ2Ñ2ˆF‰Fà�q˜5‘y T¨E¡\Ñ2Ñ2ˆF‰FØ€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dS )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}]
    NF)r]   c               óB  ‡ ‡— d„ ‰D ¦   «         Št          t          d„ ‰D ¦   «         ¦  «        ¦  «        t          ‰¦  «        k    rt          d¦  «        ‚‰‰ _        |�|ng ‰ _        |‰ _        |€0|r‰                      ‰¦  «        }nd„ ‰D ¦   «         }d„ |D ¦   «         }|‰ _        ‰                      ‰‰ j        ¬¦  «        }t          ‰|¬¦  «        ‰ _
        ˆ fd„‰D ¦   «         ‰ _        ˆfd	„‰ j
        D ¦   «         ‰ _        ‰                      ¦   «          i ‰ _        d S )
Nc                óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                ó&   — i | ]\  }}|d k    ¯||“ŒS ©rB   r   ©r   Úkr:   s      r   ú
<dictcomp>z6VariationModel.__init__.<locals>.<listcomp>.<dictcomp>-  s#   € Ð?Ð?Ð?™t˜q !°a¸3²h°h�a˜°h°h°hr   ©rU   ©r   Úlocs     r   r   z+VariationModel.__init__.<locals>.<listcomp>-  s/   € ÐUÐUÐUÀCÐ?Ð? s§y¢y¡{¤{Ð?Ñ?Ô?ÐUÐUÐUr   c              3  ór   K  — | ]2}t          t          |                     ¦   «         ¦  «        ¦  «        V — Œ3d S r   )ÚtupleÚsortedrU   r   s     r   r   z*VariationModel.__init__.<locals>.<genexpr>/  s:   è è € Ð?Ð?°•5� §¢¡	¤	Ñ*Ô*Ñ+Ô+Ð?Ð?Ð?Ð?Ð?Ð?r   zLocations must be unique.c                ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r   ©rT   ©r   rm   r_   s      r   ú	<setcomp>z*VariationModel.__init__.<locals>.<setcomp>9  s-   € ÐLÐLÐL CÀÇÂÁÄÐLÐL¸˜4ÐLÐLÐLÐLr   c                ó   — i | ]}|d “ŒS ))éÿÿÿÿr   r   )r   r_   s     r   rj   z+VariationModel.__init__.<locals>.<dictcomp>:  s   € Ð@Ð@Ð@°˜d GÐ@Ð@Ð@r   )Ú	axisOrder)Úkeyc                óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   ©Ú	locationsÚindex©r   r   Úselfs     €r   r   z+VariationModel.__init__.<locals>.<listcomp>B  ó)   ø€ ÐCÐCÐC°A˜œ×,Ò,¨QÑ/Ô/ÐCÐCÐCr   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©r|   ©r   r   r{   s     €r   r   z+VariationModel.__init__.<locals>.<listcomp>C  ó%   ø€ ÐJÐJÐJ°a˜yŸš¨qÑ1Ô1ÐJÐJÐJr   )r5   rS   r   ÚorigLocationsrw   r>   ÚcomputeAxisRangesr]   ÚgetMasterLocationsSortKeyFuncrp   r{   ÚmappingÚreverseMappingÚ_computeMasterSupportsÚ
_subModels)r~   r{   rw   r>   r]   ÚallAxesÚkeyFuncs   ``     r   Ú__init__zVariationModel.__init__*  sZ  øø€ ð VÐUÈ9ÐUÑUÔUˆ	å�sÐ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?Ñ@Ô@ÅCÈ	ÁNÄNÒRÐRÝ%Ð&AÑBÔBÐBà&ˆÔØ&/Ð&;˜˜ÀˆŒØ&ˆÔØÐØð AØ!×3Ò3°IÑ>Ô>�
�
àLÐL¨9ÐLÑLÔL�Ø@Ð@¸Ð@Ñ@Ô@�
Ø$ˆŒØ×4Ò4Ø ¤ð 5ñ 
ô 
ˆõ   	¨wÐ7Ñ7Ô7ˆŒð DÐCÐCÐC¸ÐCÑCÔCˆŒØJÐJÐJÐJ¸4¼>ÐJÑJÔJˆÔà×#Ò#Ñ%Ô%Ð%ØˆŒˆˆr   c                ó  — d|vr| |fS t          d„ |D ¦   «         ¦  «        }| j                             |¦  «        }|€?t          t	          || j        ¦  «        | j        | 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V — Œ	d S r   r   ©r   r:   s     r   r   z-VariationModel.getSubModel.<locals>.<genexpr>Q  s&   è è € Ð1Ð1 a�A˜T�MÐ1Ð1Ð1Ð1Ð1Ð1r   ©r>   r]   )	ro   rŠ   rV   r   r8   r„   rw   r>   r]   )r~   rU   rx   ÚsubModels       r   ÚgetSubModelzVariationModel.getSubModelH  s§   € ð �uÐÐØ˜�;ÐÝÐ1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1ˆØ”?×&Ò& sÑ+Ô+ˆØÐÝ%Ý˜˜TÔ/Ñ0Ô0Ø”Ø Ô,Øœ?ð	ñ ô ˆHð $,ˆDŒO˜CÑ Ø�  eÑ,Ô,Ð,Ð,r   c                óÞ   — i }d„ | D ¦   «         }| D ][}|D ]V}|                      |d¦  «        }|                      |||f¦  «        \  }}t          ||¦  «        t          ||¦  «        f||<   ŒWŒ\|S )Nc                ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r   rr   rs   s      r   rt   z3VariationModel.computeAxisRanges.<locals>.<setcomp>`  s-   € ÐDÐDÐD˜C¸¿º¹¼ÐDÐD°�4ÐDÐDÐDÐDr   r   )rV   rF   rE   )r{   r]   r‹   rm   r_   Úvaluera   rb   s           r   r…   z VariationModel.computeAxisRanges]  sŸ   € àˆ
ØDÐD 9ÐDÑDÔDˆØð 	Lð 	LˆCØð Lð L�ØŸš  aÑ(Ô(�Ø#-§>¢>°$¸À¸Ñ#GÔ#GÑ �˜Ý#& u¨gÑ#6Ô#6½¸EÀ7Ñ8KÔ8KÐ#K�
˜4Ñ Ð ðLð Ðr   c                óL  — i | vrt          d¦  «        ‚i }| D ]|}t          |¦  «        dk    rŒt          t          |¦  «        ¦  «        }||         }||vrdh||<   |||         vsJ d|›d|›d|›�¦   «         ‚||                              |¦  «         Œ}d„ } |||¦  «        }|S )NzBase master not found.r   rB   zValue "z" in axisPoints["z"] -->  c                ó    ‡ ‡‡— d„ Šˆˆ ˆfd„}|S )Nc                ó&   — | dk     rdn	| dk    rdndS )Nr   rv   r   r   )r:   s    r   ÚsignzJVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.signz  s    € Ø šU˜U�r�r¨a°!ªe¨e¨¨¸Ð:r   c           	     óÞ  •‡ — t          ‰ ¦  «        }ˆfd„‰                      ¦   «         D ¦   «         }ˆ fd„‰D ¦   «         }|                     ˆfd„t          ‰                      ¦   «         ¦  «        D ¦   «         ¦  «         |t          |¦  «         t          ˆfd„|D ¦   «         ¦  «        t          |¦  «        t          ˆ ˆfd„|D ¦   «         ¦  «        t          ˆ fd„|D ¦   «         ¦  «        fS )Nc                ó6   •— g | ]\  }}|‰v ¯	|‰|         v ¯|‘ŒS r   r   )r   r_   r–   Ú
axisPointss      €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>  sA   ø€ ð ð ð á#˜˜eØ˜zÐ)Ð)¨e°zÀ$Ô7GÐ.GÐ.Gð à.GÐ.GÐ.Gr   c                ó   •— g | ]}|‰v ¯|‘Œ	S r   r   ©r   r_   rm   s     €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>„  s   ø€ ÐIÐIÐI¨¸TÀS¸[¸[˜t¸[¸[¸[r   c                ó   •— g | ]}|‰v¯|‘Œ	S r   r   ©r   r_   rw   s     €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>†  s#   ø€ ÐRÐRÐR˜d¸DÈ	Ð<QÐ<Q�TÐ<QÐ<QÐ<Qr   c              3  óN   •K  — | ]}|‰v r‰                      |¦  «        nd V — Œ dS )i   Nr�   r¡   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>‹  sR   øè è € ð ð à ð 26¸Ð1BÐ1B˜	Ÿš¨Ñ-Ô-Ð-Èðð ð ð ð ð r   c              3  ó:   •K  — | ]} ‰‰|         ¦  «        V — Œd S r   r   )r   r_   rm   rš   s     €€r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>�  s@   øè è € ð ð Ø,0˜˜˜S œY™œðð ð ð ð ð r   c              3  óB   •K  — | ]}t          ‰|         ¦  «        V — Œd S r   )ÚabsrŸ   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>“  s>   øè è € ð ð Ø+/�˜C œI™œðð ð ð ð ð r   )r5   rU   Úextendrp   rT   ro   )rm   ÚrankÚonPointAxesÚorderedAxesrw   r�   rš   s   `   €€€r   rx   zIVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key}  sd  øø€ Ý˜3‘x”x�ðð ð ð à'*§y¢y¡{¤{ðñ ô �ð
 JÐIÐIÐI°	ÐIÑIÔI�Ø×"Ò"ØRÐRÐRÐR¥f¨S¯XªX©Z¬ZÑ&8Ô&8ÐRÑRÔRñô ð ð Ý˜Ñ%Ô%Ð%Ýð ð ð ð à$/ðñ ô ñ ô õ ˜+Ñ&Ô&Ýð ð ð ð ð Ø4?ðñ ô ñ ô õ ð ð ð ð Ø3>ðñ ô ñ ô ðð r   r   )r�   rw   rx   rš   s   `` @r   ÚgetKeyz<VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKeyy  s>   øøø€ ð;ð ;ð ;ðð ð ð ð ð ð ð6 ˆJr   )r   r5   r,   r+   Úadd)r{   rw   r�   rm   r_   r–   rª   Úrets           r   r†   z,VariationModel.getMasterLocationsSortKeyFunch  sì   € à�YÐÐÝ%Ð&>Ñ?Ô?Ð?Øˆ
Øð 
	(ð 
	(ˆCÝ�3‰xŒx˜1Š}ˆ}ØÝ�˜S™	œ	‘?”?ˆDØ˜”IˆEØ˜:Ð%Ð%Ø$' 5�
˜4Ñ à˜Z¨Ô-Ð-Ð-Ð-Ð-Ø;@¸5¸5À$À$À$È
È
ÐSñ .Ô-Ð-à�tÔ× Ò  Ñ'Ô'Ð'Ð'ð	ð 	ð 	ðB ˆf�Z Ñ+Ô+ˆØˆ
r   c                óÔ   ‡ ‡‡— ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         ‰ _         d„ ‰ j         D ¦   «         Šˆ fd„‰D ¦   «         ‰ _        ˆfd„‰ j        D ¦   «         ‰ _        i ‰ _        |S )Nc                ó    •— g | ]
}‰|         ‘ŒS r   r   )r   ÚidxÚmaster_lists     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>   s   ø€ Ð8Ð8Ð8¨�K Ô$Ð8Ð8Ð8r   c                ó*   •— g | ]}‰j         |         ‘ŒS r   )r„   )r   r¯   r~   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>¡  s!   ø€ ÐIÐIÐI¸#˜dÔ0°Ô5ÐIÐIÐIr   c                óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                ó&   — i | ]\  }}|d k    ¯||“ŒS rg   r   rh   s      r   rj   z<VariationModel.reorderMasters.<locals>.<listcomp>.<dictcomp>£  s#   € Ð6Ð6Ð6‘d�a˜¨Q°#ªX¨XˆQ�¨X¨X¨Xr   rk   rl   s     r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>¢  s<   € ð 
ð 
ð 
Ø;>Ð6Ð6˜cŸiši™kœkÐ6Ñ6Ô6ð
ð 
ð 
r   c                óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   rz   r}   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>¥  r   r   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   r�   r‚   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>¦  rƒ   r   )r„   r‡   r{   rˆ   rŠ   )r~   r°   r‡   Únew_listr{   s   ``  @r   ÚreorderMasterszVariationModel.reorderMasters�  s¥   øøø€ ð 9Ð8Ð8Ð8°Ð8Ñ8Ô8ˆØIÐIÐIÐIÀÐIÑIÔIˆÔð
ð 
ØBFÔBTð
ñ 
ô 
ˆ	ð DÐCÐCÐC¸ÐCÑCÔCˆŒØJÐJÐJÐJ¸4¼>ÐJÑJÔJˆÔØˆŒØˆr   c                óX  — g | _         |                      ¦   «         }t          |¦  «        D �]i\  }}t          |                     ¦   «         ¦  «        }|d |…         D �]}t          |                     ¦   «         ¦  «        |k    rŒ)d}|                     ¦   «         D ]:\  }\  }}	}
||         d         |	k    s|||         d         cxk     r|
k     sn d} nŒ;|sŒ}i }d}|                     ¦   «         D ]g}||         d         }||v sJ ‚||         \  }}}
||
}}||k     r|}||z
  ||z
  z  }n||k     r|}||z
  |
|z
  z  }nŒO||k    ri }|}||k    r|||f||<   Œh|                     ¦   «         D ]
\  }}|||<   Œ�Œ| j                              |¦  «         �Œk|                      ¦   «          d S )NTr   Frv   )ÚsupportsÚ_locationsToRegionsÚ	enumeraterS   rT   rU   ÚappendÚ_computeDeltaWeights)r~   ÚregionsÚiÚregionÚlocAxesÚprev_regionÚrelevantr_   rG   r`   rI   ÚbestAxesÚ	bestRatioÚvalÚlocVÚnewLowerÚnewUpperÚratior<   s                      r   r‰   z%VariationModel._computeMasterSupportsª  s5  € ØˆŒØ×*Ò*Ñ,Ô,ˆÝ" 7Ñ+Ô+ð 2	)ñ 2	)‰IˆAˆvÝ˜&Ÿ+š+™-œ-Ñ(Ô(ˆGà& r¨ rœ{ð .*ñ .*�å�{×'Ò'Ñ)Ô)Ñ*Ô*¨gÒ5Ð5Øà�Ø28·,²,±.´.ð ð Ñ.�DÑ.˜5 $¨à# DÔ)¨!Ô,°Ò4Ð4Ø  ;¨tÔ#4°QÔ#7Ð?Ð?Ò?Ð?¸%Ò?Ð?Ð?Ð?à#(˜Ø˜øØð Øð �Ø�	Ø'×,Ò,Ñ.Ô.ð Dð D�DØ% dÔ+¨AÔ.�CØ 6˜>˜>˜>˜>Ø)/°¬Ñ&�E˜4 Ø).°˜h�HØ˜T’z�zØ#&˜Ø!$ t¡°¸±Ñ =˜˜Ø š˜Ø#&˜Ø!$ t¡°¸±Ñ =˜˜ð !Ø˜yÒ(Ð(Ø#%˜Ø$)˜	Ø 	Ò)Ð)Ø*2°D¸(Ð)C˜ ™øà$,§N¢NÑ$4Ô$4ð *ð *‘L�D˜&Ø#)�F˜4‘L�Lñ*àŒM× Ò  Ñ(Ô(Ð(Ñ(Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r   c                óð   — | j         }| j        }g }|D ]b}i }|                     ¦   «         D ]4\  }}|dk    rd|||         d         f||<   Œ ||         d         |df||<   Œ5|                     |¦  «         Œc|S )Nr   r   )r{   r]   rU   r¼   )r~   r{   r]   r¾   rm   rÀ   r_   rÇ   s           r   rº   z"VariationModel._locationsToRegionsâ  s¡   € Ø”Nˆ	Ø”_ˆ
àˆØð 	#ð 	#ˆCØˆFØ!Ÿiši™kœkð Bð B‘
��dØ˜!’8�8Ø$% t¨Z¸Ô-=¸aÔ-@Ð#A�F˜4‘L�Là$.¨tÔ$4°QÔ$7¸¸qÐ#A�F˜4‘L�LØ�NŠN˜6Ñ"Ô"Ð"Ð"Øˆr   c                óò   — g | _         t          | j        ¦  «        D ]Z\  }}i }t          | j        d |…         ¦  «        D ]\  }}t	          ||¦  «        }|r|||<   Œ| j                              |¦  «         Œ[d S r   )ÚdeltaWeightsr»   r{   r¹   r   r¼   )r~   r¿   rm   ÚdeltaWeightÚjr[   r^   s          r   r½   z#VariationModel._computeDeltaWeightsñ  s—   € ØˆÔÝ ¤Ñ/Ô/ð 	2ð 	2‰FˆAˆsØˆKå'¨¬°b°q°bÔ(9Ñ:Ô:ð ,ð ,‘
��7Ý& s¨GÑ4Ô4�Øð ,Ø%+�K ‘NøØÔ×$Ò$ [Ñ1Ô1Ð1Ð1ð	2ð 	2r   ©Úroundc               ó¸  — t          |¦  «        t          | j        ¦  «        k    s+J t          |¦  «        t          | j        ¦  «        f¦   «         ‚| j        }g }t          | j        ¦  «        D ]k\  }}|||                  }|                     ¦   «         D ]%\  }}	|	dk    r|||         z  }Œ|||         |	z  z  }Œ&|                      ||¦  «        ¦  «         Œl|S )Nr   )r5   rÍ   rˆ   r»   rU   r¼   )
r~   ÚmasterValuesrÑ   r‡   rW   r¿   ÚweightsÚdeltarÏ   Úweights
             r   Ú	getDeltaszVariationModel.getDeltasü  sî   € Ý�<Ñ Ô ¥C¨Ô(9Ñ$:Ô$:Ò:Ð:Ð:Ý�ÑÔÝ�Ô!Ñ"Ô"ð=
Ñ:Ô:Ð:ð Ô%ˆØˆÝ# DÔ$5Ñ6Ô6ð 	%ð 	%‰JˆAˆwØ  ¨¤Ô,ˆEØ$Ÿ]š]™_œ_ð -ð -‘	��6Ø˜Q’;�;Ø˜S œV‘O�E�Eà˜S œV f™_Ñ,�E�EØ�JŠJ�u�u˜U‘|”|Ñ$Ô$Ð$Ð$Øˆ
r   c               ón   — |                       |¦  «        \  }}|                     ||¬¦  «        |j        fS )NrÐ   )r“   r×   r¹   )r~   rU   rÑ   Úmodels       r   ÚgetDeltasAndSupportsz#VariationModel.getDeltasAndSupports  s6   € Ø×'Ò'¨Ñ.Ô.‰ˆˆuØ�Š˜u¨EˆÑ2Ô2°E´NÐBÐBr   c                ó.   ‡ ‡— ˆˆ fd„‰ j         D ¦   «         S )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().c                óJ   •— g | ]}t          ‰|‰j        ‰j        ¬ ¦  «        ‘Œ S )r‘   )r   r>   r]   )r   r[   rm   r~   s     €€r   r   z-VariationModel.getScalars.<locals>.<listcomp>  sH   ø€ ð 
ð 
ð 
ð õ Ø�W¨$Ô*:ÀtÄðñ ô ð
ð 
ð 
r   )r¹   )r~   rm   s   ``r   Ú
getScalarszVariationModel.getScalars  s8   øø€ ð

ð 
ð 
ð 
ð 
ð  œ=ð	
ñ 
ô 
ð 	
r   c                óT  ‡ ‡— ‰                       |¦  «        Št          t          t          ‰ j        ¦  «        ¦  «        ¦  «        D ]8\  }}|                     ¦   «         D ]\  }}‰|xx         ‰|         |z  z  cc<   ŒŒ9ˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         Š‰S )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().c                ó6   •— g | ]}‰‰j         |                  ‘ŒS r   )r‡   )r   r¿   rW   r~   s     €€r   r   z3VariationModel.getMasterScalars.<locals>.<listcomp>+  s$   ø€ Ð=Ð=Ð=¨ˆs�4”< ”?Ô#Ð=Ð=Ð=r   )rÝ   ÚreversedÚlistr»   rÍ   rU   Úranger5   )r~   ÚtargetLocationr¿   rÔ   rÏ   rÖ   rW   s   `     @r   ÚgetMasterScalarszVariationModel.getMasterScalars  s´   øø€ ð �oŠo˜nÑ-Ô-ˆÝ"¥4­	°$Ô2CÑ(DÔ(DÑ#EÔ#EÑFÔFð 	*ð 	*‰JˆAˆwØ$Ÿ]š]™_œ_ð *ð *‘	��6Ø�A��”˜#˜aœ& 6™/Ñ)��‘�ð*ð >Ð=Ð=Ð=Ð=­Uµ3°s±8´8©_¬_Ð=Ñ=Ô=ˆØˆ
r   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().
        Nr4   )ÚvaluesÚscalarsr:   r–   r^   Úcontributions         r   ÚinterpolateFromValuesAndScalarsz.VariationModel.interpolateFromValuesAndScalars.  st   € ð ˆÝ�6‰{Œ{�c '™lœlÒ*Ð*Ð*Ð*Ý  ¨Ñ1Ô1ð 	"ð 	"‰MˆE�6Øð ØØ  6™>ˆLØˆyØ ��à�\Ñ!��Øˆr   c                ó8   — t                                | |¦  «        S )z>Interpolate from deltas and scalars fetched from getScalars().)r   ré   )Údeltasrç   s     r   ÚinterpolateFromDeltasAndScalarsz.VariationModel.interpolateFromDeltasAndScalarsE  s   € õ ×=Ò=¸fÀgÑNÔNÐNr   c                óX   — |                       |¦  «        }|                      ||¦  «        S )z)Interpolate from deltas, at location loc.)rÝ   rì   )r~   rm   rë   rç   s       r   ÚinterpolateFromDeltasz$VariationModel.interpolateFromDeltasJ  s)   € à—/’/ #Ñ&Ô&ˆØ×3Ò3°F¸GÑDÔDÐDr   c               óX   — |                       |¦  «        }|                      ||¦  «        S )z0Interpolate from master-values, at location loc.)rä   ré   )r~   rm   rÓ   rÑ   rç   s        r   ÚinterpolateFromMastersz%VariationModel.interpolateFromMastersO  s+   € à×'Ò'¨Ñ,Ô,ˆØ×3Ò3°LÀ'ÑJÔJÐJr   c               ó\   — |                       ||¬¦  «        }|                      ||¦  «        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ì   )r~   rÓ   rç   rÑ   rë   s        r   Ú interpolateFromMastersAndScalarsz/VariationModel.interpolateFromMastersAndScalarsT  s/   € ð —’ °E�Ñ:Ô:ˆØ×3Ò3°F¸GÑDÔDÐDr   )NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r�   r“   Ústaticmethodr…   r†   r·   r‰   rº   r½   r   r×   rÚ   rÝ   rä   ré   rì   rî   rð   rò   r   r   r   r   r   ø   sÆ  € € € € € ð/ð /ðd 6;ðØJNðð ð ð ð ð<-ð -ð -ð* ðð ñ „\ðð Ø;=ð 2ð 2ð 2ñ „\ð2ðhð ð ð6$ð 6$ð 6$ðpð ð ð	2ð 	2ð 	2ð 07ð ð ð ð ð ð" 4;ð Cð Cð Cð Cð Cð

ð 

ð 

ðð ð ð" ðð ñ „\ðð, ðOð Oñ „\ðOðEð Eð Eð
 BIð Kð Kð Kð Kð Kð
 PWð Eð Eð Eð Eð Eð Eð Er   r   r‡   úMapping[float, float]c                óŒ  ‡ — |                      ¦   «         }|s‰ S ‰ |v r|‰          S t          |¦  «        }‰ |k     r‰ ||         z   |z
  S t          |¦  «        }‰ |k    r‰ ||         z   |z
  S t          ˆ fd„|D ¦   «         ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        }||         }||         }|||z
  ‰ |z
  z  ||z
  z  z   S )Nc              3  ó(   •K  — | ]}|‰k     ¯|V — Œd S r   r   rh   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>i  ó'   øè è € Ð%Ð%�!˜q 1šu˜uˆA˜u˜u˜u˜uÐ%Ð%r   c              3  ó(   •K  — | ]}|‰k    ¯|V — Œd S r   r   rh   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>j  rû   r   )rT   rF   rE   )r:   r‡   rT   ri   ÚaÚbÚvaÚvbs   `       r   r   r   \  sõ   ø€ Ø�<Š<‰>Œ>€DØð ØˆØˆD€y€yØ�qŒzÐÝˆD‰	Œ	€AØˆ1‚u€uØ�7˜1”:‰~ Ñ!Ð!ÝˆD‰	Œ	€AØˆ1‚u€uØ�7˜1”:‰~ Ñ!Ð!åÐ%Ð%Ð%Ð%�tÐ%Ñ%Ô%Ñ%Ô%€AÝÐ%Ð%Ð%Ð%�tÐ%Ñ%Ô%Ñ%Ô%€AØ	�Œ€BØ	�Œ€BØ��b‘˜Q ™UÑ# q¨1¡uÑ-Ñ-Ð-r   c                óê  ‡
— ddl m} ddl}|                     dt          j        ¬¦  «        }|                     dddd	¬
¦  «         |                     d¬¦  «        }|                     dddt          ¬¦  «         |                     ddddd¬¦  «         | 	                    | ¦  «        }  || j
        ¬¦  «         ddlm} | j        r•ddlm}  |¦   «         }|                     | j        ¦  «         d„ |j        D ¦   «         }t#          d¦  «          ||¦  «         |                     ¦   «          t#          d¦  «         d„ |j        D ¦   «         } ||¦  «         nJd„ t'          t)          d¦  «        t)          d ¦  «        d!z   ¦  «        D ¦   «         Š
ˆ
fd"„| j        D ¦   «         }t-          |¦  «        }	t#          d#¦  «          ||	j        ¦  «         t#          d$¦  «          ||	j        ¦  «         dS )%z*Normalize locations on a given designspacer   )ÚconfigLoggerNzfonttools varLib.models)Údescriptionz
--loglevelÚLEVELÚINFOz Logging level (defaults to INFO))ÚmetavarrH   Ú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)ÚDesignSpaceDocumentc                ó   — g | ]	}|j         ‘Œ
S r   ©rM   ©r   Úss     r   r   zmain.<locals>.<listcomp>”  ó   € Ð0Ð0Ð0˜q�”
Ð0Ð0Ð0r   zOriginal locations:zNormalized locations:c                ó   — g | ]	}|j         ‘Œ
S r   r  r  s     r   r   zmain.<locals>.<listcomp>™  r  r   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úchr)r   Úcs     r   r   zmain.<locals>.<listcomp>œ  s   € Ð>Ð>Ð>˜1•�A‘”Ð>Ð>Ð>r   ÚAÚZr   c                ó„   •— g | ]<}t          t          ‰d „ |                     d¦  «        D ¦   «         ¦  «        ¦  «        ‘Œ=S )c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r   )r;   r�   s     r   r   z"main.<locals>.<listcomp>.<genexpr>ž  s(   è è € Ð;Ð;¨�E !™HœHÐ;Ð;Ð;Ð;Ð;Ð;r   ú,)Údictr6   Úsplit)r   r  rO   s     €r   r   zmain.<locals>.<listcomp>�  sQ   ø€ ð 
ð 
ð 
ØBC�D•�TÐ;Ð;¨a¯gªg°c©l¬lÐ;Ñ;Ô;Ñ<Ô<Ñ=Ô=ð
ð 
ð 
r   zSorted locations:z	Supports:)Ú	fontToolsr  ÚargparseÚArgumentParserÚmainrö   Úadd_argumentÚadd_mutually_exclusive_groupÚstrÚ
parse_argsÚloglevelr  ÚdesignspaceÚfontTools.designspaceLibr  ÚreadÚsourcesÚprintÚ	normalizerâ   Úordr{   r   r¹   )Úargsr  r"  ÚparserÚgroupr  r  ÚdocÚlocsrÙ   rO   s             @r   r$  r$  p  sf  ø€ à&Ð&Ð&Ð&Ð&Ð&Ø€O€O€Oà×$Ò$Ø!Ý”Lð %ñ ô €Fð ×ÒØØØØ/ð	 ñ ô ð ð ×/Ò/¸Ð/Ñ>Ô>€EØ	×Ò�t˜_°mÍ#ÐÑNÔNÐNØ	×ÒØØØØØUð ñ ô ð ð ×Ò˜TÑ"Ô"€Dà€L�t”}Ð%Ñ%Ô%Ð%ØÐÐÐÐÐàÔð 
Ø@Ð@Ð@Ð@Ð@Ð@à!Ð!Ñ#Ô#ˆØ�Š�Ô!Ñ"Ô"Ð"Ø0Ð0 C¤KÐ0Ñ0Ô0ˆÝÐ#Ñ$Ô$Ð$Øˆˆt‰ŒˆØ�Š‰ŒˆÝÐ%Ñ&Ô&Ð&Ø0Ð0 C¤KÐ0Ñ0Ô0ˆØˆˆt‰Œˆˆà>Ð>¥¥c¨#¡h¤hµ°C±´¸1±Ñ =Ô =Ð>Ñ>Ô>ˆð
ð 
ð 
ð 
ØGKÄ~ð
ñ 
ô 
ˆõ ˜4Ñ Ô €EÝ	Ð
ÑÔÐØ
€Fˆ5Œ?ÑÔÐÝ	ˆ+ÑÔÐØ
€Fˆ5Œ>ÑÔÐÐÐr   Ú__main__r   )F)
r:   r;   r<   r=   r>   r?   r9   r?   r@   r;   )rM   rN   rO   rP   r>   r?   rL   r?   r9   r?   r@   rQ   )TFN)r:   r;   r‡   rø   r@   r;   )!rö   Ú
__future__r   Ú__all__Úcollections.abcr	   Útypingr
   ÚfontTools.misc.roundToolsr   Úerrorsr   r   r   r!   r)   r0   r8   r   r   r   Úobjectr   r   r$  ró   ÚdoctestÚsysr5   ÚargvÚexitÚtestmodÚfailedr   r   r   ú<module>rD     sH  ðØ +Ð +à "Ð "Ð "Ð "Ð "Ð "ðð ð €ð $Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'àð )Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð-ð -ð -ð'ð 'ð 'ð7ð 7ð 7ð 7ð0ð 0ð 0ð 0ð0ð 0ð 0ð ð31ð
 #ð31ð 31ð 31ð 31ð 31ð 31ðr ð8ð
 Ø"ð8ð 8ð 8ð 8ð 8ð 8ðvNð Nð Nð NðbaEð aEð aEð aEð aE�Vñ aEô aEð aEðH.ð .ð .ð .ð(5ð 5ð 5ð 5ðp ˆzÒÐØÐÐÐÐÐÐÐà
€sˆ3Œ8�}„}�qÒÐØˆŒ��‘”ÑÔÐà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð Ðr   