ó
    oñ:iˆ:  ã                   óp  •  S SK r \ R                  rS SKJrJrJ	r	  S SK
JrJr  \\\4   r\\\4   r\\   r\\   r\	\S4   r\\   r\\   rSr\ R*                  \ R,                  " \ R.                  \ R.                  \ R0                  \ R0                  \ R0                  \ R0                  \ R0                  \ R0                  \ R0                  S9	S\S\S	\S
\S\4
S j5       5       rS\S\S\4S jrS\S\S\S\4S jr\ R*                  \ R8                  \ R,                  " \ R.                  \ R.                  \ R0                  \ R0                  \ R0                  \ R0                  S9\ R:                  " \5      S\S\S\S\S\4
S j5       5       5       5       r\ R,                  " \ R0                  \ R0                  \ R0                  \ R0                  \ R0                  \ R0                  \ R.                  \S9 S$S\S\S\S\4S jj5       r \ R,                  " \ R.                  \ R.                  \ R0                  \ R.                  \ R0                  \\ R0                  S9\" 5       S S4S\S\S\S\4S jj5       r!S\"S\4S jr#S\S\S \4S! jr$ S%S\S\S\S\4S" jjr% S%S\S\S\S\S\4
S# jjr&g! \\4 a
    S SKJ r    GN®f = f)&é    N)Úcython)ÚSequenceÚTupleÚUnion)ÚIntegralÚRealé   )	ÚjÚnÚx1Úx2Úd1Úd2ÚscaleÚxÚdÚcoordsÚrc1Úrd1Úrc2Úrd2c                 óv  • SS/nS H¨  n/ =XV'   nX   X6   X&   XF   4u  p‰p«X‰:X  a=  [        U 5      nX«:X  a  UR                  U
/U-  5        OUR                  S/U-  5        M\  X‰:”  a  X˜p˜XºpºXº-
  X˜-
  -  nU  H4  nXæ   nXø::  a  U
nOXù:¼  a  UnOXø-
  U-  nU
