Ë
    £ehˆ:  ã                   ój  — 	 d dl Z 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 j0                  e j0                  e j0                  e j0                  e j0                  e j0                  e j0                  ¬«	      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 j8                   e j,                  e j.                  e j.                  e j0                  e j0                  e j0                  e j0                  ¬«       e j:                  e«      dededededef
d„«       «       «       «       Z e j,                  e j0                  e j0                  e j0                  e j0                  e j0                  e j0                  e j.                  e¬«      	 d$dedededefd„«       Z  e j,                  e j.                  e j.                  e j0                  e j.                  e j0                  ee j0                  ¬«       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&y# eef$ r
 d dlm Z  Y �Œ«w xY w)&é    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(  r<t        | «      }|
|k(  r|j                  |
g|z  «       n|j                  dg|z  «       Œb||	kD  r|	|}	}||
}}
||
z
  |	|z
  z  }| D ]5  }||   }||k  r|
}n||	k\  r|}n||z
  |z  }|
|z   }|j                  |«       Œ7 Œµ 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                     úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/iup.pyÚiup_segmentr$      s  € ð* ˜�€JØò $ˆØ Ð ˆ
�1‰˜Ø˜Q™  Q¡¨¨Q©°°Q±Ð7‰ˆˆB��Bà�Š8Ü�F“ˆAØ�RŠxØ—
‘
˜B˜4 !™8Õ$à—
‘
˜A˜3 ™7Ô#Øà�Š7Ø˜�ˆBØ˜�ˆBð �b‘˜R "™WÑ%ˆØò 	ˆDØ�Q‘ˆAà�BŠwØ‘Ø�b’Ø‘ð ˜R™ 5Ñ(�Ø˜‘J�à�J‰J�q�Mñ%	ð%$ôL �
ÐÐó    ÚdeltasÚreturnc                 ó>  — t        | «      t        |«      k(  sJ ‚d| vr| S t        | «      }t        | «      D ��cg c]
  \  }}|€Œ	|‘Œ }}}|sdg|z  S g }t        |«      }t        |«      }|dk7  r;d|||d   f\  }	}
}}|j	                  t        ||	|
 ||   | |   ||   | |   «      «       |j                  | |   «       |D ][  }||z
  dkD  r;|dz   |||f\  }	}
}}|j	                  t        ||	|
 ||   | |   ||   | |   «      «       |j                  | |   «       |}Œ] ||dz
  k7  r>|dz   |||d   f\  }	}
}}|j	                  t        ||	|
 ||   | |   ||   | |   «      «       t        | «      t        |«      k(  sJ t        | «      t        |«      f«       ‚|S c c}}w )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 U¨G°B©KÐ7ÑˆˆB��SØ�
‰
ÜØ�r˜"�˜v c™{¨F°3©K¸À¹ÀfÈSÁkóô	
ð
 ‡J�Jˆv�e‰}ÔØò 	ˆØ�‰;˜Š?Ø$ q™y¨#¨u°cÐ9ÑˆB��C˜Ø�J‰JÜØ˜2˜b�M 6¨#¡;°°s±¸VÀC¹[È&ÐQTÉ+óôð
 	�
