� ��g~W��P�dZgd�ZddlmZddlmZd�Zd�Zdd �Zdd �Z d �Z dd �Z dd d�d�Z dd�Z Gd�de��Zd�Zdd�ZedkrXddlZddlZeej��dkreje����ejej��j��dSdS)z%Variation fonts interpolation models.)�normalizeValue�normalizeLocation� supportScalar�piecewiseLinearMap�VariationModel�)�noRound�)�VariationModelErrorc��d�|D��S)Nc��g|]}|�|��S�N���.0�ls �g/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/fontTools/varLib/models.py� <listcomp>znonNone.<locals>.<listcomp>s�� ,� ,� ,�!�a�m�A�m�m�m�r��lsts r�nonNoners�� ,� ,�s� ,� ,� ,�,rc�4�td�|D����S)Nc3�K�|]}|duV�� dSr rrs r� <genexpr>zallNone.<locals>.<genexpr>s&����&�&�Q�q�D�y�&�&�&�&�&�&r��allrs r�allNoners�� �&�&�#�&�&�&� &� &�&rNc�������t�fd�|D����S�����t��fd�|D����S)Nc3�$�K�|] }�|kV�� dSr r)r�item�refs �rrzallEqualTo.<locals>.<genexpr>s'�����/�/�4�3�$�;�/�/�/�/�/�/rc3�6�K�|]}��|��kV��dSr r)rr �mapped�mappers ��rrzallEqualTo.<locals>.<genexpr>s0�����6�6�$�v������%�6�6�6�6�6�6rr)r!rr$r#s` `@r� allEqualTor%s`����� �~��/�/�/�/�3�/�/�/�/�/�/� �V�C�[�[�F� �6�6�6�6�6�#�6�6�6� 6� 6�6rc��|sdSt|��} t|��}n#t$rYdSwxYwt|||���S)NT)r$)�iter�next� StopIterationr%)rr$�it�firsts r�allEqualr,sc�� ���t� �c���B���R������ �����t�t����� �e�R�� /� /� /�/s �%� 3�3c�z�t|��t|��ksJ�d�t||��D��S)Nc��g|] \}}|�|�� Srr)rr�ts rrzsubList.<locals>.<listcomp>,s!�� /� /� /�$�!�Q�Q� /�A� /� /� /r��len�zip)�truthrs r�subListr4*s;�� �u�:�:��S��� !� !� !� !� /� /�#�c�5�/�/� /� /� /�/rFc �x�|\}}}||cxkr|ksntd|d�d|d�d|d�����|stt||��|��}||ks||krdS||kr||ks ||kr||kr ||z ||z z S||kr||ks#||kr||ksJd|�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: z3.3fz, �z Ooops... v=z , triple=(�))� ValueError�max�min)�v�triple� extrapolate�lower�default�uppers rrr/sV��#��E�7�E� �W� %� %� %� %�� %� %� %� %�� :�� 9� :� :�$� 9� :� :�-2� 9� :� :� � � � �&� ��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)�validatec���|r�t|�����t|�����ksKJt|�����t|�����z ���i}|���D]6\}}|�||d��}t |||���||<�7|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=rA�out�tagr<r;s rrrNs���N� ��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�|�|�F�F� ��V� �L�L��f�Q�i� (� (��!�!�V��E�E�E��C��� �JrTc��|r|�td���d}|���D�]\}\}}} |r8|dkr�||ks|| kr� |dkr| dkr�-|�|d��} n||vsJ�||} | |kr�Y|r�||\} } | | kr7|| kr1|| kr|| kr|| | z || z z z}��| |kr|| |z ||z z z}��n<| | kr6| | kr0| |kr||kr|| |z ||z z z}��|| kr|| | z || z z z}��| |ks| | krd}n&| |kr|| |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�?r6)� TypeErrorrErF) rG�support�otr=� axisRanges�scalar�axisr>�peakr@r;�axisMin�axisMaxs rrr�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� �Mrc���eZdZdZ ddd�d�Zd�Zed���Zegfd���Zd �Z d �Z d �Z d �Z e d �d�Ze d �d�Zd�Zd�Zed���Zed���Zd�Ze d �d�Ze d �d�ZdS)ra5Locations 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)rOc�B���ttd��D������t���krtd�����_|�|ng�_|�_|�0|r�����}nd��D��}d�|D��}|�_d��D�������j���}t�|����_ �fd��D���_ �fd ��j D���_ �� ��i�_dS) Nc3�rK�|]2}tt|�������V��3dSr )�tuple�sortedrErs rrz*VariationModel.__init__.<locals>.<genexpr>s:����?�?��5����� � �*�*�+�+�?�?�?�?�?�?rzLocations must be unique.c�@�h|]}|���D]}|���Sr�rD�r�locrQs r� <setcomp>z*VariationModel.__init__.<locals>.<setcomp>s-��L�L�L�C������L�L��4�L�L�L�Lrc��i|]}|d��S))�����r r)rrQs r� <dictcomp>z+VariationModel.__init__.<locals>.<dictcomp>s��@�@�@��d�G�@�@�@rc�J�g|] }d�|���D����!S)c�&�i|]\}}|dk� ||��S�r6r�r�kr;s rraz6VariationModel.__init__.<locals>.<listcomp>.<dictcomp>s#��?�?�?�t�q�!�a�3�h�h�a��h�h�hr�rE�rr]s rrz+VariationModel.__init__.<locals>.<listcomp>s/��U�U�U�C�?�?�s�y�y�{�{�?�?�?�U�U�Ur)� axisOrder)�keyc�D��g|]}�j�|����Sr�� locations�index�rr�selfs �rrz+VariationModel.__init__.<locals>.<listcomp>�)���C�C�C�A���,�,�Q�/�/�C�C�Crc�:��g|]}��|����Sr�rn�rrrms �rrz+VariationModel.__init__.<locals>.<listcomp>�%���J�J�J�a�y���q�1�1�J�J�Jr)r1rCr � origLocationsrir=�computeAxisRangesrO�getMasterLocationsSortKeyFuncrYrm�mapping�reverseMapping�_computeMasterSupports� _subModels)rprmrir=rO�allAxes�keyFuncs`` r�__init__zVariationModel.__init__sY���� �s�?�?�Y�?�?�?�?�?� @� @�C� �N�N� R� R�%�&A�B�B� B�&���&/�&;������&��� � �� A�!�3�3�I�>�>� � �L�L�9�L�L�L��@�@��@�@�@� �$���U�U�9�U�U�U� ��4�4� ���5� � �� � �w�7�7�7���D�C�C�C��C�C�C�� �J�J�J�J�4�>�J�J�J��� �#�#�%�%�%�����rc��d|vr||fStd�|D����}|j�|��}|�2tt ||j��|j��}||j|<|t ||��fS)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.Nc3�K�|]}|duV�� dSr r�rr;s rrz-VariationModel.getSubModel.<locals>.<genexpr>*s&����1�1�a�A�T�M�1�1�1�1�1�1r)rXr|rFrr4rvri)rprErj�subModels r� getSubModelzVariationModel.getSubModel!s��� �u� � ���;� ��1�1�5�1�1�1�1�1���?�&�&�s�+�+�� � �%�g�c�4�3E�&F�&F���W�W�H�#+�D�O�C� ����e�,�,�,�,rc���i}d�|D��}|D][}|D]V}|�|d��}|�|||f��\}}t||��t||��f||<�W�\|S)Nc�@�h|]}|���D]}|���Srr[r\s rr^z3VariationModel.computeAxisRanges.<locals>.<setcomp>4s-��D�D�D�C������D�D��4�D�D�D�Drr)rFr:r9)rmrOr}r]rQ�valuerSrTs rrwz VariationModel.computeAxisRanges1s���� �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��rc�L�i|vrtd���i}|D]|}t|��dkr�tt|����}||}||vrdh||<|||vsJd|�d|�d|�����||�|���}d�}|||��}|S)NzBase master not found.r r6zValue "z" in axisPoints["z"] --> c� ����d�����fd�}|S)Nc�&�|dkrdn |dkrdndS)Nrr`r r)r;s r�signzJVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.signNs ����U�U�r�r�a�!�e�e����:rc �����t���}�fd�����D��}�fd��D��}|��fd�t������D����|t|�� t �fd�|D����t |��t ��fd�|D����t �fd�|D����fS)Nc�6��g|]\}}|�v� |�|v�|��Srr)rrQr�� axisPointss �rrz]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>SsA������#��e��z�)�)�e�z�$�7G�.G�.G��.G�.G�.Grc���g|]}|�v�|�� Srr�rrQr]s �rrz]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>Xs���I�I�I��T�S�[�[�t�[�[�[rc���g|]}|�v�|�� Srr�rrQris �rrz]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>Zs#���R�R�R�d�D� �<Q�<Q�T�<Q�<Q�<Qrc3�N�K�|]}|�vr��|��ndV�� dS)iNrsr�s �rrz\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>_sR������� �26��1B�1B� ����-�-�-�������rc3�:�K�|]}��|��V��dSr r)rrQr]r�s ��rrz\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>ds@�������,0���S��Y��������rc3�B�K�|]}t�|��V��dSr )�absr�s �rrz\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>gs>�������+/��C��I��������r)r1rE�extendrYrDrX)r]�rank� onPointAxes� orderedAxesrir�r�s` ���rrjzIVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.keyQsd�����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>�������rr)r�rirjr�s`` @r�getKeyz<VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKeyMs>����� ;� ;� ;� � � � � � � �6�Jr)r r1r(r'�add)rmrir�r]rQr�r��rets rrxz,VariationModel.getMasterLocationsSortKeyFunc<s��� �Y� � �%�&>�?�?� ?�� �� (� (�C��3�x�x�1�}�}����S� � �?�?�D���I�E��:�%�%�$'�5� �4� ��Z��-�-�-�-�-�;@�5�5�$�$�$� � �S�.�-�-� �t� � � �� '� '� '� '� � � �B�f�Z��+�+��� rc�������fd�|D��}�fd�|D���_d��jD����fd��D���_�fd��jD���_i�_|S)Nc� ��g|] }�|�� Srr)r�idx� master_lists �rrz1VariationModel.reorderMasters.<locals>.<listcomp>ts���8�8�8��K��$�8�8�8rc�*��g|]}�j|��Sr)rv)rr�rps �rrz1VariationModel.reorderMasters.<locals>.<listcomp>us!���I�I�I�#�d�0��5�I�I�Irc�J�g|] }d�|���D����!S)c�&�i|]\}}|dk� ||��Srdrres rraz<VariationModel.reorderMasters.<locals>.<listcomp>.<dictcomp>ws#�� 6� 6� 6�d�a��Q�#�X�X�Q��X�X�Xrrgrhs rrz1VariationModel.reorderMasters.<locals>.<listcomp>vs<�� � � �;>� 6� 6�c�i�i�k�k� 6� 6� 6� � � rc�D��g|]}�j�|����Srrlros �rrz1VariationModel.reorderMasters.<locals>.<listcomp>yrqrc�:��g|]}��|����Srrsrts �rrz1VariationModel.reorderMasters.<locals>.<listcomp>zrur)rvryrmrzr|)rpr�ry�new_listrms`` @r�reorderMasterszVariationModel.reorderMastersqs������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�������rc�X�g|_|���}t|��D�]i\}}t|�����}|d|�D�]}t|�����|kr�)d}|���D]:\}\}} } ||d| ks|||dcxkr| ksnd}n�;|s�}i} d} |���D]g}||d} ||vsJ�||\}}} || }}| |kr| }| |z ||z z }n|| kr| }| |z | |z z }n�O|| kri} |} || kr|||f| |<�h| ���D] \}}|||<� ��|j�|����k|���dS)NTr Fr`)�supports�_locationsToRegions� enumeraterCrDrE�append�_computeDeltaWeights)rp�regions�i�region�locAxes� prev_region�relevantrQr>rRr@�bestAxes� bestRatio�val�locV�newLower�newUpper�ratior<s rr{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� � �� (� (� (� (� �!�!�#�#�#�#�#rc���|j}|j}g}|D]b}i}|���D]4\}}|dkrd|||df||<� ||d|df||<�5|�|���c|S)Nrr )rmrOrEr�)rprmrOr�r]r�rQr�s rr�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� "� "� "� "��rc���g|_t|j��D]Z\}}i}t|jd|���D]\}}t ||��}|r|||<�|j�|���[dSr )� deltaWeightsr�rmr�rr�)rpr�r]� deltaWeight�jrMrPs rr�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��ks+Jt|��t|j��f���|j}g}t|j��D]k\}}|||}|���D]%\}} | dkr |||z}�|||| zz}�&|�||�����l|S)Nr )r1r�rzr�rEr�) rp� masterValuesr�ryrIr��weights�deltar��weights r� getDeltaszVariationModel.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�|�|� $� $� $� $�� rc�n�|�|��\}}|�||���|jfS)Nr�)r�r�r�)rprEr��models r�getDeltasAndSupportsz#VariationModel.getDeltasAndSupports�s6���'�'��.�.� ��u����u�E��2�2�E�N�B�Brc�.�����fd��jD��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=rO)rr=rO)rrMr]rps ��rrz-VariationModel.getScalars.<locals>.<listcomp>�sH��� � � �� ��W�$�*:�t�� � � � � � r)r�)rpr]s``r� getScalarszVariationModel.getScalars�s8����  � � � � � �=�  � � � rc�T�����|���ttt�j������D]8\}}|���D]\}}�|xx�||zzcc<��9��fd�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|��Sr)ry)rr�rIrps ��rrz3VariationModel.getMasterScalars.<locals>.<listcomp>�s$���=�=�=��s�4�<��?�#�=�=�=r)r��reversed�listr�r�rE�ranger1)rp�targetLocationr�r�r�r�rIs` @r�getMasterScalarszVariationModel.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�_�_�=�=�=��� rc��d}t|��t|��ksJ�t||��D]\}}|s�||z}|�|}�||z }�|S)aVInterpolate 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(). Nr0)�values�scalarsr;r�rP� contributions r�interpolateFromValuesAndScalarsz.VariationModel.interpolateFromValuesAndScalarsst�� ���6�{�{�c�'�l�l�*�*�*�*� ���1�1� "� "�M�E�6�� �� �6�>�L��y� ����\�!����rc�8�t�||��S)z>Interpolate from deltas and scalars fetched from getScalars().)rr�)�deltasr�s r�interpolateFromDeltasAndScalarsz.VariationModel.interpolateFromDeltasAndScalarss���=�=�f�g�N�N�Nrc�X�|�|��}|�||��S)z)Interpolate from deltas, at location loc.)r�r�)rpr]r�r�s r�interpolateFromDeltasz$VariationModel.interpolateFromDeltass)���/�/�#�&�&���3�3�F�G�D�D�Drc�X�|�|��}|�||��S)z0Interpolate from master-values, at location loc.)r�r�)rpr]r�r�r�s r�interpolateFromMastersz%VariationModel.interpolateFromMasters#s+���'�'��,�,���3�3�L�'�J�J�Jrc�\�|�||���}|�||��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�)rpr�r�r�r�s r� interpolateFromMastersAndScalarsz/VariationModel.interpolateFromMastersAndScalars(s/����� �E��:�:���3�3�F�G�D�D�Dr)NF)�__name__� __module__� __qualname__�__doc__rr�� staticmethodrwrxr�r{r�r�rr�r�r�r�r�r�r�r�r�rrrrr�s�������/�/�d6;��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� BI�K�K�K�K�K� PW�E�E�E�E�E�E�Errc���|���}|s�S�|vr|�St|��}�|kr�||z|z St|��}�|kr�||z|z St�fd�|D����}t�fd�|D����}||}||}|||z �|z z||z z zS)Nc3�(�K�|] }|�k�|V�� dSr rres �rrz%piecewiseLinearMap.<locals>.<genexpr>=�'����� %� %�!�q�1�u�u�A�u�u�u�u� %� %rc3�(�K�|] }|�k�|V�� dSr rres �rrz%piecewiseLinearMap.<locals>.<genexpr>>r�r)rDr:r9)r;ryrDrf�a�b�va�vbs` rrr0s���� �<�<�>�>�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�-� -�-rc��� �ddlm}ddl}|�dtj���}|�dddd � ��|�d � ��}|�d ddt���|�ddddd���|� |��}||j ���ddl m }|j r�ddl m}|��}|�|j ��d�|jD��}t#d��||��|���t#d��d�|jD��}||��nJd�t't)d��t)d ��d!z��D��� � fd"�|jD��}t-|��} t#d#��|| j��t#d$��|| j��dS)%z*Normalize locations on a given designspacer)� configLoggerNzfonttools 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)�DesignSpaceDocumentc��g|] }|j�� Sr�rG�r�ss rrzmain.<locals>.<listcomp>h���0�0�0�q�� �0�0�0rzOriginal locations:zNormalized locations:c��g|] }|j�� Srrrs rrzmain.<locals>.<listcomp>mrrc�,�g|]}t|����Sr)�chr)r�cs rrzmain.<locals>.<listcomp>ps��>�>�>�1��A���>�>�>r�A�Zr c ���g|]<}tt�d�|�d��D��������=S)c3�4K�|]}t|��V��dSr )�floatr�s rrz"main.<locals>.<listcomp>.<genexpr>rs(����;�;��E�!�H�H�;�;�;�;�;�;r�,)�dictr2�split)rrrHs �rrzmain.<locals>.<listcomp>qsQ��� � � �BC�D��T�;�;�a�g�g�c�l�l�;�;�;�<�<� =� =� � � rzSorted locations:z Supports:)� fontToolsr��argparse�ArgumentParser�mainr�� add_argument�add_mutually_exclusive_group�str� parse_args�loglevelr�� designspace�fontTools.designspaceLibr�read�sources�print� normalizer��ordrmrr�) �argsr�r�parser�groupr�r�doc�locsr�rHs @rrrDsf���&�&�&�&�&�&��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)TFN)r��__all__�fontTools.misc.roundToolsr�errorsr rrr%r,r4rrr�objectrrrr��doctest�sysr1�argv�exit�testmod�failedrrr�<module>r2s���+�+� � � ��.�-�-�-�-�-�'�'�'�'�'�'�-�-�-�'�'�'�7�7�7�7�0�0�0�0�0�0�0� 1�1�1�1�>/�U�/�/�/�/�/�dN�N�N�N�b\E�\E�\E�\E�\E�V�\E�\E�\E�~ .�.�.�(5�5�5�5�p �z����������� �s�3�8�}�}�q������������� �C�H�_�W�_� � � %�&�&�&�&�&� �r
Memory