
    hN	                    d    S SK Jr  S SKJrJr  S SKJrJrJr  SS/r	    S	S jr
 S
   SS jjrg)    )annotations)IterableSequence)Vec3Bezier4PUVeccubic_bezier_interpolation#tangents_cubic_bezier_interpolationc              #    ^#    SSK Jn  [        R                  " U 5      m[	        T5      S:  a  g[	        T5      S-
  nS/U-  nS/U-  nS/U-  nSUS'   S	X2S-
  '   SXBS-
  '   TS   STS   -  -   /nUR                  U4S
 j[        SUS-
  5       5       5        UR                  STUS-
     -  TU   -   5        U" XCU/U5      n[        R                  " UR                  5       5      n[        TSS USS 5       V	V
s/ s H  u  pU	S-  U
-
  PM     nn	n
UR                  XS-
     TU   -   S-  5        [        TXTSS 5       H  n[        U5      v   M     gs  sn
n	f 7f)u   Returns an interpolation curve for given data `points` as multiple cubic
Bézier-curves. Returns n-1 cubic Bézier-curves for n given data points,
curve i goes from point[i] to point[i+1].

Args:
    points: data points

r   )tridiagonal_matrix_solver   N   g      @g      ?       @g      @c              3  L   >#    U  H  nS S TU   -  TUS-      -   -  v   M     g7f)r   r   N ).0ipntss     Q/var/www/html/env/lib/python3.13/site-packages/ezdxf/math/bezier_interpolation.py	<genexpr>-cubic_bezier_interpolation.<locals>.<genexpr>*   s/      5FsT!W}tAE{*+5Fs   !$g       @)ezdxf.math.linalgr   r   tuplelenextendrangeappendlistrowszipr   )pointsr   numbacpoints_vectorsolutioncontrol_points_1pcpcontrol_points_2	defpointsr   s                @r   r	   r	      s     < ::fD
4y1}
d)a-C 
A	A	AAaDAAgJAAgJ !WsT!W},-M 5:1cAg5F  tC!G},tCy89 )!MBHyy1"%d12h0@0D"E"EC""E   -Ag6cBcIJ$qr(	 y!!s   C;E>EAEc                p   [        U 5      S:  a  [        S5      e[        [        U 5      5      nU Vs/ s H!  o3R                  S   UR                  S   -
  PM#     nnUS   R                  nUR                  US   US   -
  5        U(       a  U Vs/ s H  ofR                  5       PM     nnU$ s  snf s  snf )Nr   zAt least 3 points requiredr   r      )r   
ValueErrorr   r	   control_pointsr   	normalize)
fit_pointsr2   curvescurvetangentslast_pointsts          r   r
   r
   =   s     :566,Z89FIOIO		a	 5#7#7#:	:   *++KOOKN[^34+348aKKM84O 5s   (B.B3N)r!   zIterable[UVec]returnzIterable[Bezier4P[Vec3]])T)r3   zSequence[Vec3]r9   z
list[Vec3])
__future__r   typingr   r   
ezdxf.mathr   r   r   __all__r	   r
   r       r   <module>r?      sP    # % + + ()N
O."."."d +/r>   