‰
�6˜#‘;ÔØ‰ð	ð ��A‘‚~à  1™9 a¨°¸±
Ð:ÑˆˆB��SØ�
‰
ÜØ�r˜"�˜v c™{¨F°3©K¸À¹ÀfÈSÁkóô	
ô ˆv‹;œ#˜c›(Ò"Ð;¤S¨£[´#°c³(Ð$;Ó;Ð"Ø€JùóK As   ¹
FÁFÚendsc                 ó  — 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        | || ||| «      }|j                  |«       |}Œ. |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.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Ø�1�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EØò ˆØˆq‰ˆÜ˜f U¨3Ð/°¸¸cÐ1BÓ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.r<   r   c              3   ól   •K  — | ]+  \  \  }}\  }}t        t        ||z
  ||z
  «      «      ‰k  –— Œ- y ­w©N©ÚabsÚcomplex)Ú.0r   r@   rA   rB   rC   s        €r#   ú	<genexpr>z%can_iup_in_between.<locals>.<genexpr>Ä   s>   øè ø€ ò á‰FˆQ�‘F�Q˜ô 	ŒG�A˜‘E˜1˜q™5Ó!Ó" iÕ/ñùs   ƒ14)r$   Úallr   )r&   r   r-   r
   rC   Úinterps       ` r#   Úcan_iup_in_betweenrN   ©   st   ø€ ð. ˆq‰5�AŠ:Ðˆ:Ü˜  A¡¨Ð*¨F°1©I°v¸a±yÀ&ÈÁ)ÈVÐTUÉYÓW€FØ�A˜‘E˜AÐ€Fäó ä! &¨&Ó1ôó ð r%   )ÚcjÚdjÚlcjÚldjÚncjÚndjÚforceÚforcedc                 ó<  — t        | «      t        |«      k(  sJ ‚t        | «      }t        «       }t        t        | «      dz
  dd«      D �]P  }| |dz
     ||dz
     }}| |   ||   }	}| ||z
  dz      |||z
  dz      }}
dD �]  }|	|   }||   }||   }||   }||   }|
|   }||k  r	||}}||}}n||}}||}}d}||k(  r"t        ||z
  «      |kD  r²t        |«      |kD  r¤d}n¡||cxk  r|k  r-n n*t	        ||«      |z
  |cxk  rt        ||«      |z   k  snn d}ni||k7  rd||k  r0t        |«      |kD  rQt        ||z
  «      |kD  r@||z
  |k  ||k  k7  r2d}n/t        |«      |kD  r!t        ||z
  «      |kD  r|||z   k  ||k  k7  rd}|s�Œ|j                  |«        �ŒP �ŒS |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   r)   r   FT)r   ÚsetÚrangerH   ÚminÚmaxÚadd)r&   r   rC   r   rV   r-   ÚldÚlcr   ÚcÚndÚncr
   rO   rP   rQ   rR   rS   rT   Úc1Úc2r   r   rU   s                           r#   Ú_iup_contour_bound_forced_setrd   Ê   s  € ô( ˆv‹;œ#˜f›+Ò%Ð%Ð%äˆF‹€AÜ‹U€Fä”3�v“; ‘? B¨Ó+ó =ˆØ˜˜A™‘  q¨1¡u¡ˆBˆØ�a‰y˜& ™)ˆ1ˆØ˜˜A™ ™	Ñ" F¨1¨q©5°1©9Ñ$5ˆBˆàó 8	ˆAØ�1‘ˆBØ�1‘ˆBØ�Q‘%ˆCØ�Q‘%ˆCØ�Q‘%ˆCØ�Q‘%ˆCà�cŠzØ˜c�B�Ø˜c�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Ø"$ y¡.°2Ñ"5¸2À¹7Ò!Cà$(™Eô   ›G iÒ/Ü # B¨¡G£¨yÒ 8Ø"$ r¨I¡~Ñ"5¸2À¹7Ò!Cà$(˜EãØ—
‘
˜1”Úòq8	ð=ð~ €Mr%   )r-   r
   Ú	best_costÚbest_jÚcostrV   rC   Úlookbackc           	      óZ  — t        | «      }|€|}t        |t        «      }ddi}ddi}t        d|«      D ]r  }||dz
     dz   }	|	||<   |dz
  ||<   |dz
  |v rŒ#t        |dz
  t	        ||z
  d«      d«      D ]0  }
||
   dz   }||	k  rt        | ||
||«      r|x||<   }	|
||<   |
|v sŒ0 Œr Œt ||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.Nr)   r   r   r<   éþÿÿÿ)r   rZ   ÚMAX_LOOKBACKrY   r[   rN   )r&   r   rV   rC   rh   r   ÚcostsÚchainr-   re   r
   rg   s               r#   Ú_iup_contour_optimize_dprn   %  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°RÓ8ò 	ˆAØ˜‘8˜a‘<ˆDà�iÒÔ$6°v¸vÀqÈ!ÈYÔ$WØ'+Ð+��a‘˜9Ø��a‘à�FŠ{Ùñ	ðð& �%ˆ<Ðr%   ÚlÚkc                 óL   — 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   )ro   rp   r   s      r#   Ú	_rot_listrr   Z  s=   € ô 	ˆA‹€AØˆ�F€AÙØˆØˆQ�‰UˆWˆ:˜˜'˜A ™E˜
Ñ"Ð"r%   Úsr   c                 óJ   — ||z  }|s| S | D �ch c]
  }||z   |z  ’Œ c}S c c}w rF   © )rs   rp   r   r.   s       r#   Ú_rot_setrv   d  s/   € Øˆ�F€AÙØˆØ!"Ö#˜AˆQ�‰U�a‹KÒ#Ð#ùÒ#s   Ž 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
  }	|	�|j                  |	«       ||	   }	|	�Œ|j                  d«       ||k  s	J ||f«       ‚t        |«      D �	cg c]  }	|	|v r| |	   nd‘Œ } }	t	        | | «      } | S t        | | z   ||z   |‰|«      \  }}d|dz   }}
t        |dz
  t        |«      dz
  «      D ]Y  }t        «       }|}	|	||z
  kD  r"|j                  |	|z  «       ||	   }	|	||z
  kD  rŒ"|	||z
  k(  sŒB||   |||z
     z
  }||k  sŒV||}}
Œ[ ||
k  s	J ||
f«       ‚t        |«      D �	cg c]  }	|	|
v r| |	   nd‘Œ } }	| S c c}	w c c}	w )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   óF   •K  — | ]  }t        t        |Ž «      ‰k  –— Œ y ­wrF   rG   )rJ   rA   rC   s     €r#   rK   z'iup_contour_optimize.<locals>.<genexpr>z  s   øè ø€ Ò
9¨QŒ3Œw˜ˆ{Ó˜yÕ(Ñ
9ùs   ƒ!Nr   r   c              3   ó(   •K  — | ]	  }‰|k(  –— Œ y ­wrF   ru   )rJ   r   Úd0s     €r#   rK   z'iup_contour_optimize.<locals>.<genexpr>ƒ  s   øè ø€ Ò
#�qˆ2��7Ñ
#ùs   ƒr)   )r   rL   rd   r[   rr   rv   rn   rX   r\   ÚremoverY   )r&   r   rC   r   rV   rp   rm   rl   Úsolutionr-   Úbest_solre   r1   rg   rz   s     `           @r#   Úiup_contour_optimizer~   k  s†  ù€ ô 	ˆF‹€Aô
 Ó
