
    OgN	                    ^    d dl mZ d dlmZmZ d dlmZmZmZ ddgZ		 	 	 	 d	dZ
	 d
	 	 	 ddZy)    )annotations)IterableSequence)Vec3Bezier4PUVeccubic_bezier_interpolation#tangents_cubic_bezier_interpolationc              #    K   ddl m} t        j                  |       t	              dk  ryt	              dz
  }dg|z  }dg|z  }dg|z  }d|d<   d	||dz
  <   d||dz
  <   d   dd   z  z   g}|j                  fd
t        d|dz
        D               |j                  d|dz
     z  |   z           ||||g|      }t        j                  |j                               }t        dd |dd       D 	
cg c]  \  }	}
|	dz  |
z
   }}	}
|j                  ||dz
     |   z   dz         t        ||dd       D ]  }t        |        yc c}
}	w w)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  F   K   | ]  }d d |   z  |dz      z   z    yw)r   r   N ).0ipntss     d/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/math/bezier_interpolation.py	<genexpr>z-cubic_bezier_interpolation.<locals>.<genexpr>*   s0      01sT!W}tAE{*+s   !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AcAgJAcAgJ !WsT!W},-M 5:1cAg5F  tC!G},tCy89 )!QMBHyy1"%d12h0@0D"EBC"  -cAg6cBcIJ 0$qr( "	 y!!"s   C:E=EAEc                \   t        |       dk  rt        d      t        t        |             }|D cg c]!  }|j                  d   |j                  d   z
  # }}|d   j                  }|j                  |d   |d   z
         |r|D cg c]  }|j                          }}|S c c}w c c}w )Nr   zAt least 3 points requiredr   r      )r   
ValueErrorr   r	   control_pointsr   	normalize)
fit_pointsr1   curvescurvetangentslast_pointsts          r   r
   r
   =   s     :566,Z89FIO@E		a	 5#7#7#:	:H  *++KOOKN[^34+34aAKKM44O 5s   &B$	B)N)r    zIterable[UVec]returnzIterable[Bezier4P[Vec3]])T)r2   zSequence[Vec3]r8   z
list[Vec3])
__future__r   typingr   r   
ezdxf.mathr   r   r   __all__r	   r
   r       r   <module>r>      sP    # % + + ()N
O."."."d +/r=   