§
    ¢”j=3  ã                   óº  — 	 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 d dlm	Z	 d dl
Z
d dlmZmZmZ dgZe j         e j        e j        ¦  «         e j        e j        e j        e j        e j        e j        ¬¦  «         e j        e j        e j        ¬¦  «        d	„ ¦   «         ¦   «         ¦   «         ¦   «         Z e j        e j        e j        e j        e j        ¬
¦  «        d„ ¦   «         Ze j         e j        e j        e j        e j        e j        e j        e j        e j        e j        e j        e j        e j        ¬¦  «        d„ ¦   «         ¦   «         Z e j        e j        e j        e j        e j        e j        e j        ¬¦  «        d„ ¦   «         Zeeeef         ef         Zd„ Zd„ Zd„ Z e j        e j        e j        ¬¦  «        	 	 d5deee                  dededeeedf                  fd„¦   «         Z  e	dg d¢¦  «        Z! e j        d6i de j        “de j        “d e j        “d!e j        “d"e j        “d#e j        “d$e j        “d%e j        “d&e j        “d'e j        “d(e j        “d)e j        “de j        “d*e j        “d+e j        “d,e j        “d-e j        “d.e j        “d/e j        “d0e j        “d1e j        “Žd5d2„¦   «         Z"d3„ Z#e$d4k    r e#¦   «          dS dS )7é    N)Úcython)ÚsplitCubicAtTC)Ú
namedtuple)ÚListÚTupleÚUnionÚquadratic_to_curves)Ú	toleranceÚp0Úp1Úp2Úp3)ÚmidÚderiv3c                 ó*  — t          |¦  «        |k    rt          |¦  «        |k    rdS | d||z   z  z   |z   dz  }t          |¦  «        |k    rdS ||z   |z
  | z
  dz  }t          | | |z   dz  ||z
  ||¦  «        ot          |||z   ||z   dz  ||¦  «        S )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.
    Té   g      À?Fç      à?)ÚabsÚcubic_farthest_fit_inside)r   r   r   r   r
   r   r   s          úd/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/qu2cu/qu2cu.pyr   r   (   sÄ   € õ: ˆ2�w„w�)ÒÐ¥ B¡¤¨9Ò 4Ð 4Øˆtð ��R˜"‘W‘Ñ Ñ" eÑ
+€CÝ
ˆ3�x„x�)ÒÐØˆuØ�2‰g˜‰l˜RÑ 5Ñ(€FÝ$Ø
ˆR�"‰W˜‰O˜S 6™\¨3°	ñô ð Wå
# C¨¨v©¸¸R¹À3±ÈÈIÑ
VÔ
VðWó    ©r   r   r   Úp1_2_3c                 ó0   — |dz  }| | dz  |z   |dz  |z   |fS )zAGiven a quadratic bezier curve, return its degree-elevated cubic.gUUUUUUå?gUUUUUUÕ?© r   s       r   Úelevate_quadraticr   R   s5   € ð �5‰\€Fà
Ø	ˆu‰˜Ñ	Ø	ˆu‰˜Ñ	Ø
ð	ð r   )ÚstartÚnÚkÚ
prod_ratioÚ	sum_ratioÚratioÚtr   r   r   r   c                 ól  ‡— d}dŠdg}t          d|¦  «        D ]‹}| ||z            }| ||z   dz
           }|d         |d         k    sJ ‚t          |d         |d         z
  ¦  «        t          |d         |d         z
  ¦  «        z  }||z  }‰|z  Š|                     ‰¦  «         ŒŒˆfd„|dd…         D ¦   «         }| |         d         }	| |         d         }
| ||z   dz
           d         }| ||z   dz
           d         }|	|
|	z
  |r|d         ndz  z   }
|||z
  |rd|d         z
  ndz  z   }|	|
||f}||fS )	z…Give a cubic-Bezier spline, reconstruct one cubic-Bezier
    that has the same endpoints and tangents and approxmates
    the spline.g      ð?é   r   r   é   c                 ó   •— g | ]}|‰z  ‘ŒS r   r   )Ú.0r#   r!   s     €r   ú
