Ë
    W¨œjÚ  ã                   ón   — d Z ddlmZmZmZ ddlmZmZmZ ddl	m
Z
 ddlmZ dd„Zdd„Zd	„ Zdd
„Zdd„Zy)zNThis submodule contains functions related to smoothing paths of Bezier
curves.é    )ÚdivisionÚabsolute_importÚprint_functioné   )ÚPathÚCubicBezierÚLine)Úisclose)Údisvgc                 ó0  — t        t        | «      «      D ]  }| |dz
  t        | «      z     j                  d«      }| |   j                  d«      }|j                  |j                  z  |j                  |j                  z  z   }t        |dz
  «      |kD  sŒ y y)Nr   r   FT)ÚrangeÚlenÚunit_tangentÚrealÚimagÚabs)ÚpathÚtolÚidxÚuÚvÚu_dot_vs         úg/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/svgpathtools/smoothing.pyÚis_differentiabler      s†   € Ü”S˜“YÖˆØ�#�a‘%œ3˜t›9Ñ$Ñ%×2Ñ2°1Ó5ˆØ�‰I×"Ñ" 1Ó%ˆØ—&‘&˜Ÿ™‘- !§&¡&¨¯©¡-Ñ/ˆÜˆw˜‰{Ó˜cÓ!Ùð  ð ó    c                 ó®  — g }t        t        | «      «      D ]ª  }|dk(  r| j                  «       sŒ	 | |dz
  t        | «      z     j                  d«      }| |   j                  d«      }|j                  |j                  z  |j
                  |j
                  z  z   }d}|st        dz
  «      |kD  sŒš|j                  |«       Œ¬ |S # t        $ r d}Y Œ6w xY w)zEreturns indices of segments that start on a non-differentiable joint.r   r   FT)	r   r   Úisclosedr   r   r   Ú
ValueErrorr   Úappend)r   r   Ú	kink_listr   r   r   r   Úflags           r   Úkinksr"      sÏ   € à€IÜ”S˜“YÖˆØ�!Š8˜DŸM™MœOØð	Ø�c˜A‘g¤ T£Ñ*Ñ+×8Ñ8¸Ó;ˆAØ�S‘	×&Ñ& qÓ)ˆAØ—f‘f˜QŸV™V‘m a§f¡f¨Q¯V©V¡mÑ3ˆGØˆDñ ”3�w ‘{Ó# cÓ)Ø×Ñ˜SÕ!ð  ð Ðøô ò 	ØŠDð	ús   ±A,CÃCÃCc                 ó”   — dt        |«      ›d|›�}t        | |D �cg c]  }| |   j                  ‘Œ c}¬«       t        |«      ‚c c}w )NÚ
z÷ kinks have been detected at that cannot be smoothed.
To ignore these kinks and fix all others, run this function again with the second argument 'ignore_unfixable_kinks=True' The locations of the unfixable kinks are at the beginnings of segments: )Únodes)r   r   ÚstartÚ	Exception)Ú_pathÚ
_kink_listÚmesr   s       r   Ú_report_unfixable_kinksr+   *   sI   � ô
 ! �_©jð	:€Cô
 
ˆ%±JÓ?±J¨S˜˜c™
×(Ó(°JÑ?Õ@Ü
�C‹.Ðùò @s   œA
c                 ó  — | j                   |j                  k(  sJ ‚d|k  sJ ‚d|cxk  rdk  sJ ‚ J ‚| j                   }| j                  d«      }|j                  d«      }|dz  }t        |t        |j	                  «       | j	                  «       «      dz  «      }t        | t        «      r‘t        |t        «      r�	 d|z
  |z  }	t        |||z  z
  |||	dz  z
  |z  z
  |||	dz  z
  |z  z   |||z  z   «      }
t        | j                  |
j                  «      }t        |
j                   |j                   «      }||
g|fS t        | t        «      rX	 d|z
  |z  }	t        |||z  z
  ||	dz  |z
  |z  z   ||	dz  |z  z
  |«      }
t        | j                  |
j                  «      }||
g|fS t        |t        «      rU|j                  «       | j                  «       ||f}t        |Ž \  }}}|d   j                  «       }
| |
g|j                  «       fS | j                  | j	                  «       |dz  z
  «      }|j                  |dz  «      }| j                  d|«      }|j                  |d«      }t        |j                   |«      }t        ||j                  «      }||||f}t        |Ž \  }}}||||f}t        |Ž \  }}}||||f}t        |Ž \  }}}||gz   |z   |gz   |z   }
||
|fS #  | j                  d«      }Y �Œ£xY w#  |j                  d«      }Y �Œ«xY w)	aR   See Andy's notes on
    Smoothing Bezier Paths for an explanation of the method.
    Input: two segments seg0, seg1 such that seg0.end==seg1.start, and
    jointsize, a positive number

    Output: seg0_trimmed, elbow, seg1_trimmed, where elbow is a cubic bezier
        object that smoothly connects seg0_trimmed and seg1_trimmed.

    r   é   r   g§èH.ÿï?g-Cëâ6?é   é   é   )Úendr&   r   ÚminÚlengthÚ
