
    h7@                     ^    S SK r \ R                  rS SKrSSKJr	J
r
  SS/rSr\" S5      r\ R                  \ R                   \ R"                  " \ R$                  5      \ R&                  " \ R(                  \ R(                  S	9S
 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9S 5       5       5       r\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  \ R2                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R$                  \ R$                  \ R$                  \ R2                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R"                  " \ R(                  5      \ R&                  " \ R$                  \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  S9S 5       5       5       5       5       r\ R                  \ R                   \ R"                  " \ R(                  5      \ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  \ R(                  \ R$                  S9S 5       5       5       5       5       r\ R                  \ R"                  " \ R2                  5      \ R&                  " \ R$                  \ R(                  \ R(                  \ R(                  \ R(                  S9\ R&                  " \ R(                  \ R(                  S9S 5       5       5       5       r\ R                  \ R                   \ R&                  " \ R$                  S 9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  \ R(                  S!9S" 5       5       5       5       r \ R                  \ R&                  " \ R2                  \ R$                  S#9\ R&                  " \ R2                  S$9\ R&                  " \ R2                  S%9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  S&9\ R&                  " \ R(                  \ R(                  \ R(                  \ R(                  \ R(                  S'9S( 5       5       5       5       5       5       r!\ R&                  " \ R$                  S)9\ R&                  " \ R2                  S*9\ R&                  " \ R2                  S%9S.S+ j5       5       5       r"\ R&                  " \ R2                  \ R2                  \ R2                  S,9\ R&                  " \ R2                  S%9S.S- j5       5       r#g! \\4 a
    S SKJ r    GNf = f)/    N)cython   )ErrorApproxNotFoundErrorcurve_to_quadraticcurves_to_quadraticd   NaNv1v2c                 :    XR                  5       -  R                  $ )zReturn the dot product of two vectors.

Args:
    v1 (complex): First vector.
    v2 (complex): Second vector.

Returns:
    double: Dot product.
)	conjugaterealr   s     G/var/www/html/env/lib/python3.13/site-packages/fontTools/cu2qu/cu2qu.pydotr   %   s     %%%    )abcd)_1_2_3_4c                 F    UnUS-  U-   nX-   S-  U-   nX-   U-   U-   nXEXg4$ N      @ )r   r   r   r   r   r   r   r   s           r   calc_cubic_pointsr    6   s?     
B
c'QB
%3	B	
QB2>r   )p0p1p2p3c                 D    X-
  S-  nX!-
  S-  U-
  nU nX6-
  U-
  U-
  nXuXF4$ r   r   )r!   r"   r#   r$   r   r   r   r   s           r   calc_cubic_parametersr&   D   s=     
CA	C!A
A

QA:r   c           
         US:X  a  [        [        XX#5      5      $ US:X  a  [        [        XX#5      5      $ US:X  aL  [        XX#5      u  pV[        [        US   US   US   US   5      [        US   US   US   US   5      -   5      $ US:X  aL  [        XX#5      u  pV[        [        US   US   US   US   5      [        US   US   US   US   5      -   5      $ [        XX#U5      $ )a  Split a cubic Bezier into n equal parts.

Splits the curve into `n` equal parts by curve time.
(t=0..1/n, t=1/n..2/n, ...)

Args:
    p0 (complex): Start point of curve.
    p1 (complex): First handle of curve.
    p2 (complex): Second handle of curve.
    p3 (complex): End point of curve.

Returns:
    An iterator yielding the control points (four complex values) of the
    subcurves.
         r   r      )itersplit_cubic_into_twosplit_cubic_into_three_split_cubic_into_n_gen)r!   r"   r#   r$   nr   r   s          r   split_cubic_into_n_iterr1   R   s   , 	Av(899Av*22:;;Av#BB3 1qtQqT1Q48"1Q41qtQqT:;
 	
 	Av#BB3"1Q41qtQqT:$QqT1Q41qt<=
 	

 #22155r   )r!   r"   r#   r$   r0   )dtdelta_2delta_3i)a1b1c1d1c              #     #    [        XX#5      u  pVpxSU-  n	X-  n