U-   nUR                  U5        M6     Mª     [        U6 $ )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                     ÚW/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/varLib/iup.pyÚiup_segmentr$      së   € ð* ˜�€JÛˆØ Ð ˆ
‰˜Ø™ ¡¨©°±Ð7‰ˆ�à‹8Ü�F“ˆAØ‹xØ—
‘
˜B˜4 !™8Õ$à—
‘
˜A˜3 ™7Ô#Ùà‹7Ø�Ø�ð ‘˜R™WÑ%ˆÛˆDØ‘ˆAà‹wØ‘Ø“Ø‘ð ™ 5Ñ(�Ø˜‘J�à�J‰J�qŽMó% ñ% ôL �
ÐÐó    ÚdeltasÚreturnc                 ó*  • [        U 5      [        U5      :X  d   eSU ;  a  U $ [        U 5      n[        U 5       VVs/ s H  u  p4Uc  M
  UPM     nnnU(       d  S/U-  $ / n[        U5      n[        U5      nUS:w  a3  SXˆUS   4u  pšp¼UR	                  [        XU
 X   X   X   X   5      5        UR                  X   5        U HS  nXØ-
  S:”  a3  US-   XØU4u  pšp¼UR	                  [        XU
 X   X   X   X   5      5        UR                  X   5        UnMU     X‚S-
  :w  a6  US-   X(US   4u  pšp¼UR	                  [        XU
 X   X   X   X   5      5        [        U 5      [        U5      :X  d   [        U 5      [        U5      45       eU$ s  snnf )z‰For the contour given in `coords`, interpolate any missing
delta values in delta vector `deltas`.

Returns fully filled-out delta vector.N)r   r   r   éÿÿÿÿr   )r   Ú	enumerateÚiterÚnextr   r$   r   )r&   r   r   ÚiÚvÚindicesr    ÚitÚstartÚi1Úi2Úri1Úri2Úends                 r#   Úiup_contourr7   [   s¹  € ô ˆv‹;œ#˜f›+Ó%Ð%Ð%Ø�6ÓØˆäˆF‹€Aä& vÔ.Ô@Ò.‘T�Q°!�qÑ.€GÑ@Þàˆx˜!‰|Ðà
€CÜ	ˆg‹€BÜ�‹H€EØ�ƒzà˜e¨G°B©KÐ7Ñˆ�Ø�
‰
ÜØ˜"�˜v™{¨F©K¸¹ÀfÁkóô	
ð
 ‡J�Jˆv‰}ÔÛˆØ‰;˜‹?Ø$ q™y¨#°cÐ9ÑˆB�CØ�J‰JÜØ˜b�M 6¡;°±¸V¹[È&É+óôð
 	�
‰
�6‘;ÔØŠñ ð �A‘ƒ~à  1™9 a°¸±
Ð:Ñˆ�Ø�
‰
ÜØ˜"�˜v™{¨F©K¸¹ÀfÁkóô	
ô ˆv‹;œ#˜c›(Ó"Ð;¤S¨£[´#°c³(Ð$;Ó;Ð"Ø€JùóK As   ¼	FÁ	FÚendsc                 ó  • [        U5      U:X  a!  [        U5      U(       a  US   S-   OSS-   :X  d   e[        U5      nX#S-
  US-
  US-
  US-
  /-   n/ nSnU H+  nUS-  n[        XU XU 5      nUR                  U5        UnM-     U$ )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.r)   r   r   é   é   é   )Úsortedr   r7   r   )r&   r   r8   r   r    r1   r6   Úcontours           r#   Ú	iup_deltar?   �   s¨   € ô �$‹<˜4Ó¤C¨£KÆD°D¸±H¸q²LÈaÐSTÑ3TÓ$TÐTÐTÜˆF‹€AØ�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EÛˆØˆq‰ˆÜ˜f¨3Ð/°¸cÐ1BÓCˆØ�
‰
�7ÔØŠñ	 ð €Jr%   )r-   r
   r   ÚyÚpÚqr-   r
   Ú	tolerancec                 óš   ^• X2-
  S:¼  d   e[        XS-   U X   X   X   X   5      nXS-   U n [        U4S j[        X5       5       5      $ )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.r<   r   c              3   ój   >#   • U  H(  u  u  pu  p4[        [        X-
  X$-
  5      5      T:*  v •  M*     g 7f©N©ÚabsÚcomplex)Ú.0r   r@   rA   rB   rC   s        €r#   Ú	<genexpr>Ú%can_iup_in_between.<locals>.<genexpr>Ä   s5   øé € ð â1‰N‰FˆQ‘F�Qô 	ŒG�A‘E˜1™5Ó!Ó" iÖ/Ú1ùs   ƒ03)r$   Úallr   )r&   r   r-   r
   rC   Úinterps       ` r#   Úcan_iup_in_betweenrO   ©   sc   ø€ ð. ‰5�A‹:Ðˆ:Ü˜ A¡¨Ð*¨F©I°v±yÀ&Á)ÈVÉYÓW€FØ˜‘E˜AÐ€Fäô ä! &Ô1óó ð r%   )ÚcjÚdjÚlcjÚldjÚncjÚndjÚforceÚforcedc                 óP  • [        U 5      [        U5      :X  d   e[        U 5      n[        5       n[        [        U 5      S-
  SS5       GHX  nXS-
     XS-
     pvX   X   p˜XU-
  S-      XU-
  S-      pºS GH&  nXœ   nXŒ   nX|   nXl   nX¼   nX¬   nUU::  a	  UUnnUUnnOUUnnUUnnSnUU:X  a$  [        UU-
  5      U:”  a  [        U5      U:”  a  SnO«UUs=::  a  U::  a/  O  O,[	        UU5      U-
  Us=::  a  [        UU5      U-   ::  d  O  SnOoUU:w  ai  UU:  a2  [        U5      U:”  a"  [        UU-
  5      U:”  a  Xâ-
  U:  UU:  :w  a  SnO1[        U5      U:”  a"  [        UU-
  5      U:”  a  UXâ-   :  UU:  :w  a  SnU(       d  GM  UR                  U5          GMV     GM[     U$ )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   r)   r   FT)r   ÚsetÚrangerH   ÚminÚmaxÚadd)r&   r   rC   r   rW   r-   ÚldÚlcr   ÚcÚndÚncr
   rP   rQ   rR   rS   rT   rU   Úc1Úc2r   r   rV   s                           r#   Ú_iup_contour_bound_forced_setre   Ê   sÝ  € ô( ˆv‹;œ#˜f›+Ó%Ð%Ð%äˆF‹€AÜ‹U€Fä”3�v“; ‘? B¨×+ˆØ˜A™‘ ¨1¡u¡ˆBØ‰y˜&™)ˆ1Ø˜A™ ™	Ñ" F¨q©5°1©9Ñ$5ˆBäˆAØ‘ˆBØ‘ˆBØ‘%ˆCØ‘%ˆCØ‘%ˆCØ‘%ˆCà�c‹zØ˜c�B�Ø˜c�B��Bà˜c�B�Ø˜c�B�àˆEð �R‹xÜ�r˜B‘w“< )Ó+´°B³¸)Ó0CØ �Eøð �r•˜R–Ü˜B › iÑ/°2ÕP¼¸RÀ»ÀyÑ9PÕPØ �Eøð
 ˜“8Ø˜B“wä ›G iÓ/Ü # B¨¡G£¨yÓ 8Ø"$¡.°2Ñ"5¸2À¹7Ó!Cà$(˜Eøô   ›G iÓ/Ü # B¨¡G£¨yÓ 8Ø"$ r¡~Ñ"5¸2À¹7Ó!Cà$(˜Eç‰uØ—
‘
˜1”Ûôq ñ ,ð~ €Mr%   )r-   r
   Ú	best_costÚbest_jÚcostrW   rC   Úlookbackc           	      ód  • [        U 5      nUc  Un[        U[        5      nSS0nSS0n[        SU5       Hv  nXhS-
     S-   n	X–U'   US-
  Xx'   US-
  U;   a  M#  [        US-
  [	        X„-
  S5      S5       H3  n
Xj   S-   nX¹:  a  [        XX¨U5      (       a
  U=Xh'   n	X§U'   X¢;   d  M2    Mt     Mx     Xv4$ )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.Nr)   r   r   r<   éþÿÿÿ)r   r[   ÚMAX_LOOKBACKrZ   r\   rO   )r&   r   rW   rC   ri   r   ÚcostsÚchainr-   rf   r
   rh   s               r#   Ú_iup_contour_optimize_dpro   %  sÛ   € ô2 	ˆF‹€AØÑØˆÜ�8œ\Ó*€HØ�ˆG€EØ�ˆJ€EÜ�1�aŽ[ˆØ˜a™%‘L 1Ñ$ˆ	àˆa‰Ø�q‘5ˆ‰àˆq‰5�F‹?Ùä�q˜1‘uœc !¡,°Ó3°RÖ8ˆAØ‘8˜a‘<ˆDàÓÔ$6°vÀqÈY×$WÑ$WØ'+Ð+�‘˜9Ø�a‘à�{Úó 9ñ ð& ˆ<Ðr%   ÚlÚkc                 óP   • [        U 5      nX-  nU(       d  U $ XU-
  S U SX!-
   -   $ )zwRotate list by k items forward.  Ie. item at position 0 will be
at position k in returned list.  Negative k is allowed.N)r   )rp   rq   r   s      r#   Ú	_rot_listrs   Z  s7   € ô 	ˆA‹€AØ�F€AÞØˆØ�‰UˆWˆ:˜˜'˜A™E˜
Ñ"Ð"r%   Úsr   c                 óV   • X-  nU(       d  U $ U  Vs1 s H
  o3U-   U-  iM     sn$ s  snf rF   © )rt   rq   r   r.   s       r#   Ú_rot_setrw   d  s/   € Ø�F€AÞØˆÙ!"Ó#¢˜A�‰U�aŒK¡Ñ#Ð#ùÒ#s   ’&c                 ó  ^^• [        U 5      n[        U4S jU  5       5      (       a  S/U-  $ US:X  a  U $ U S   m[        U4S jU  5       5      (       a  T/S/US-
  -  -   $ [        XT5      nU(       aÆ  US-
  [        U5      -
  nUS:¼  d   e[	        X5      n [	        X5      n[        XEU5      n[        XUT5      u  pg[        5       nUS-
  n	U	b  UR                  U	5        Xi   n	U	b  M  UR                  S5        XH::  d   XH45       e[        U5       V	s/ s H  o™U;   a  X	   OSPM     n n	[	        X* 5      n U $ [        X -   X-   UTU5      u  pgSUS-   pº[        US-
  [        U5      S-
  5       HW  n[        5       nUn	XœU-
  :”  a!  UR                  X“-  5        Xi   n	XœU-
  :”  a  M!  XœU-
  :X  d  MB  X|   X|U-
     -
  nXÛ::  d  MU  X�pºMY     XJ::  d   XJ45       e[        U5       V	s/ s H  o™U
;   a  X	   OSPM     n n	U $ s  sn	f s  sn	f )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   >#   • U  H  n[        [        U6 5      T:*  v •  M     g 7frF   rG   )rJ   rA   rC   s     €r#   rK   Ú'iup_contour_optimize.<locals>.<genexpr>z  s   øé € Ð
9²&¨QŒ3Œw˜ˆ{Ó˜yÖ(²&ùs   ƒ!$Nr   r   c              3   ó.   >#   • U  H
  nTU:H  v •  M     g 7frF   rv   )rJ   r   Úd0s     €r#   rK   rz   ƒ  s   øé € Ð
#šF�qˆ2�Ž7šFùs   ƒr)   )r   rM   re   r\   rs   rw   ro   rY   r]   ÚremoverZ   )r&   r   rC   r   rW   rq   rn   rm   Úsolutionr-   Úbest_solrf   r1   rh   r|   s     `           @r#   Úiup_contour_optimizer€   k  sM  ù€ ô 	ˆF‹€Aô
 Ô
9±&Ó
9×9Ñ9Øˆv˜‰zÐð 	ˆAƒvØˆð 
�‰€BÜ
Ô
#™FÓ
#×#Ñ#Øˆt�t�f  A¡Ñ&Ñ&Ð&ô +¨6¸9ÓE€Fö ð �‰U”c˜&“kÑ!ˆØ�A‹vˆˆvä˜6Ó%ˆÜ˜6Ó%ˆÜ˜& QÓ'ˆô 0°ÀÈ	ÓR‰ˆô “5ˆØ�‰EˆØ‰mØ�L‰L˜ŒOØ‘ˆAð ‹mð 	�‰˜Ôð Ó!Ð5 FÐ#5Ó5Ð!ä@EÀaÄÓIÂ¸1 H›}�&’)°$Ò6ÁˆÐIä˜6 2Ó&ˆð< €Mô3 0Ø‰O˜V™_¨f°iÀó
‰ˆð # A¨¡E�)ä˜1˜q™5¤# e£*¨q¡.Ö1ˆEä“uˆHØˆAØ˜a‘i“-Ø—‘˜Q™UÔ#Ø‘H�ð ˜a‘i•-ð ˜A‘I�~Ø‘| e°A©IÑ&6Ñ6�ØÕ$Ø*2šiñ 2ð  Ó!Ð5 FÐ#5Ó5Ð!ä@EÀaÄÓIÂ¸1 H›}�&’)°$Ò6ÁˆÐIà€MùòA Jùò< Js   ÄG?Ç&Hc                 óH  • [        U5      U:X  a!  [        U5      U(       a  US   S-   OSS-   :X  d   e[        U5      nX$S-
  US-
  US-
  US-
  /-   n/ nSnU HF  n[        XUS-    XUS-    U5      n[        U5      Xv-
  S-   :X  d   eUR                  U5        US-   nMH     U$ )zý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.
r)   r   r   r:   r;   r<   )r=   r   r€   r   )	r&   r   r8   rC   r   r    r1   r6   r>   s	            r#   Úiup_delta_optimizer‚   Ð  sÊ   € ô �$‹<˜4Ó¤C¨£KÆD°D¸±H¸q²LÈaÐSTÑ3TÓ$TÐTÐTÜˆF‹€AØ�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EÛˆÜ&Ø˜3 ™7Ð# V°C¸!±GÐ%<¸ió
ˆô �7‹|˜s™{¨Q™Ó.Ð.Ð.Ø�
‰
�7ÔØ�a‘Šñ ð €Jr%   )r   )g        )'r   ÚAttributeErrorÚImportErrorÚfontTools.miscÚcompiledÚCOMPILEDÚtypingr   r   r   Únumbersr   r   Ú_PointÚ_DeltaÚ_PointSegmentÚ_DeltaSegmentÚ_DeltaOrNoneÚ_DeltaOrNoneSegmentÚ
_Endpointsrl   ÚcfuncÚlocalsÚintÚdoubler$   r7   r?   ÚinlineÚreturnsrO   rY   re   ro   Úlistrs   rw   r€   r‚   rv   r%   r#   Ú<module>r˜      s¤  ðð&Ûð �?‰?€÷ñ ÷
 #ð 
ˆt�TˆzÑ	€Ø	ˆt�TˆzÑ	€Ø˜Ñ €Ø˜Ñ €Ø�V˜T�\Ñ"€Ø˜|Ñ,Ð Ø�hÑ€
ð €ð ‡�Ø‡‚Ø‡j�jØ‡j�jØ‡}�}Ø‡}�}Ø‡}�}Ø‡}�}Ø
�-‰-Ø‡m�mØ‡m�mñ
ð0Øð0Ø &ð0Ø-3ð0Ø:@ð0ØGMó0ó
ó ð0ðf1Ð+ð 1°]ð 1À}ô 1ðhØðØ)6ðØ>Hðàôð4 ‡�Ø‡�Ø‡‚Ø‡j�jØ‡j�jà‡m�mØ‡m�mØ‡m�mØ‡m�mñð ‡‚�ÓðØðàðð ðð ð	ð
 óó óó ó ðð* ‡‚Ø‡}�}Ø‡}�}Ø�‰Ø�‰Ø�‰Ø�‰Ø
�*‰*Øñ	ð EFñNØðNØ#0ðNØ=AðNàôNó	ðNðb ‡‚Ø‡j�jØ‡j�jØ�m‰mØ�:‰:Ø	�‰ØØ�m‰mññ ‹5ØØñ)Øð)àð)ð ð	)ð
 ô)óð)ðX#�ð #˜#ô #ð$�ð $˜ð $ ô $ð EHñbØðbØ#0ðbØ=AðbàõbðR ñ	Øðàðð ðð ð	ð
 öøð[ 	˜Ð$ó &ç%Ð%ð&ús   ‚J# Ê#J5Ê4J5