
    h#                        S SK Jr  S SKJrJrJr  S SKrS SKrSSKJ	r	J
r
  SSKJr  SS/r " S	 S5      r " S
 S5      rg)    )annotations)IterableSequenceOptionalN   )Vec3NULLVEC)binomial_coefficientBasis	Evaluatorc                      \ rS rSrSrSr S       SS jjr\SS j5       r\SS j5       r	\SS j5       r
\SS	 j5       r\SS
 j5       r\SS j5       rSS jrSS jrSS jrSS jrSSS jjrSrg)r      zImmutable Basis function class.)_knots_weights_order_countNc                v   [        U5      U l        [        U=(       d    / 5      U l        [        U5      U l        [        U5      U l        [        U R                  5      nUS:w  a  XPR
                  :w  a  [        S5      e[        U R                  5      U R                  U R
                  -   :w  a  [        S5      eg )Nr   zinvalid weight countzinvalid knot count)tupler   r   intr   r   len
ValueError)selfknotsordercountweightslen_weightss         E/var/www/html/env/lib/python3.13/site-packages/ezdxf/math/_bspline.py__init__Basis.__init__   s     Elgm,u:u: $--(!{{ :344t{{t{{T[[88122 9    c                     U R                   S   $ )Nr   r   s    r   max_tBasis.max_t(   s    {{2r!   c                    U R                   $ Nr   r%   s    r   r   Basis.order,       {{r!   c                     U R                   S-
  $ )Nr   r*   r%   s    r   degreeBasis.degree0   s    {{Qr!   c                    U R                   $ r)   r$   r%   s    r   r   Basis.knots4   r,   r!   c                    U R                   $ r)   )r   r%   s    r   r   Basis.weights8   s    }}r!   c                ,    [        U R                  5      $ )z?Returns ``True`` if curve is a rational B-spline. (has weights))boolr   r%   s    r   is_rationalBasis.is_rational<   s     DMM""r!   c                    U R                  U5      nU R                  S-
  nX#-
  nU R                  U-
  S-
  nU R                  X!5      nS/U-  U-   S/U-  -   $ )z"Returns the expanded basis vector.r           )	find_spanr   r   basis_funcs)r   tspanpfrontbackbasiss          r   basis_vectorBasis.basis_vectorA   sc    ~~a KK!O{{T!A%  )&3%$,77r!   c                    U R                   nU R                  nXU   :  a  US-
  $ U R                  S-
  nX$   S:X  a  [        R                  " X!XC5      S-
  $ SnX%   U::  a  XS:  a  US-  nX%   U::  a  XS:  a  M  US-
  $ )zDetermine the knot span index.r   r9   r   )r   r   r   bisectbisect_right)r   ur   r   r>   r=   s         r   r:   Basis.find_spanJ   s     e19KK!O8s?
 &&u:Q>>D+"t|	 +"t|!8Or!   c                   U R                   nU R                  nS/U-  n[        U5      n[        U5      nSUS'   [        SU5       Hm  nX$[	        SUS-   U-
  5         -
  Xh'   XAU-      U-
  Xx'   Sn	[        U5       H0  n
XZ   XzS-      XhU
-
     -   -  nXU
S-      U-  -   XZ'   XhU
-
     U-  n	M2     XU'   Mo     U R
                  (       a  U R                  XQ5      $ U$ )Nr9         ?r   r   )r   r   listrangemaxr6   span_weighting)r   r=   rG   r   r   Nleftrightjsavedrtemps               r   r;   Basis.basis_funcs`   s    EEMAwQ!q%AAtax!| 455DGAX*EHE1XtuU|dq5k9:QU|d22Ud*  aD ! &&q//Hr!   c                
   [        U5      nU R                  X R                  -
  S-   US-    n[        X5       VVs/ s H	  u  pVXV-  PM     nnn[	        U5      nUS:X  a  S/U-  $ U V	s/ s H  oU-  PM	     sn	$ s  snnf s  sn	f )Nr   r9   )r   r   r   zipsum)
r   nbasisr=   sizer   nbwproductssr>   s
             r   rN   Basis.span_weightingv   s    6{--{{ 2Q 6B(+F(<=(<urBF(<=M Cxut|FX-FX!eX-FF >-Fs   A:)B c                t   U R                   nUS-
  n[        X55      nU R                  nS/U-  nS/U-  n[        U5       V	s/ s H	  n	S/U-  PM     n
n	[        SU5       H  nX&[	        SUS-   U-
  5         -
  X{'   XaU-      U-
  X'   Sn[        U5       HE  nXS-      X{U-
     -   X   U'   X   US-
     X   U   -  nXUS-      U-  -   X   U'   X{U-
     U-  nMG     XU   U'   M     [        U5       V	s/ s H	  n	S/U-  PM     nn	[        U5       H  nX   U   US   U'   M     S/U-  S/U-  /n[        U5       GH  nSnSnSUS   S'   [        SUS-   5       H  nSnUU-
  nUU-
  nUU:  a+  UU   S   U
US-      U   -  UU   S'   UU   S   U
U   U   -  nUS:  a  SnOU* nUS-
  U::  a  US-
  nOX]-
  n[        UUS-   5       HC  nUU   U   UU   US-
     -
  U
US-      UU-      -  UU   U'   UUU   U   U
UU-      U   -  -  nME     UU::  a1  UU   US-
     * U
US-      U   -  UU   U'   UUU   U   X   U   -  -  nUUU   U'   UUnnM     GM     [        U5      n[        SUS-   5       H,  n[        U5       H  nUU   U==   U-  ss'   M     XU-
  -  nM.     US US-    $ s  sn	f s  sn	f )Nr   rJ   r   r9   r#   )r   minr   rL   rM   float)r   r=   rG   nr   r>   r   rP   rQ   _ndurR   rS   rT   rU   derivativesas1s2kdrkpkj1j2s                            r   basis_funcs_derivativesBasis.basis_funcs_derivatives}   s   AIIuu}&+El3luu}l3q%AAtax!| 455DGAX*EHE1X!a%L4A;6q	va!e}svay0!1q5\D%89q	Ud*  F1I ! /4El;luu}l;uA #q	KN1  UU]SEEM*uABBAaDG 1a!e_UU6 uQx#b1f+b/9AbE!H"a3r72;.A8BBEb=QBBr26*A !"a1R5Q< 73rAv;rAv;NNAbE!H2qCQKO33A + 7 !"a!e}s26{1~=AbE!H2qCF2J..A$%Aq! RBB1 % D !Hq!a%A5\Aq!Q&! "QJA ! 7QU##{ 4  <s   J06J5)r   r   r   r   r)   )r   Iterable[float]r   r   r   r   r   zOptional[Sequence[float]])returnrc   )rt   r   )rt   ztuple[float, ...])rt   r5   )r<   rc   rt   list[float])rG   rc   rt   r   )r=   r   rG   rc   rt   ru   )rZ   ru   r=   r   rt   ru   r   )r=   r   rG   rc   rd   r   )__name__
__module____qualname____firstlineno____doc__	__slots__r   propertyr&   r   r.   r   r   r6   rB   r:   r;   rN   rq   __static_attributes__ r!   r   r   r      s    ):I .233 3 	3
 +3&           # #8,,GF$ F$r!   c                  f    \ rS rSrSrSS/rSS jrSS jrSS jrSSS jjr	 S     SS	 jjr
S
rg)r      z4B-spline curve point and curve derivative evaluator._basis_control_pointsc                    Xl         X l        g r)   r   r   )r   rA   control_pointss      r   r   Evaluator.__init__   s    -r!   c                X  ^^^^ U R                   nU R                  m[        R                  " XR                  5      (       a  UR                  nUR
                  mUR                  U5      mUR                  TU5      m[        R                  " UUUU4S j[        TS-   5       5       5      $ )Nc              3  F   >#    U  H  nTU   TTT-
  U-      -  v   M     g 7fr)   r   ).0irO   r   r>   r=   s     r   	<genexpr>"Evaluator.point.<locals>.<genexpr>   s*      
9EAAaD>$(Q,//s   !r   )r   r   mathiscloser&   r.   r:   r;   r   rY   rL   )r   rG   rA   rO   r   r>   r=   s      @@@@r   pointEvaluator.point   s    --<<;;''ALLq!dA&xx 
9>q1u
 
 	
r!   c              #  D   #    U H  nU R                  U5      v   M     g 7fr)   )r   )r   r<   rG   s      r   pointsEvaluator.points   s     A**Q-     c           
       ^^^^^ U R                   nU R                  m[        R                  " XR                  5      (       a  UR                  nUR
                  mUR                  U5      mUR                  TX5      mUR                  (       a  / n/ nUR                  n[        US-   5       Hf  m[        nSn[        TS-   5       H'  n	TT-
  U	-   n
TT   U	   Xj   -  nUTU
   U-  -  nX-  nM)     UR                  U5        UR                  U5        Mh     / n[        US-   5       HQ  mUT   n[        STS-   5       H   nU[        TU5      X]   -  UTU-
     -  -  nM"     UR                  XuS   -  5        MS     U$ [        US-   5       V^s/ s H3  m[        R                  " UUUUU4S j[        TS-   5       5       5      PM5     nnU$ s  snf )z?Return point and derivatives up to n <= degree for parameter u.r   r9   r   c              3  L   >#    U  H  nTT   U   TTT-
  U-      -  v   M     g 7fr)   r   )r   rR   basis_funcs_dersr   rk   r>   r=   s     r   r   'Evaluator.derivative.<locals>.<genexpr>  s4      ) %Q'*^D1HqL-II)s   !$)r   r   r   r   r&   r.   r:   rq   r6   r   rL   r	   appendr
   r   rY   )r   rG   rd   rA   CKwwdersr   vwderrR   indexbas_func_weightCKr   rk   r   r   r>   r=   s                 `@@@@r   
derivativeEvaluator.derivative   s    --<<;;''ALLq! 88qD !C!#EmmG1q5\q1uA 1HqLE&6q&9!&<w~&MO.@@A+D & 

1T" "  B1q5\Fq!a%A-a3eh>AEJJA )		!Ah,'	 " 	 q1u
 &A	   "1q5\  &   	s   :Gc              #  D   #    U H  nU R                  X25      v   M     g 7fr)   )r   )r   r<   rd   rG   s       r   rg   Evaluator.derivatives  s       A//!'' r   r   N)rA   r   r   zSequence[Vec3])rG   rc   rt   r   )r<   rs   rt   zIterable[Vec3]rv   )rG   rc   rd   r   rt   z
list[Vec3])r<   rs   rd   r   rt   zIterable[list[Vec3]])rw   rx   ry   rz   r{   r|   r   r   r   r   rg   r~   r   r!   r   r   r      sL    >,-I.
 ,^ ,-( (%((	( (r!   )
__future__r   typingr   r   r   r   rE   _vectorr   r	   linalgr
   __all__r   r   r   r!   r   <module>r      sA    # / /   # (K
 s$ s$lM( M(r!   