X-  n[        U5       HX  nX-  nX-  nX[-  nSU-  U-  U-   U
-  nSU-  U-  U-   SU-  U-  -   U	-  nX]-  U-  Xn-  -   X}-  -   U-   n[        UUUU5      v   MZ     g 7f)Nr   r)   r(   )r&   ranger    )r!   r"   r#   r$   r0   r   r   r   r   r2   r3   r4   r5   t1t1_2r6   r7   r8   r9   s                      r   r/   r/   |   s      'rr6JA!	
QBgGlG1XVw[!ebj1n'!ebj1nq1ut|+r1Vd]QX%.2BB// s   BB)midderiv3c                 p    U SX-   -  -   U-   S-  nX2-   U-
  U -
  S-  nX U-   S-  XE-
  U4XDU-   X#-   S-  U44$ )ad  Split a cubic Bezier into two equal parts.

Splits the curve into two equal parts at t = 0.5

Args:
    p0 (complex): Start point of curve.
    p1 (complex): First handle of curve.
    p2 (complex): Second handle of curve.
    p3 (complex): End point of curve.

Returns:
    tuple: Two cubic Beziers (each expressed as a tuple of four complex
    values).
r)         ?      ?r   )r!   r"   r#   r$   r>   r?   s         r   r-   r-      se    * RW"e
+CglR5(F	2g_clC0	FlRWOR0 r   )mid1deriv1mid2deriv2c                     SU -  SU-  -   SU-  -   U-   S-  nUSU-  -   SU -  -
  S-  nU SU-  -   SU-  -   SU-  -   S-  nSU-  SU-  -
  U -
  S-  nU SU -  U-   S-  XE-
  U4XDU-   Xg-
  U4XfU-   USU-  -   S-  U44$ )	av  Split a cubic Bezier into three equal parts.

Splits the curve into three equal parts at t = 1/3 and t = 2/3

Args:
    p0 (complex): Start point of curve.
    p1 (complex): First handle of curve.
    p2 (complex): Second handle of curve.
    p3 (complex): End point of curve.

Returns:
    tuple: Three cubic Beziers (each expressed as a tuple of four complex
    values).
      r+   gh/?r)   r*   r(   r   r   )r!   r"   r#   r$   rC   rD   rE   rF   s           r   r.   r.      s    : FR"Wq2v%*v6D1r6kAF"v.FRK"r'!AF*v6D"fq2vo"v.F	a"frkS $-6	f}dmT2	f}rAF{c126 r   )tr!   r"   r#   r$   )_p1_p2c                 >    XU-
  S-  -   nXCU-
  S-  -   nXVU-
  U -  -   $ )aT  Approximate a cubic Bezier using a quadratic one.

Args:
    t (double): Position of control point.
    p0 (complex): Start point of curve.
    p1 (complex): First handle of curve.
    p2 (complex): Second handle of curve.
    p3 (complex): End point of curve.

Returns:
    complex: Location of candidate control point on quadratic curve.