<listcomp>z merge_curves.<locals>.<listcomp>Š   s   ø€ Ð	)Ð	)Ð	)˜Aˆ!ˆi‰-Ð	)Ð	)Ð	)r   Néÿÿÿÿ)Úranger   Úappend)Úcurvesr   r   r    Útsr   ÚckÚc_beforer"   r   r   r   r   Úcurver!   s                 @r   Úmerge_curvesr2   e   s�  ø€ ð( €JØ€IØ
ˆ€BÝ�1�a‰[Œ[ð 
ð 
ˆØ�E˜A‘IÔˆØ˜% !™) a™-Ô(ˆð �!Œu˜ œÒ#Ð#Ð#Ð#Ý�B�q”E˜B˜qœE‘MÑ"Ô"¥S¨°!¬°xÀ´{Ñ)BÑ%CÔ%CÑCˆà�eÑˆ
Ø�ZÑˆ	Ø
�	Š	�)ÑÔÐÐð 
*Ð	)Ð	)Ð	)  C R C¤Ð	)Ñ	)Ô	)€Bà	�Œ�qÔ	€BØ	�Œ�qÔ	€BØ	�˜‘	˜A‘Ô	˜qÔ	!€BØ	�˜‘	˜A‘Ô	˜qÔ	!€Bð 
ˆr�B‰w BÐ-˜2˜aœ5˜5¨AÑ.Ñ	.€BØ	ˆr�B‰w¨2Ð4˜A  2¤™J˜J°1Ñ5Ñ	5€Bà��R˜Ð€Eà�"ˆ9Ðr   )ÚcountÚnum_offcurvesÚiÚoff1Úoff2Úonc                 óð   — t          | ¦  «        }d}t          | ¦  «        dz
  }t          d|¦  «        D ]A}| |         }| |dz            }|||z
  dz  z   }|                     |dz   |z   |¦  «         |dz  }ŒB|S )Nr   r&   r%   r   )ÚlistÚlenr+   Úinsert)ÚpÚqr3   r4   r5   r6   r7   r8   s           r   Úadd_implicit_on_curvesr?   š   s‘   € õ 	ˆQ‰Œ€AØ€EÝ˜‘F”F˜Q‘J€MÝ�1�mÑ$Ô$ð ð ˆØ�ŒtˆØ��Q‘ŒxˆØ�T˜D‘[ CÑ'Ñ'ˆØ	�Š��Q‘˜‘ Ñ#Ô#Ð#Ø�‰
ˆˆØ€Hr   c                 ó,   — t          d|›d| ›�¦  «        ‚)Nz1Quadratic splines must connect end-to-start; got z then ©Ú
ValueError)ÚpointÚprevious_points     r   Ú_raise_incompatible_pointrE   ²   s(   € Ý
Ø]¸NÐ]Ð]ÐTYÐ]Ð]ñô ð r   c                 óJ   — t          | ¦  «        dk     rt          d¦  «        ‚d S )Nr   z0Quadratic splines must contain at least 3 points)r;   rB   )Úsplines    r   Ú_validate_spline_lengthrH   ¸   s'   € Ý
ˆ6�{„{�Q‚€ÝÐKÑLÔLÐLð €r   c                 ó0   — | dk    rt          d¦  «        ‚d S )Nr   z!max_err must be greater than zerorA   )Úmax_errs    r   Ú_validate_positive_tolerancerK   ½   s!   € Ø�!‚|€|ÝÐ<Ñ=Ô=Ð=ð €|r   )ÚcostÚ
is_complexr   FÚquadsrJ   Ú	all_cubicÚreturn.c                 óØ  — | sg S t          |¦  «         | D ]}t          |¦  «         Œt          | d         d         ¦  «        t          u }|sd„ | D ¦   «         } | d         d         g}dg}d}| D ]Û}|d         |d         k    rt	          |d         |d         ¦  «         t          t          |¦  «        dz
  ¦  «        D ]1}	|dz  }|                     |¦  «         |                     |¦  «         Œ2t          |¦  «        dd…         }
