§
    ¢”jˆ:  ã                   óx  — 	 d dl Z n# eef$ r	 d dlm Z  Y nw xY we j        Zd dlmZmZm	Z	 d dl
mZmZ eeef         Zeeef         Zee         Zee         Ze	edf         Zee         Zee         ZdZe j         e j        e j        e j        e j        e j        e j        e j        e j        e j        e j        ¬¦	  «	        deded	ed
edef
d„¦   «         ¦   «         Zdededefd„Zdedededefd„Ze j        e j         e j        e j        e j        e j        e j        e j        e j        ¬¦  «         e j        e¦  «        dededededef
d„¦   «         ¦   «         ¦   «         ¦   «         Z e j        e j        e j        e j        e j        e j        e j        e j        e¬¦  «        	 d%dedededefd„¦   «         Z  e j        e j        e j        e j        e j        e j        ee j        ¬¦  «         e¦   «         d dfdedededefd„¦   «         Z!de"defd„Z#deded efd!„Z$	 d&dedededefd#„Z%	 d&dededededef
d$„Z&dS )'é    N)Úcython)ÚSequenceÚTupleÚUnion)ÚIntegralÚRealé   )	ÚjÚnÚx1Úx2Úd1Úd2ÚscaleÚxÚdÚcoordsÚrc1Úrd1Úrc2Úrd2c                 óÌ  — ddg}dD ]Õ}g x||<   }||         ||         ||         ||         f\  }}	}
}||	k    rIt          | ¦  «        }|
|k    r|                     |
g|z  ¦  «         n|                     dg|z  ¦  «         Œ{||	k    r|	|}	}||
}}
||
z
  |	|z
  z  }| D ]>}||         }||k    r|
}n||	k    r|}n||z
  |z  }|
|z   }|                     |¦  «         Œ?ŒÖt          |Ž S )z¨Given two reference coordinates `rc1` & `rc2` and their respective
    delta vectors `rd1` & `rd2`, returns interpolated deltas for the set of
    coordinates `coords`.N©r   é   r   )ÚlenÚextendÚappendÚzip)r   r   r   r   r   Ú
out_arraysr
   Úoutr   r   r   r   r   r   Úpairr   r   Únudges                     úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/varLib/iup.pyÚiup_segmentr$      sF  € ð* ˜�€JØð $ð $ˆØ Ð ˆ
�1‰˜Ø˜Qœ  Q¤¨¨Q¬°°Q´Ð7‰ˆˆB��Bà�Š8ˆ8Ý�F‘”ˆAØ�RŠxˆxØ—
’
˜B˜4 !™8Ñ$Ô$Ð$Ð$à—
’
˜A˜3 ™7Ñ#Ô#Ð#Øà�Š7ˆ7Ø˜�ˆBØ˜�ˆBð �b‘˜R "™WÑ%ˆØð 	ð 	ˆDØ�Q”ˆAà�BŠwˆwØ��Ø�b’�Ø��ð ˜R™ 5Ñ(�Ø˜‘J�à�JŠJ�q‰MŒMˆMˆMð%	õ( �
ÐÐó    ÚdeltasÚreturnc                 ó6  — t          | ¦  «        t          |¦  «        k    sJ ‚d| vr| S t          | ¦  «        }d„ t          | ¦  «        D ¦   «         }|sdg|z  S g }t          |¦  «        }t          |¦  «        }|dk    rWd|||d         f\  }}}	}
|                     t          |||…         ||	         | |	         ||
         | |
         ¦  «        ¦  «         |                     | |         ¦  «         |D ]|}||z
  dk    rT|dz   |||f\  }}}	}
|                     t          |||…         ||	         | |	         ||
         | |
         ¦  «        ¦  «         |                     | |         ¦  «         |}Œ}||dz
  k    rZ|dz   |||d         f\  }}}	}
|                     t          |||…         ||	         | |	         ||
         | |
         ¦  «        ¦  «         t          | ¦  «        t          |¦  «        k    s&J t          | ¦  «        t          |¦  «        f¦   «         ‚|S )z‘For the contour given in `coords`, interpolate any missing
    delta values in delta vector `deltas`.

    Returns fully filled-out delta vector.Nc                 ó   — g | ]	\  }}|®|‘Œ