9°&Ô
9Ô9Øˆv˜‰zÐð 	ˆA‚vØˆð 
�‰€BÜ
Ó
#˜FÔ
#Ô#Øˆt�t�f  A¡Ñ&Ñ&Ð&ô +¨6°6¸9ÓE€Fñ ð �‰U”c˜&“kÑ!ˆØ�AŠvˆˆvä˜6 1Ó%ˆÜ˜6 1Ó%ˆÜ˜& ! QÓ'ˆô 0°¸ÀÈ	ÓR‰ˆˆuô “5ˆØ�‰EˆØˆmØ�L‰L˜ŒOØ�a‘ˆAð ‰mð 	�‰˜Ôð ˜Ò!Ð5 F¨HÐ#5Ó5Ð!ä@EÀaÃÖI¸1˜q H™}�&˜’)°$Ñ6ÐIˆÐIä˜6 A 2Ó&ˆð< €Mô3 0Ø�V‰O˜V f™_¨f°iÀó
‰ˆˆuð # A¨¡E�)ˆä˜1˜q™5¤# e£*¨q¡.Ó1ò 
	9ˆEä“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˜i‘Hð
	9ð  ˜Ò!Ð5 F¨HÐ#5Ó5Ð!ä@EÀaÃÖI¸1˜q H™}�&˜’)°$Ñ6ÐIˆÐIà€MùòA Jùò< Js   ÄG2ÇG7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 ]G  }t        | ||dz    |||dz    |«      }t        |«      ||z
  dz   k(  sJ ‚|j                  |«       |dz   }ŒI |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.
    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Ø�1�q‘5˜!˜a™%  Q¡¨¨A©Ð.Ñ.€DØ
€CØ€EØò ˆÜ&Ø�5˜3 ™7Ð# V¨E°C¸!±GÐ%<¸ió
ˆô �7‹|˜s U™{¨Q™Ò.Ð.Ð.Ø�
‰
�7ÔØ�a‘‰ðð €Jr%   )r   )g        )'r   ÚAttributeErrorÚImportErrorÚfontTools.miscÚcompiledÚCOMPILEDÚtypingr   r   r   Únumbersr   r   Ú_PointÚ_DeltaÚ_PointSegmentÚ_DeltaSegmentÚ_DeltaOrNoneÚ_DeltaOrNoneSegmentÚ
_Endpointsrk   ÚcfuncÚlocalsÚintÚdoubler$   r7   r?   ÚinlineÚreturnsrN   rX   rd   rn   Úlistrr   rv   r~   r€   ru   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! Ê!J2Ê1J2