g      ?r   )rJ   r!   r"   r#   r$   rK   rL   s          r   cubic_approx_controlrN      s5    0 R3
C
R3
C)q  r   )abcdphc                     X-
  nX2-
  nUS-  n [        X`U-
  5      [        Xe5      -  nX%U-  -   $ ! [         a    [        [        [        5      s $ f = f)aU  Calculate the intersection of two lines.

Args:
    a (complex): Start point of first line.
    b (complex): End point of first line.
    c (complex): Start point of second line.
    d (complex): End point of second line.

Returns:
    complex: Location of intersection if one present, ``complex(NaN,NaN)``
    if no intersection was found.
y              ?)r   ZeroDivisionErrorcomplexNAN)r   r   r   r   rO   rP   rQ   rR   s           r   calc_intersectrW      sb    $ 
B	
B
RA!q5MCJ& Av:  !sC  !s   0 AA)	tolerancer!   r"   r#   r$   c                     [        U5      U::  a  [        U5      U::  a  gU SX-   -  -   U-   S-  n[        U5      U:  a  gX2-   U-
  U -
  S-  n[        X U-   S-  XV-
  XT5      =(       a    [        XUU-   X#-   S-  X45      $ )a\  Check if a cubic Bezier lies within a given distance of the origin.

"Origin" means *the* origin (0,0), not the start of the curve. Note that no
checks are made on the start and end positions of the curve; this function
only checks the inside of the curve.

Args:
    p0 (complex): Start point of curve.
    p1 (complex): First handle of curve.
    p2 (complex): Second handle of curve.
    p3 (complex): End point of curve.
    tolerance (double): Distance from origin.

Returns:
    bool: True if the cubic Bezier ``p`` entirely lies within a distance
    ``tolerance`` of the origin, False otherwise.
Tr)   rA   FrB   )abscubic_farthest_fit_inside)r!   r"   r#   r$   rX   r>   r?   s          r   r[   r[     s    : 2w)B9 4 RW"e
+C
3x)glR5(F$
"WOS\3 W
#Cv3
VWr   )rX   )q1c0r8   c2c3c                    [        U S   U S   U S   U S   5      n[        R                  " UR                  5      (       a  gU S   nU S   nX2U-
  S-  -   nXBU-
  S-  -   n[	        SXPS   -
  X`S   -
  SU5      (       d  gX2U4$ )a  Approximate a cubic Bezier with a single quadratic within a given tolerance.

Args:
    cubic (sequence): Four complex numbers representing control points of
        the cubic Bezier curve.
    tolerance (double): Permitted deviation from the original curve.

Returns:
    Three complex numbers representing control points of the quadratic
    curve if it fits within the given tolerance, or ``None`` if no suitable
    curve could be calculated.
r   r   r(   r)   NUUUUUU?)rW   mathisnanimagr[   )cubicrX   r\   r]   r_   r8   r^   s          r   cubic_approx_quadraticrf   B  s    0 
a%(E!HeAh	?Bzz"''	qB	qB	Bw5!	!B	Bw5!	!B$Q1Xr!H}aSS2:r   )r0   rX   )r5   )all_quadratic)r]   r8   r^   r_   )q0r\   next_q1q2r9   c           	      f   US:X  a  [        X5      $ US:X  a  US:X  a  U $ [        U S   U S   U S   U S   U5      n[        U5      n[        SUS   US   US   US   5      nU S   nSnU S   U/n	[	        SUS-   5       H  n
Uu  ppUnUnX:  aE  [        U5      n[        XS-
  -  US   US   US   US   5      nU	R                  U5        UU-   S-  nOUnUnX~-
  n[        U5      U:  d.  [        UUUU-
  S-  -   U-
  UUU-
  S-  -   U-
  UU5      (       a  M    g	   U	R                  U S   5        U	$ )
a  Approximate a cubic Bezier curve with a spline of n quadratics.

Args:
    cubic (sequence): Four complex numbers representing control points of
        the cubic Bezier curve.
    n (int): Number of quadratic Bezier curves in the spline.
    tolerance (double): Permitted deviation from the original curve.

Returns:
    A list of ``n+2`` complex numbers, representing control points of the
    quadratic spline if it fits within the given tolerance, or ``None`` if
    no suitable spline could be calculated.
r   r(   Fr   r)   y                rB   ra   N)rf   r1   nextrN   r;   appendrZ   r[   )re   r0   rX   rg   cubics
next_cubicri   rj   r9   spliner5   r]   r8   r^   r_   rh   r\   d0s                     r   cubic_approx_splinerr   f  s   : 	Av%e77Av-5($U1XuQxq58QOF fJ"	:a=*Q-A
1G 
qB	BAh F1a!e_# 5fJ*UZ]JqM:a=*UV-G MM'"w,#%BB Wr7Y&?"r'e$$r)"r'e$$r)'
 '
 9 : MM%(Mr   )max_err)r0   c                    U  Vs/ s H  n[        U6 PM     n n[        S[        S-   5       H<  n[        XX5      nUc  M  U Vs/ s H  ofR                  UR
                  4PM     sns  $    [        U 5      es  snf s  snf )a  Approximate a cubic Bezier curve with a spline of n quadratics.

Args:
    cubic (sequence): Four 2D tuples representing control points of
        the cubic Bezier curve.
    max_err (double): Permitted deviation from the original curve.
    all_quadratic (bool): If True (default) returned value is a
        quadratic spline. If False, it's either a single quadratic
        curve or a single cubic curve.

Returns:
    If all_quadratic is True: A list of 2D tuples, representing
    control points of the quadratic spline if it fits within the
    given tolerance, or ``None`` if no suitable spline could be
    calculated.

    If all_quadratic is False: Either a quadratic curve (if length
    of output is 3), or a cubic curve (if length of output is 4).
r   )rU   r;   MAX_Nrr   r   rd   r   )curvers   rg   rQ   r0   rp   ss          r   r   r     sz    0 #((%QWa[%E(1eai $UwF.45fVVQVV$f55	 ! e
$$ ) 6s   A7!A<)llast_ir5   c           
         U  VVs/ s H  o3 Vs/ s H  n[        U6 PM     snPM     n nn[        U5      [        U 5      :X  d   e[        U 5      nS/U-  nS=pxSn	 [        X   XU   U5      n
U
c  U	[        :X  a  OVU	S-  n	UnM*  XU'   US-   U-  nX:X  a:  U V
Vs/ s H*  o Vs/ s H  oR                  UR
                  4PM     snPM,     snn
$ Mv  [        U 5      es  snf s  snnf s  snf s  snn
f )a  Return quadratic Bezier splines approximating the input cubic Beziers.

Args:
    curves: A sequence of *n* curves, each curve being a sequence of four
        2D tuples.
    max_errors: A sequence of *n* floats representing the maximum permissible
        deviation from each of the cubic Bezier curves.
    all_quadratic (bool): If True (default) returned values are a
        quadratic spline. If False, they are either a single quadratic
        curve or a single cubic curve.

Example::

    >>> curves_to_quadratic( [
    ...   [ (50,50), (100,100), (150,100), (200,50) ],
    ...   [ (75,50), (120,100), (150,75),  (200,60) ]
    ... ], [1,1] )
    [[(50.0, 50.0), (75.0, 75.0), (125.0, 91.66666666666666), (175.0, 75.0), (200.0, 50.0)], [(75.0, 50.0), (97.5, 75.0), (135.41666666666666, 82.08333333333333), (175.0, 67.5), (200.0, 60.0)]]

The returned splines have "implied oncurve points" suitable for use in
TrueType ``glif`` outlines - i.e. in the first spline returned above,
the first quadratic segment runs from (50,50) to
( (75 + 125)/2 , (120 + 91.666..)/2 ) = (100, 83.333...).

Returns:
    If all_quadratic is True, a list of splines, each spline being a list
    of 2D tuples.

    If all_quadratic is False, a list of curves, each curve being a quadratic
    (length 3), or cubic (length 4).

Raises:
    fontTools.cu2qu.Errors.ApproxNotFoundError: if no suitable approximation
    can be found for all curves with the given parameters.
Nr   r   )rU   lenrr   ru   r   rd   r   )curves
max_errorsrg   rv   rQ   rx   splinesry   r5   r0   rp   rw   s               r   r   r     s   N 9??uE*Eqw{E*F?z?c&k)))FAfqjGNF	A
$VYa=-P>EzFAF
UaK;ELMW6v6v!ffaff%v6WMM  f
%%+ +?& 7Ms-   	C"CC"	C-$!C(C-C"(C-)T)$r   AttributeErrorImportErrorfontTools.misccompiledCOMPILEDrb   errorsr   
Cu2QuErrorr   __all__ru   floatrV   cfuncinlinereturnsdoublelocalsrU   r   r    r&   r1   intr/   r-   r.   rN   rW   r[   rf   rr   r   r   r   r   r   <module>r      s  $& ??  <  !6
7El &..V^^4
& 5   
& 6>>V^^v~~V~~&..V^^ W   ~~&..V^^ 6>>V^^v~~V W   ~~&..V^^"6  
"6J ~~~~~~~~jj 6>>V^^v~~V}}fmmV]]fjj ~~&..V^^0 W0  ~~&..V^^ 6>>&..9 :  . ~~~~~~~~	 	>>	>>	  4 mm~~~~~~~~ 6>>v~~6! 7    !$ 6>>V^^v~~V&..V^^v~~W X W    
. 

mm~~~~~~~~ 6>>&..9W :  W@ '~~~~~~~~~~ (  4 v}}5VZZ(~~&..V^^ ~~~~NN~~~~= )  6 =@ v}}%VZZ(% )  &%@ FJJ&**=VZZ(:& ) >:&K 	$ &%%&s   b b,+b,