S ©N© )Ú.0ÚiÚvs      r#   ú
<listcomp>ziup_contour.<locals>.<listcomp>g   s   € Ð@Ð@Ð@‘T�Q˜°!°-ˆq°-°-°-r%   )r   r   r   éÿÿÿÿr   )r   Ú	enumerateÚiterÚnextr   r$   r   )r&   r   r   Úindicesr    ÚitÚstartÚi1Úi2Úri1Úri2Úends               r#   Úiup_contourr<   [   sT  € õ ˆv‰;Œ;�#˜f™+œ+Ò%Ð%Ð%Ð%Ø�6ÐÐØˆåˆF‰Œ€Aà@Ð@�Y vÑ.Ô.Ð@Ñ@Ô@€GØð àˆx˜!‰|Ðà
€CÝ	ˆg‰Œ€BÝ�‰HŒH€EØ�‚z€zà˜e U¨G°B¬KÐ7ÑˆˆB��SØ�
Š
ÝØ�r˜"�u”˜v cœ{¨F°3¬K¸À¼ÀfÈSÄkñô ñ	
ô 	
ð 	
ð
 ‡J‚Jˆv�eŒ}ÑÔÐØð 	ð 	ˆØ�‰;˜Š?ˆ?Ø$ q™y¨#¨u°cÐ9ÑˆB��C˜Ø�JŠJÝØ˜2˜b˜5”M 6¨#¤;°°s´¸VÀC¼[È&ÐQTÌ+ñô ñô ð ð
 	�
Š
�6˜#”;ÑÔÐØˆˆØ��A‘‚~€~à  1™9 a¨°¸´
Ð:ÑˆˆB��SØ�
Š
ÝØ�r˜"�u”˜v cœ{¨F°3¬K¸À¼ÀfÈSÄkñô ñ	
ô 	
ð 	
õ ˆv‰;Œ;�#˜c™(œ(Ò"Ð"Ð"¥S¨¡[¤[µ#°c±(´(Ð$;Ñ"Ô"Ð"Ø€Jr%   Úendsc                 óH  — t          |¦  «        |k    r#t          |¦  «        |r|d         dz   nddz   k    sJ ‚t          |¦  «        }||dz
  |dz
  |dz
  |dz
  gz   }g }d}|D ]>}|dz  }t          | ||…         |||…         ¦  «        }|                     |¦  «         |}Œ?|S )zØFor the outline given in `coords`, with contour endpoints given
    in sorted increasing order in `ends`, interpolate any missing
    delta values in delta vector `deltas`.

    Returns fully filled-out delta vector.r0   r   r   é   é   é   )Úsortedr   r<   r   )r&   r   r=   r   r    r6   r;   Úcontours           r#   Ú	iup_deltarD   �   sÑ   € õ �$‰<Œ<˜4ÒÐ¥C¨¡K¤KÀDÐ4O°D¸´H¸q±L°LÈaÐSTÑ3TÒ$TÐ$TÐ$TÐ$TÝˆF‰Œ€AØ�1�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EØð ð ˆØˆq‰ˆÝ˜f U¨3 YÔ/°¸¸c¸	Ô1BÑCÔCˆØ�
Š
�7ÑÔÐØˆˆà€Jr%   )r-   r
   r   ÚyÚpÚqr-   r
   Ú	tolerancec                 óò   ‡— ||z
  dk    sJ ‚t          ||dz   |…         ||         | |         ||         | |         ¦  «        }| |dz   |…         } t          ˆfd„t          | |¦  «        D ¦   «         ¦  «        S )z°Return true if the deltas for points at `i` and `j` (`i < j`) can be
    successfully used to interpolate deltas for points in between them within
    provided error tolerance.rA   r   c              3   óx   •K  — | ]4\  \  }}\  }}t          t          ||z
  ||z
  ¦  «        ¦  «        ‰k    V — Œ5d S r*   ©ÚabsÚcomplex)r,   r   rE   rF   rG   rH   s        €r#   ú	<genexpr>z%can_iup_in_between.<locals>.<genexpr>Ä   sb   øè è € ð ð á‰FˆQ�‘F�Q˜õ 	�G�A˜‘E˜1˜q™5Ñ!Ô!Ñ"Ô" iÒ/ðð ð ð ð ð r%   )r$   Úallr   )r&   r   r-   r
   rH   Úinterps       ` r#   Úcan_iup_in_betweenrQ   ©   s�   ø€ ð. ˆq‰5�AŠ:ˆ:ˆ:ˆ:Ý˜  A¡¨ 	Ô*¨F°1¬I°v¸a´yÀ&ÈÄ)ÈVÐTUÌYÑWÔW€FØ�A˜‘E˜A�IÔ€Fåð ð ð ð å! &¨&Ñ1Ô1ðñ ô ñ ô ð r%   )ÚcjÚdjÚlcjÚldjÚncjÚndjÚforceÚforcedc                 ó  — t          | ¦  «        t          |¦  «        k    sJ ‚t          | ¦  «        }t          ¦   «         }t          t          | ¦  «        dz
  dd¦  «        D �]©}| |dz
           ||dz
           }}| |         ||         }	}| ||z
  dz            |||z
  dz            }}
dD �]`}|	|         }||         }||         }||         }||         }|
|         }||k    r	||}}||}}n||}}||}}d}||k    r,t          ||z
  ¦  «        |k    rt          |¦  «        |k    rd}nÉ||cxk    r|k    r7n n4t	          ||¦  «        |z
  |cxk    rt          ||¦  «        |z   k    sn d}n…||k    r||k     r=t          |¦  «        |k    r)t          ||z
  ¦  «        |k    r||z
  |k     ||k     k    rd}n<t          |¦  «        |k    r)t          ||z
  ¦  «        |k    r|||z   k     ||k     k    rd}|r|                     |¦  «          n�Œb�Œ«|S )aª  The forced set is a conservative set of points on the contour that must be encoded
    explicitly (ie. cannot be interpolated).  Calculating this set allows for significantly
    speeding up the dynamic-programming, as well as resolve circularity in DP.

    The set is precise; that is, if an index is in the returned set, then there is no way
    that IUP can generate delta for that point, given `coords` and `deltas`.
    r   r0   r   FT)r   ÚsetÚrangerL   ÚminÚmaxÚadd)r&   r   rH   r   rY   r-   ÚldÚlcr   ÚcÚndÚncr
   rR   rS   rT   rU   rV   rW   Úc1Úc2r   r   rX   s                           r#   Ú_iup_contour_bound_forced_setrg   Ê   sv  € õ( ˆv‰;Œ;�#˜f™+œ+Ò%Ð%Ð%Ð%åˆF‰Œ€AÝ‰UŒU€Få•3�v‘;”; ‘? B¨Ñ+Ô+ð =ñ =ˆØ˜˜A™”  q¨1¡u¤ˆBˆØ�aŒy˜& œ)ˆ1ˆØ˜˜A™ ™	Ô" F¨1¨q©5°1©9Ô$5ˆBˆàð 8	ñ 8	ˆAØ�1”ˆBØ�1”ˆBØ�Q”%ˆCØ�Q”%ˆCØ�Q”%ˆCØ�Q”%ˆCà�cŠzˆzØ˜c�B�Ø˜c�B��à˜c�B�Ø˜c�B�àˆEð �RŠxˆxÝ�r˜B‘w‘<”< )Ò+Ð+µ°B±´¸)Ò0CÐ0CØ �Eøð �r��’�˜R’����Ý˜B ™œ iÑ/°2ÐPÐPÒPÐP½¸RÀ¹¼ÀyÑ9PÒPÐPÐPÐPØ �Eøð
 ˜’8�8Ø˜B’w�wå ™GœG iÒ/Ð/Ý # B¨¡G¡¤¨yÒ 8Ð 8Ø"$ y¡.°2Ò"5¸2Àº7Ò!CÐ!Cà$(˜Eøõ   ™GœG iÒ/Ð/Ý # B¨¡G¡¤¨yÒ 8Ð 8Ø"$ r¨I¡~Ò"5¸2Àº7Ò!CÐ!Cà$(˜Eàð Ø—