| 	                    ¦   «          | 
                    |
¦  «         |dz  }|                     |¦  «         ŒÜt          ||||¦  «        }|sd„ |D ¦   «         }|S )aÇ  Converts a connecting list of quadratic splines to a list of quadratic
    and cubic curves.

    A quadratic spline is specified as a list of points.  Either each point is
    a 2-tuple of X,Y coordinates, or each point is a complex number with
    real/imaginary components representing X,Y coordinates.

    The first and last points are on-curve points and the rest are off-curve
    points, with an implied on-curve point in the middle between every two
    consequtive off-curve points.

    Returns:
        The output is a list of tuples of points. Points are represented
        in the same format as the input, either as 2-tuples or complex numbers.
        If ``quads`` is empty, returns an empty list.

        Each tuple is either of length three, for a quadratic curve, or four,
        for a cubic curve.  Each curve's last point is the same as the next
        curve's first point.

    Args:
        quads: quadratic splines

        max_err: absolute error tolerance; defaults to 0.5

        all_cubic: if True, only cubic curves are generated; defaults to False

    Raises:
        ValueError: if an input spline has fewer than 3 points, or if adjacent
        splines do not connect end-to-start.
    r   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r   )Úcomplex)r(   ÚxÚys      r   r)   z2quadratic_to_curves.<locals>.<listcomp>.<listcomp>ò   s$   € Ð0Ð0Ð0¡F Q¨•'˜!˜Q‘-”-Ð0Ð0Ð0r   r   )r(   r=   s     r   r)   z'quadratic_to_curves.<locals>.<listcomp>ò   s'   € Ð@Ð@Ð@°QÐ0Ð0¨aÐ0Ñ0Ô0Ð@Ð@Ð@r   r%   r*   r&   Nc                 ó@   — g | ]}t          d „ |D ¦   «         ¦  «        ‘ŒS )c              3   ó2   K  — | ]}|j         |j        fV — Œd S ©N)ÚrealÚimag)r(   Úcs     r   ú	<genexpr>z1quadratic_to_curves.<locals>.<listcomp>.<genexpr>  s+   è è € Ð8Ð8¨Q˜œ ¤Ð(Ð8Ð8Ð8Ð8Ð8Ð8r   )Útuple)r(   r1   s     r   r)   z'quadratic_to_curves.<locals>.<listcomp>  s/   € ÐMÐMÐM¸U•%Ð8Ð8°%Ð8Ñ8Ô8Ñ8Ô8ÐMÐMÐMr   )rK   rH   ÚtyperT   rE   r+   r;   r,   r?   ÚpopÚextendÚspline_to_curves)rN   rJ   rO   rG   rM   r>   ÚcostsrL   r=   r5   Úqqr-   s               r   r	   r	   Â   sž  € ðP ð Øˆ	Ý  Ñ)Ô)Ð)Øð (ð (ˆÝ Ñ'Ô'Ð'Ð'å�e˜A”h˜q”kÑ"Ô"¥gÐ-€JØð AØ@Ð@¸%Ð@Ñ@Ô@ˆà	ˆqŒ�!Œˆ€AØˆC€EØ€DØð ð ˆØˆRŒ5�A�a”DŠ=ˆ=Ý% a¨¤d¨A¨b¬EÑ2Ô2Ð2Ý•s˜1‘v”v ‘zÑ"Ô"ð 	ð 	ˆAØ�A‰IˆDØ�LŠL˜ÑÔÐØ�LŠL˜ÑÔÐÐÝ# AÑ&Ô& q r rÔ*ˆØ�	Š	‰ŒˆØ	�Š�‰ŒˆØ�‰	ˆØ�Š�TÑÔÐÐå˜a ¨°Ñ;Ô;€Fàð NØMÐMÀfÐMÑMÔMˆØ€Mr   ÚSolution)Ú
num_pointsÚerrorÚstart_indexÚis_cubicr5   Újr   r   Úi_sol_countÚj_sol_countÚthis_sol_countr
   Úerrrg   Úi_sol_errorÚj_sol_errorri   r3   r   r   r   r   ÚvÚuc           
      óŽ  ‡ — t          ‰ ¦  «        dk    s
J d¦   «         ‚ˆ fd„t          dt          ‰ ¦  «        dz
  d¦  «        D ¦   «         }t          ¦   «         }t          dt          |¦  «        ¦  «        D ]€}||dz
           d         }||         d         }||         d         }	t          ||z
  ¦  «        t          |	|z
  ¦  «        z   |t          |	|z
  ¦  «        z   k    r|                     |¦  «         Œ�t          dddd¦  «        g}