isinstancer	   r   ÚreversedÚsmoothed_jointÚilengthÚcropped)Úseg0Úseg1ÚmaxjointsizeÚ	tightnessÚqr   ÚwÚmax_aÚaÚbÚelbowÚseg0_trimmedÚseg1_trimmedÚargsÚrseg1_trimmedÚrelbowÚrseg0Út0Út1Ú	seg0_lineÚ	seg1_lineÚdummyÚelbow0Úseg0_line_trimmedÚseg1_line_trimmedÚelbow1Úelbowqs                              r   r6   r6   4   s=  € ð �8‰8�t—z‘zÒ!Ð!Ð!Øˆ|ÒÐÐØˆyÔ˜1ÒÐÑÐÐà�‰€Aà×Ñ˜qÓ!ˆà×Ñ˜qÓ!ˆð ˜1Ñ€EÜˆE”3�t—{‘{“} d§k¡k£mÓ4°rÑ9Ó:€AÜ�$œÔ¤*¨T´4Ô"8ð		ð. �‰]˜AÑˆÜ˜A  !¡™G Q¨!¨a°©c©'°1©¡_°a¸1¸qÀ¹s¹7ÀA¹+±oÀqÈ1ÈQÉ3ÁwÓOˆÜ˜DŸJ™J¨¯©Ó4ˆÜ˜EŸI™I t§x¡xÓ0ˆØ˜e˜W lÐ2Ð2Ü	�Dœ$Ô	ð		ð �‰]˜AÑˆä˜A  !¡™G Q¨!¨A©#°©'°1©¡_°a¸!¸A¹#¸a¹%±iÀÓCˆÜ˜DŸJ™J¨¯©Ó4ˆØ˜e˜W dÐ*Ð*Ü	�Dœ$Ô	Ø—‘“ §¡£°,À	ÐJˆÜ'5°tÐ'<Ñ$ˆ�v˜uØ�q‘	×"Ñ"Ó$ˆØ�e�W˜m×4Ñ4Ó6Ð6Ð6ð �\‰\˜$Ÿ+™+›-¨!¨A©#Ñ-Ó.ˆØ�\‰\˜!˜A™#ÓˆØ—|‘| A rÓ*ˆØ—|‘| B¨Ó*ˆÜ˜×)Ñ)¨1Ó-ˆ	Ü˜˜L×.Ñ.Ó/ˆ	à˜i¨°yÐAˆÜ+9¸4Ð+@Ñ(ˆˆvÐ(à˜<¨°yÐAˆÜ+9¸4Ð+@Ñ(Ð˜6 5à!Ð#4°lÀIÐNˆÜ7EÀtÐ7LÑ4Ð˜6Ð#4àÐ+Ð,Ñ,¨vÑ5Ð9JÐ8KÑKÈfÑTˆØ˜U LÐ0Ð0øð_ ,�×!Ñ! (Ó+‹Aûà'�×!Ñ! $Ó'‹Aús   ¿K ÁK6 ËK3Ë6Lc                 ó  — t        | «      dk(  r| S | j                  «       sJ ‚g }| d   g}t        t        | «      «      D �]  }|t        | «      dz
  k(  r| j                  «       sŒ&|d   }n| |dz      }|d   }	 |j	                  d«      }	|j	                  d«      }
d}|s/t        	
«      r#|t        | «      dz
  k7  r|j                  |«       Œ�|dz   t        | «      z  }|s0t        	 
«      r#|j                  |«       |j                  |«       ŒÒ||||f}t        |Ž \  }}}||d<   ||z  }|t        | «      dz
  k(  r||d<   �Œ|j                  |«       �Œ |r|st        | |«       t        |Ž S # t
        $ r d}Y Œáw xY w)z1returns a path with no non-differentiable joints.r   r   éÿÿÿÿFT)r   Úiscontinuousr   r   r   r   r
   r   r6   r+   r   )r   r;   r<   Úignore_unfixable_kinksÚsharp_kinksÚnew_pathr   r:   r9   Úunit_tangent0Úunit_tangent1r!   Úkink_idxrE   Únew_seg0Ú
elbow_segsÚnew_seg1s                    r   Úsmoothed_pathr_   —   sž  € ä
ˆ4ƒy�A‚~Øˆà×ÑÔÐÐà€KØ�Q‘ˆy€HÜ”S˜“Y×ˆØ”#�d“)˜A‘+ÒØ—=‘=”?Øà ‘{‘à˜˜a™‘=ˆDØ˜‰|ˆð	Ø ×-Ñ-¨aÓ0ˆMØ ×-Ñ-¨aÓ0ˆMØˆDñ œ ¨}Ô=Ø”c˜$“i ‘kÒ!Ø—‘ Ô%Øà˜a™¤3 t£9Ñ,ˆHÙœG ] N°MÔBà—‘ Ô%Ø×"Ñ" 8Õ,à˜d L°)Ð<�Ü1?ÀÐ1FÑ.�˜* hØ'�˜‘Ø˜JÑ&�Øœ#˜d›) a™-Ò'Ø"*�H˜Q“Kà—O‘O HÖ-ðG  ñL Ñ1Ü  kÔ2ä�ˆ?Ðøô7 ò 	ØŠDð	ús   Á9$E1Å1E?Å>E?N)g:Œ0âŽyE>)r/   ç×£p=
×ÿ?)r/   r`   F)Ú__doc__Ú
__future__r   r   r   r   r   r   r	   Ú	misctoolsr
   Ú	paths2svgr   r   r"   r+   r6   r_   © r   r   Ú<module>rf      s<   ðñ÷ AÑ @÷ *Ñ )Ý Ý óóò&ó`1ôF2r   