’
˜1‘”�Ø�ñùð €Mr%   )r-   r
   Ú	best_costÚbest_jÚcostrY   rH   Úlookbackc           	      ó’  — t          | ¦  «        }|€|}t          |t          ¦  «        }ddi}ddi}t          d|¦  «        D ]ƒ}||dz
           dz   }	|	||<   |dz
  ||<   |dz
  |v rŒ%t          |dz
  t	          ||z
  d¦  «        d¦  «        D ]8}
||
         dz   }||	k     rt          | ||
||¦  «        r|x||<   }	|
||<   |
|v r nŒ9Œ„||fS )aÖ  Straightforward Dynamic-Programming.  For each index i, find least-costly encoding of
    points 0 to i where i is explicitly encoded.  We find this by considering all previous
    explicit points j and check whether interpolation can fill points between j and i.

    Note that solution always encodes last point explicitly.  Higher-level is responsible
    for removing that restriction.

    As major speedup, we stop looking further whenever we see a "forced" point.Nr0   r   r   rA   éþÿÿÿ)r   r]   ÚMAX_LOOKBACKr\   r^   rQ   )r&   r   rY   rH   rk   r   ÚcostsÚchainr-   rh   r
   rj   s               r#   Ú_iup_contour_optimize_dprq   %  s  € õ2 	ˆF‰Œ€AØÐØˆÝ�8�\Ñ*Ô*€HØ�ˆG€EØ�ˆJ€EÝ�1�a‰[Œ[ð ð ˆØ˜!˜a™%”L 1Ñ$ˆ	àˆˆa‰Ø�q‘5ˆˆa‰àˆq‰5�Fˆ?ˆ?Øå�q˜1‘u�c ! h¡,°Ñ3Ô3°RÑ8Ô8ð 	ð 	ˆAØ˜”8˜a‘<ˆDà�iÒÐÕ$6°v¸vÀqÈ!ÈYÑ$WÔ$WÐØ'+Ð+��a‘˜9Ø��a‘à�Fˆ{ˆ{Ø�ð øð �%ˆ<Ðr%   ÚlÚkc                 óh   — t          | ¦  «        }||z  }|s| S | ||z
  d…         | d||z
  …         z   S )z{Rotate list by k items forward.  Ie. item at position 0 will be
    at position k in returned list.  Negative k is allowed.N)r   )rr   rs   r   s      r#   Ú	_rot_listru   Z  sH   € õ 	ˆA‰Œ€AØˆ�F€AØð ØˆØˆQ�‰UˆWˆWŒ:˜˜'˜A ™E˜'œ
Ñ"Ð"r%   Úsr   c                 ó6   ‡‡— ‰‰z  Š‰s| S ˆˆfd„| D ¦   «         S )Nc                 ó    •— h | ]
}|‰z   ‰z  ’ŒS r+   r+   )r,   r.   rs   r   s     €€r#   ú	<setcomp>z_rot_set.<locals>.<setcomp>h  s!   ø€ Ð#Ð#Ð#˜AˆQ�‰U�a‰KÐ#Ð#Ð#r%   r+   )rv   rs   r   s    ``r#   Ú_rot_setrz   d  s7   øø€ Øˆ�F€AØð ØˆØ#Ð#Ð#Ð#Ð# Ð#Ñ#Ô#Ð#r%   ç        c                 ó¢  ‡ ‡‡‡‡— t          ‰ ¦  «        }t          ˆfd„‰ D ¦   «         ¦  «        rdg|z  S |dk    r‰ S ‰ d         Št          ˆfd„‰ D ¦   «         ¦  «        r‰gdg|dz
  z  z   S t          ‰ |‰¦  «        }|rì|dz
  t          |¦  «        z
  }|dk    sJ ‚t	          ‰ |¦  «        Š t	          ||¦  «        }t          |||¦  «        }t          ‰ ||‰¦  «        \  }}t          ¦   «         Š|dz
  }|�‰                     |¦  «         ||         }|­‰ 	                    d¦  «         |‰k    sJ |‰f¦   «         ‚ˆ ˆfd„t          |¦  «        D ¦   «         Š t	          ‰ | ¦  «        Š nât          ‰ ‰ z   ||z   |‰|¦  «        \  }}d|dz   cŠ}	t          |dz
  t          |¦  «        dz
  ¦  «        D ]l}