t          t          |¦  «        dz  dz   ddd¦  «        }d}t          dt          |¦  «        dz   ¦  «        D �]ï}|}t          ||¦  «        D �]½}|
|         j        |
|         j        }}|sH|d|z  dz
           |d|z           z
  dz   }||z   }|}t          ||||z
  d¦  «        }||k     r|}|dk    rŒg	 t          ||||z
  ¦  «        \  }}n# t          $ r Y ŒŒw xY wt          g |¢|¢R Ž }g }d}t          |¦  «        D ][\  }}|||z            }t          |d         |d         z
  ¦  «        }t          ||¦  «        }||k    r n|                     |¦  «         Œ\||k    r�Œt          |¦  «        D ]V\  }}|||z            }t          d„ t          ||¦  «        D ¦   «         ¦  «        \  }}}	}t!          |||	||¦  «        s|dz   } nŒW||k    r�Œƒ|dz   }t          ||¦  «        }t          ||||z
  d	¦  «        }||k     r|}|dk    r n�Œ¿|
                     |¦  «         ||v r|}�Œñg }g } t          |
¦  «        dz
  }|rK|
|         j        |
|         j        }"}!|                     |¦  «         |                      |"¦  «         ||!z  }|°Kg }#d}t'          t)          t          || ¦  «        ¦  «        ¦  «        D ]p\  }}"|"r.|#                     t          ||||z
  ¦  «        d         ¦  «         n9t          ||¦  «        D ](}|#                     ‰ |dz  |dz  dz   …         ¦  «         Œ)|}Œq|#S )
aF  
    q: quadratic spline with alternating on-curve / off-curve points.

    costs: cumulative list of encoding cost of q in terms of number of
      points that need to be encoded.  Implied on-curve points do not
      contribute to the cost. If all points need to be encoded, then
      costs will be range(1, len(q)+1).
    r   z+quadratic spline requires at least 3 pointsc                 ó8   •— g | ]}t          ‰||d z   …         Ž ‘ŒS )r   )r   )r(   r5   r>   s     €r   r)   z$spline_to_curves.<locals>.<listcomp>2  s8   ø€ ð ð ð Ø-.Õ˜1˜Q  Q¡˜Yœ<Ð(ðð ð r   r   r&   r%   Fc              3   ó&   K  — | ]\  }}||z
  V — Œd S rY   r   )r(   rq   rr   s      r   r]   z#spline_to_curves.<locals>.<genexpr>p  s*   è è € Ð&LÐ&L±°°A q¨1¡uÐ&LÐ&LÐ&LÐ&LÐ&LÐ&Lr   T)r;   r+   Úsetr   Úaddre   rf   rg   r2   ÚZeroDivisionErrorr   Ú	enumerateÚmaxr,   r^   Úzipr   rh   ri   Úreversedr:   )$r>   rc   r
   rO   Úelevated_quadraticsÚforcedr5   r   r   r   ÚsolsÚ