t          ¦   «         Š|
}||
|z
  k    r)‰                     ||z  ¦  «         ||         }||
|z
  k    °)||
|z
  k    r||
         ||
|z
           z
  }||	k    r‰|cŠ}	Œm|‰k    sJ |‰f¦   «         ‚ˆˆ fd„t          |¦  «        D ¦   «         Š ‰ S )	zÎFor contour with coordinates `coords`, optimize a set of delta
    values `deltas` within error `tolerance`.

    Returns delta vector that has most number of None items instead of
    the input delta.
    c              3   óL   •K  — | ]}t          t          |Ž ¦  «        ‰k    V — Œd S r*   rK   )r,   rF   rH   s     €r#   rN   z'iup_contour_optimize.<locals>.<genexpr>z  s4   øè è € Ð
9Ð
9¨Q�3�w˜ˆ{ÑÔ˜yÒ(Ð
9Ð
9Ð
9Ð
9Ð
9Ð
9r%   Nr   r   c              3   ó$   •K  — | ]
}‰|k    V — Œd S r*   r+   )r,   r   Úd0s     €r#   rN   z'iup_contour_optimize.<locals>.<genexpr>ƒ  s'   øè è € Ð
#Ð
#�qˆ2�Š7Ð
#Ð
#Ð
#Ð
#Ð
#Ð
#r%   r0   c                 ó,   •— g | ]}|‰v r‰|         nd ‘ŒS r*   r+   )r,   r-   r&   Úsolutions     €€r#   r/   z(iup_contour_optimize.<locals>.<listcomp>­  ó)   ø€ ÐIÐIÐI¸1˜q H˜}˜}�&˜”)�)°$ÐIÐIÐIr%   c                 ó,   •— g | ]}|‰v r‰|         nd ‘ŒS r*   r+   )r,   r-   Úbest_solr&   s     €€r#   r/   z(iup_contour_optimize.<locals>.<listcomp>Ë  r‚   r%   )r   rO   rg   r^   ru   rz   rq   r[   r_   Úremover\   )r&   r   rH   r   rY   rs   rp   ro   r-   rh   r6   rj   r„   r   r�   s   ` `         @@@r#   Úiup_contour_optimizer†   k  sø  øøøøø€ õ 	ˆF‰Œ€Aõ
 Ð
9Ð
9Ð
9Ð
9°&Ð
9Ñ
9Ô
9Ñ9Ô9ð Øˆv˜‰zÐð 	ˆA‚v€vØˆð 
�Œ€BÝ
Ð
#Ð
#Ð
#Ð
#˜FÐ
#Ñ
#Ô
#Ñ#Ô#ð 'Øˆt�t�f  A¡Ñ&Ñ&Ð&õ +¨6°6¸9ÑEÔE€Fð ð :Jð �‰U•c˜&‘k”kÑ!ˆØ�AŠvˆvˆvˆvå˜6 1Ñ%Ô%ˆÝ˜6 1Ñ%Ô%ˆÝ˜& ! QÑ'Ô'ˆõ 0°¸ÀÈ	ÑRÔR‰ˆˆuõ ‘5”5ˆØ�‰EˆØˆmØ�LŠL˜‰OŒOˆOØ�a”ˆAð ˆmð 	�Š˜ÑÔÐð ˜Ò!Ð!Ð! F¨HÐ#5Ñ!Ô!Ð!àIÐIÐIÐIÐIÅÀaÁÄÐIÑIÔIˆå˜6 A 2Ñ&Ô&ˆˆõ
 0Ø�V‰O˜V f™_¨f°iÀñ