impossibler   Úbest_solrj   rl   rp   Ú
this_countrk   ro   Úi_solr1   r.   Úreconstructed_iterÚreconstructedrg   r   ÚreconstÚorigrn   r   ÚsplitsÚcubicr3   ri   r-   s$   `                                   r   rb   rb     s2  ø€ õB ˆq‰6Œ6�QŠ;ˆ;ˆ;ÐE‰;Œ;ˆ;ðð ð ð Ý27¸½3¸q¹6¼6ÀA¹:ÀqÑ2IÔ2Iðñ ô Ðõ
 ‰UŒU€FÝ�1•cÐ-Ñ.Ô.Ñ/Ô/ð ð ˆØ   Q¡Ô'¨Ô*ˆØ  Ô# AÔ&ˆØ  Ô# AÔ&ˆÝˆr�B‰w‰<Œ<�#˜b 2™g™,œ,Ñ&¨µS¸¸b¹±\´\Ñ)AÒAÐAØ�JŠJ�q‰MŒMˆMøõ �Q˜˜1˜eÑ$Ô$Ð%€DÝ�#Ð1Ñ2Ô2°QÑ6¸Ñ:¸A¸qÀ%ÑHÔH€JØ€EÝ�1•cÐ-Ñ.Ô.°Ñ2Ñ3Ô3ð Bñ BˆØˆÝ�u˜a‘”ð <	ñ <	ˆAØ'+¨A¤wÔ'9¸4À¼7¼=˜ˆKàð à" 1 q¡5¨1¡9Ô-°°a¸!±e´Ñ<¸qÑ@�
Ø)¨JÑ6�Ø)�Ý  ¨k¸1¸q¹5À%ÑHÔH�Ø˜8Ò#Ð#Ø$�Hà ’?�?àðÝ(Ð)<¸aÀÀQÁÑGÔG‘	��r�røÝ$ð ð ð Ø�ðøøøõ "0Ð!<°Ð!<¸Ð!<Ð!<Ð!<ÐØˆMð ˆEÝ'Ð(:Ñ;Ô;ð .ð .‘
��7Ø*¨1¨q©5Ô1�Ý˜' !œ* t¨A¤wÑ.Ñ/Ô/�Ý˜E 3™œ�Ø˜9Ò$Ð$Ø�EØ×$Ò$ WÑ-Ô-Ð-Ð-Ø�yÒ Ð áõ (¨Ñ6Ô6ð ð ‘
��7Ø*¨1¨q©5Ô1�Ý!&Ð&LÐ&L½¸WÀdÑ9KÔ9KÐ&LÑ&LÔ&LÑ!LÔ!L‘��B˜˜Bå0°°R¸¸RÀÑKÔKð Ø%¨™M�EØ�Eðð �yÒ Ð áð &¨™/ˆKÝ˜k¨5Ñ1Ô1ˆKÝ˜[¨+°q¸1±u¸dÑCÔCˆEØ�xÒÐØ �à˜aÒÐà�ñ  ð 	�Š�HÑÔÐØ�ˆ;ˆ;ØˆEùð €FØ€EÝˆD‰	Œ	�A‰€AØ
ð Ø˜qœ'Ô-¨t°A¬wÔ/?ˆxˆØ�Š�aÑÔÐØ�Š�XÑÔÐØ	ˆU‰
ˆð	 ð ð
 €FØ	€AÝ¥¥S¨°Ñ%7Ô%7Ñ 8Ô 8Ñ9Ô9ð ð ‰ˆˆ8Øð 	4Ø�MŠM�,Ð':¸A¸qÀ1¹uÑEÔEÀaÔHÑIÔIÐIÐIå˜1˜a‘[”[ð 4ð 4�Ø—’˜a  A¡¨¨A©°©	Ð 1Ô2Ñ3Ô3Ð3Ð3Øˆˆà€Ms   ÇG'Ç'
G4Ç3G4c                  ó^  — ddl m}  ddlm} d}|dz  } | ¦   «         } |||¦  «        }t	          d||fz  ¦  «         t	          dt          |¦  «        z  ¦  «         t          |g|¦  «        }t	          dt          |¦  «        z  ¦  «         t	          d	|¦  «         t	          d
|¦  «         d S )Nr   )Úgenerate_curve)Úcurve_to_quadraticgš™™™™™©?r%   z'cu2qu tolerance %g. qu2cu tolerance %g.z+One random cubic turned into %d quadratics.z-Those quadratics turned back into %d cubics. zOriginal curve:zReconstructed curve(s):)ÚfontTools.cu2qu.benchmarkr‹   ÚfontTools.cu2qurŒ   Úprintr;   r	   )r‹   rŒ   r
   Úreconstruct_tolerancer1   Ú
quadraticsr-   s          r   Úmainr’   ž  sä   € Ø8Ð8Ð8Ð8Ð8Ð8Ø2Ð2Ð2Ð2Ð2Ð2à€IØ%¨™MÐØˆNÑÔ€EØ#Ð# E¨9Ñ5Ô5€JÝ	Ø1°YÐ@UÐ4VÑVñô ð õ 
Ð
7½#¸j¹/¼/Ñ
IÑJÔJÐJÝ  * Ð/DÑEÔE€FÝ	Ð
9½CÀ¹K¼KÑ
GÑHÔHÐHÝ	Ð
˜UÑ#Ô#Ð#Ý	Ð
# VÑ,Ô,Ð,Ð,Ð,r   Ú__main__)r   Fr   )%r   ÚAttributeErrorÚImportErrorÚfontTools.miscÚcompiledÚCOMPILEDÚfontTools.misc.bezierToolsr   Úcollectionsr   ÚmathÚtypingr   r   r   Ú__all__ÚcfuncÚreturnsÚintÚlocalsÚdoublerT   r   r   r2   r?   ÚfloatÚPointrE   rH   rK   Úboolr	   re   rb   r’   Ú__name__r   r   r   ú<module>r§      sã  ðð&&Ø€M€M€M€MøØ˜Ð$ð &ð &ð &à%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&øøøð Œ?€à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€ðð ð ð ð ð ð ð ð ð ð !Ð
!€ð „Ø€„�”
ÑÔØ€„ØŒmØ„~Ø„~Ø„~Ø„~ðñ ô ð €„�6”>¨&¬.Ð9Ñ9Ô9ðWð Wñ :Ô9ñô ñ Ôñ „ðWð@ €„Ø„~Ø„~Ø„~ØŒ>ð	ñ ô ð
ð 
ñô ð
ð „Ø€„Ø
Œ*Ø„jØ„jØŒ}ØŒmØ
Œ-Ø„mØ„~Ø„~Ø„~Ø„~ðñ ô ð$ð $ñô ñ „ð$ðN €„Ø
Œ*Ø”*Ø„jØ	ŒØ	ŒØ„~ðñ ô ð
ð 
ñô ð
ð 	ˆe�E˜5�LÔ! 7Ð*Ô+€ðð ð ðMð Mð Mð
>ð >ð >ð
 €„Ø	ŒØŒzðñ ô ð ØðBð BØ��U”ÔðBàðBð ðBð 
ˆ%��s�
Ô
Ôð	Bð Bð Bñ	ô ðBðJ ˆ:�jÐ"TÐ"TÐ"TÑUÔU€ð €„ð ð ð Ø„j€jðà„j€jðð „j€jðð Œ*ˆ*ð	ð
 ”
�
ðð ”
�
ðð ”:�:ðð Œmˆmðð 	Œˆðð Œ-ˆ-ðð ”�ðð ”�ðð Œjˆjðð ŒZˆZðð Œ*ˆ*ðð  „~€~ð!ð" „~€~ð#ð$ „~€~ð%ð& „~€~ð'ð( „n€nð)ð* „n€nð+ð.vð vð vñ/ô ð.vðr-ð -ð -ð$ ˆzÒÐØ€D�F„F€F€F€Fð Ðs   ‚ ‡–