ô 
‰ˆˆuð # A¨¡EÐˆ�)å˜1˜q™5¥# e¡*¤*¨q¡.Ñ1Ô1ð 
	9ð 
	9ˆEå‘u”uˆHØˆAØ�e˜a‘i’-�-Ø—’˜Q ™UÑ#Ô#Ð#Ø˜!”H�ð �e˜a‘i’-�-ð �E˜A‘IŠ~ˆ~Ø˜U”| e¨E°A©IÔ&6Ñ6�Ø˜9Ò$Ð$Ø*2°DÐ'�H˜iøð ˜Ò!Ð!Ð! F¨HÐ#5Ñ!Ô!Ð!àIÐIÐIÐIÐIÅÀaÁÄÐIÑIÔIˆà€Mr%   c                 óˆ  — t          |¦  «        |k    r#t          |¦  «        |r|d         dz   nddz   k    sJ ‚t          |¦  «        }||dz
  |dz
  |dz
  |dz
  gz   }g }d}|D ]^}t          | ||dz   …         |||dz   …         |¦  «        }t          |¦  «        ||z
  dz   k    sJ ‚|                     |¦  «         |dz   }Œ_|S )a  For the outline given in `coords`, with contour endpoints given
    in sorted increasing order in `ends`, optimize a set of delta
    values `deltas` within error `tolerance`.

    Returns delta vector that has most number of None items instead of
    the input delta.
    r0   r   r   r?   r@   rA   )rB   r   r†   r   )	r&   r   r=   rH   r   r    r6   r;   rC   s	            r#   Úiup_delta_optimizerˆ   Ð  sü   € õ �$‰<Œ<˜4ÒÐ¥C¨¡K¤KÀDÐ4O°D¸´H¸q±L°LÈaÐSTÑ3TÒ$TÐ$TÐ$TÐ$TÝˆF‰Œ€AØ�1�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EØð ð ˆÝ&Ø�5˜3 ™7�?Ô# V¨E°C¸!±G¨OÔ%<¸iñ
ô 
ˆõ �7‰|Œ|˜s U™{¨Q™Ò.Ð.Ð.Ð.Ø�
Š
�7ÑÔÐØ�a‘ˆˆà€Jr%   )r   )r{   )'r   ÚAttributeErrorÚImportErrorÚfontTools.miscÚcompiledÚCOMPILEDÚtypingr   r   r   Únumbersr   r   Ú_PointÚ_DeltaÚ_PointSegmentÚ_DeltaSegmentÚ_DeltaOrNoneÚ_DeltaOrNoneSegmentÚ
_Endpointsrn   ÚcfuncÚlocalsÚintÚdoubler$   r<   rD   ÚinlineÚreturnsrQ   r[   rg   rq   Úlistru   rz   r†   rˆ   r+   r%   r#   ú<module>rž      s·  ðð&Ø€M€M€M€MøØ˜Ð$ð &ð &ð &à%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&øøøð Œ?€ðð ð ð ð ð ð ð ð ð ð
 #Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð 
ˆt�TˆzÔ	€Ø	ˆt�TˆzÔ	€Ø˜Ô €Ø˜Ô €Ø�V˜T�\Ô"€Ø˜|Ô,Ð Ø�hÔ€
ð €ð „Ø€„Ø„jØ„jØ„}Ø„}Ø„}Ø„}Ø
Œ-Ø„mØ„mð
ñ 
ô 
ð0Øð0Ø &ð0Ø-3ð0Ø:@ð0ØGMð0ð 0ð 0ñ
ô 
ñ „ð0ðf1Ð+ð 1°]ð 1À}ð 1ð 1ð 1ð 1ðhØðØ)6ðØ>Hðàðð ð ð ð4 „Ø„Ø€„Ø„jØ„jà„mØ„mØ„mØ„mðñ ô ð €„�ÑÔðØðàðð ðð ð	ð
 ðð ð ñ Ôñô ñ „ñ „ðð* €„Ø„}Ø„}ØŒØŒØŒØŒØ
Œ*Øð	ñ 	ô 	ð EFðNð NØðNØ#0ðNØ=AðNàðNð Nð Nñ	ô 	ðNðb €„Ø„jØ„jØŒmØŒ:Ø	ŒØØŒmðñ ô ð ˆ3‰5Œ5ØØð)ð )Øð)àð)ð ð	)ð
 ð)ð )ð )ñô ð)ðX#�ð #˜#ð #ð #ð #ð #ð$�ð $˜ð $ ð $ð $ð $ð $ð EHðbð bØðbØ#0ðbØ=Aðbàðbð bð bð bðR ð	ð Øðàðð ðð ð	ð
 ðð ð ð ð ð s   ‚ ‡–