Ë
    £èh%  ã                  ó€   — d dl mZ d dlmZmZmZ d dlZd dlZddlm	Z	m
Z
 ddlmZ ddgZ G d	„ d«      Z G d
„ d«      Zy)é    )Úannotations)ÚIterableÚSequenceÚOptionalNé   )ÚVec3ÚNULLVEC)Úbinomial_coefficientÚBasisÚ	Evaluatorc                  óÄ   — e Zd ZdZdZ	 d	 	 	 	 	 	 	 dd„Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
edd	„«       Zedd
„«       Zdd„Zdd„Zdd„Zdd„Zddd„Zy)r   zImmutable Basis function class.)Ú_knotsÚ_weightsÚ_orderÚ_countNc                óh  — t        |«      | _        t        |xs g «      | _        t        |«      | _        t        |«      | _        t        | j                  «      }|dk7  r|| j
                  k7  rt        d«      ‚t        | j                  «      | j                  | j
                  z   k7  rt        d«      ‚y )Nr   zinvalid weight countzinvalid knot count)Útupler   r   Úintr   r   ÚlenÚ
ValueError)ÚselfÚknotsÚorderÚcountÚweightsÚlen_weightss         ú3lib/python3.12/site-packages/ezdxf/math/_bspline.pyÚ__init__zBasis.__init__   s“   € ô ˜E“lˆŒÜ˜gšm¨Ó,ˆŒÜ˜u›:ˆŒÜ˜u›:ˆŒô ˜$Ÿ-™-Ó(ˆØ˜!Ò ¨t¯{©{Ò :ÜÐ3Ó4Ð4Üˆt�{‰{Ó˜tŸ{™{¨T¯[©[Ñ8Ò8ÜÐ1Ó2Ð2ð 9ó    c                ó    — | j                   d   S )Néÿÿÿÿ©r   ©r   s    r   Úmax_tzBasis.max_t(   s   € à�{‰{˜2‰Ðr   c                ó   — | j                   S ©N©r   r#   s    r   r   zBasis.order,   ó   € à�{‰{Ðr   c                ó    — | j                   dz
  S )Nr   r'   r#   s    r   ÚdegreezBasis.degree0   s   € à�{‰{˜Q‰Ðr   c                ó   — | j                   S r&   r"   r#   s    r   r   zBasis.knots4   r(   r   c                ó   — | j                   S r&   )r   r#   s    r   r   zBasis.weights8   s   € à�}‰}Ðr   c                ó,   — t        | j                  «      S )z?Returns ``True`` if curve is a rational B-spline. (has weights))Úboolr   r#   s    r   Úis_rationalzBasis.is_rational<   s   € ô �D—M‘MÓ"Ð"r   c                ó´   — | j                  |«      }| j                  dz
  }||z
  }| j                  |z
  dz
  }| j                  ||«      }dg|z  |z   dg|z  z   S )z"Returns the expanded basis vector.r   ç        )Ú	find_spanr   r   Úbasis_funcs)r   ÚtÚspanÚpÚfrontÚbackÚbasiss          r   Úbasis_vectorzBasis.basis_vectorA   sg   € à�~‰~˜aÓ ˆØ�K‰K˜!‰OˆØ�q‘ˆØ�{‰{˜TÑ! AÑ%ˆØ× Ñ   qÓ)ˆØ�˜‘ Ñ&¨3¨%°$©,Ñ7Ð7r   c                óþ   — | j                   }| j                  }|||   k\  r|dz
  S | j                  dz
  }||   dk(  rt        j                  ||||«      dz
  S d}||   |k  r||k  r|dz  }||   |k  r||k  rŒ|dz
  S )zDetermine the knot span index.r   r1   r   )r   r   r   ÚbisectÚbisect_right)r   Úur   r   r6   r5   s         r   r2   zBasis.find_spanJ   sŸ   € ð —‘ˆØ—‘ˆØ��e‘ÒØ˜1‘9ÐØ�K‰K˜!‰Oˆà�‰8�sŠ?ô
 ×&Ñ& u¨a°°EÓ:¸QÑ>Ð>àˆDØ˜‘+ Ò" t¨e¢|Ø˜‘	�ð ˜‘+ Ò" t¨e£|à˜!‘8ˆOr   c                ó¼  — | j                   }| j                  }dg|z  }t        |«      }t        |«      }d|d<   t        d|«      D ]u  }||t	        d|dz   |z
  «         z
  ||<   |||z      |z
  ||<   d}	t        |«      D ]5  }
||
   ||
dz      |||
z
     z   z  }|	||
dz      |z  z   ||
<   |||
z
     |z  }	Œ7 |	||<   Œw | j
                  r| j                  ||«      S |S )Nr1   ç      ð?r   r   )r   r   ÚlistÚrangeÚmaxr/   Úspan_weighting)r   r5   r>   r   r   ÚNÚleftÚrightÚjÚsavedÚrÚtemps               r   r3   zBasis.basis_funcs`   s  € à—‘ˆØ—‘ˆØˆE�E‰MˆÜ�A‹wˆÜ�Q“ˆØˆˆ!‰Ü�q˜%–ˆAØ˜%¤ A t¨a¡x°!¡|Ó 4Ñ5Ñ5ˆD�‰GØ˜T A™X‘¨Ñ*ˆE�!‰HØˆEÜ˜1–X�Ø˜‘t˜u Q¨¡U™|¨d°1°q±5©kÑ9Ñ:�Ø˜u Q¨¡U™|¨dÑ2Ñ2��!‘Ø˜Q ™U™ dÑ*‘ð ð ˆAˆaŠDð !ð ×ÒØ×&Ñ& q¨$Ó/Ð/àˆHr   c                ó  — t        |«      }| j                  || j                  z
  dz   |dz    }t        |«      |k7  r|S t        ||«      D ��cg c]
  \  }}||z  ‘Œ }}}t	        |«      }|dk(  r|S |D �	cg c]  }	|	|z  ‘Œ	 c}	S c c}}w c c}	w )Nr   r1   )r   r   r   ÚzipÚsum)
r   Únbasisr5   Úsizer   ÚnbÚwÚproductsÚsr6   s
             r   rD   zBasis.span_weightingv   s˜   € Ü�6‹{ˆØ—-‘-  t§{¡{Ñ 2°QÑ 6¸À¹ÐBˆÜˆw‹<˜4ÒØˆMä(+¨F°GÔ(<Ô=Ñ(<™u˜r 1�B˜“FÐ(<ˆÑ=Ü�‹MˆØ˜cšˆvÐ@±xÓ'@±x°!¨¨A«°xÑ'@Ð@ùó >ùâ'@s   ÁBÁ5B
c                ód  — | j                   }|dz
  }t        ||«      }| j                  }dg|z  }dg|z  }t        |«      D �	cg c]  }	dg|z  ‘Œ
 }
}	t        d|«      D ]�  }||t	        d|dz   |z
  «         z
  ||<   |||z      |z
  ||<   d}t        |«      D ]L  }||dz      |||z
     z   |
|   |<   |
|   |dz
     |
|   |   z  }|||dz      |z  z   |
|   |<   |||z
     |z  }ŒN ||
|   |<   Œ‘ t        |«      D �	cg c]  }	dg|z  ‘Œ
 }}	t        |«      D ]  }|
|   |   |d   |<   Œ dg|z  dg|z  g}t        |«      D �]  }d}d}d|d   d<   t        d|dz   «      D ]ó  }d}||z
  }||z
  }||k\  r+||   d   |
|dz      |   z  ||   d<   ||   d   |
|   |   z  }|dk\  rd}n| }|dz
  |k  r|dz
  }n||z
  }t        ||dz   «      D ]B  }||   |   ||   |dz
     z
  |
|dz      ||z      z  ||   |<   |||   |   |
||z      |   z  z  }ŒD ||k  r2||   |dz
      |
|dz      |   z  ||   |<   |||   |   |
|   |   z  z  }|||   |<   ||}}Œõ �Œ t        |«      }t        d|dz   «      D ]*  }t        |«      D ]  }||   |xx   |z  cc<   Œ |||z
  z  }Œ, |d |dz    S c c}	w c c}	w )Nr   r@   r   r1   r!   )r   Úminr   rB   rC   Úfloat)r   r5   r>   Únr   r6   r   rF   rG   Ú_ÚndurH   rI   rJ   rK   ÚderivativesÚaÚs1Ús2ÚkÚdÚrkÚpkÚj1Új2s                            r   Úbasis_funcs_derivativeszBasis.basis_funcs_derivatives€   sª  € à—‘ˆØ�A‰IˆÜ��1‹Iˆà—‘ˆØˆu�u‰}ˆØ�˜‘ˆÜ&+¨E¤lÓ3¡l �ˆu�u‹} lˆÐ3ä�q˜%–ˆAØ˜%¤ A t¨a¡x°!¡|Ó 4Ñ5Ñ5ˆD�‰GØ˜T A™X‘¨Ñ*ˆE�!‰HØˆEÜ˜1–X�à! ! a¡%™L¨4°°A±©;Ñ6��A‘�q‘	Ø˜1‘v˜a !™e‘} s¨1¡v¨a¡yÑ0�à! U¨1¨q©5¡\°DÑ%8Ñ9��A‘�q‘	Ø˜Q ™U™ dÑ*‘ð ð ˆC�‰F�1ŠIð !ô /4°E¬lÓ;©l¨˜�u˜u“}¨lˆÐ;Ü�u–ˆAØ # A¡ q¡	ˆK˜‰N˜1Òð ð ˆU�U‰]˜S˜E E™MÐ*ˆÜ�u—ˆAØˆBØˆBàˆAˆa‰D�‰Gô ˜1˜a !™e–_�Ø�Ø˜‘U�Ø˜‘U�Ø˜’6Ø  ™u Q™x¨#¨b°1©f©+°b©/Ñ9�A�b‘E˜!‘HØ˜"™˜a™ 3 r¡7¨2¡;Ñ.�AØ˜’8Ø‘Bà˜�BØ˜‘E˜b’=Ø˜Q™‘Bà˜Q™�BÜ˜r 2¨¡6Ö*�AØ ! "¡ a¡¨1¨R©5°°Q±©<Ñ 7¸3¸rÀA¹v¹;ÀrÈAÁvÑ;NÑN�A�b‘E˜!‘HØ˜˜2™˜q™ C¨¨Q©¡K°¡OÑ3Ñ3‘Að +ð ˜’7Ø ! "¡ a¨!¡e¡˜}¨s°2¸±6©{¸1©~Ñ=�A�b‘E˜!‘HØ˜˜2™˜q™ C¨¡F¨2¡JÑ.Ñ.�AØ$%�˜A‘˜qÑ!ð ˜R�B‘ò1 %ð ôD �!‹HˆÜ�q˜!˜a™%–ˆAÜ˜5–\�Ø˜A‘˜qÓ! QÑ&Ô!ð "à��Q‘‰J‰Að !ð ˜7˜Q ™UÐ#Ð#ùò{ 4ùò  <s   ÁJ(Ã=J-r&   )r   úIterable[float]r   r   r   r   r   zOptional[Sequence[float]])ÚreturnrW   )rg   r   )rg   ztuple[float, ...])rg   r.   )r4   rW   rg   úlist[float])r>   rW   rg   r   )r5   r   r>   rW   rg   rh   )rO   rh   r5   r   rg   rh   ©r   )r5   r   r>   rW   rX   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   Úpropertyr$   r   r*   r   r   r/   r:   r2   r3   rD   re   © r   r   r   r      sÍ   „ Ù)à:€Ið .2ð3àð3ð ð3ð ð	3ð
 +ó3ð& òó ðð òó ðð òó ðð òó ðð òó ðð ò#ó ð#ó8óó,ó,AõF$r   c                  óP   — e Zd ZdZddgZd
d„Zdd„Zdd„Zddd„Z	 d	 	 	 	 	 dd„Z	y	)r   z4B-spline curve point and curve derivative evaluator.Ú_basisÚ_control_pointsc                ó    — || _         || _        y r&   )rr   rs   )r   r9   Úcontrol_pointss      r   r   zEvaluator.__init__Î   s   € ØˆŒØ-ˆÕr   c                óJ  ‡‡‡‡— | j                   }| j                  Št        j                  ||j                  «      r|j                  }|j
                  Š|j                  |«      Š|j                  ‰|«      Št        j                  ˆˆˆˆfd„t        ‰dz   «      D «       «      S )Nc              3  ó@   •K  — | ]  }‰|   ‰‰‰z
  |z      z  –— Œ y ­wr&   rp   )Ú.0ÚirE   ru   r6   r5   s     €€€€r   Ú	<genexpr>z"Evaluator.point.<locals>.<genexpr>Ü   s+   øè ø€ ð 
Ù9E°AˆAˆa‰D�> $¨¡(¨Q¡,Ñ/Õ/¹ùs   ƒr   )rr   rs   ÚmathÚiscloser$   r*   r2   r3   r   rN   rB   )r   r>   r9   rE   ru   r6   r5   s      @@@@r   ÚpointzEvaluator.pointÒ   s�   û€ à—‘ˆØ×-Ñ-ˆÜ�<‰<˜˜5Ÿ;™;Ô'Ø—‘ˆAà�L‰LˆØ�‰˜qÓ!ˆØ×Ñ˜d AÓ&ˆÜ�x‰xö 
Ü9>¸qÀ1¹u¼ó
ó 
ð 	
r   c              #  ó@   K  — |D ]  }| j                  |«      –— Œ y ­wr&   )r}   )r   r4   r>   s      r   ÚpointszEvaluator.pointsà   s   è ø€ ÛˆAØ—*‘*˜Q“-Óñ ùs   ‚c           
     ó€  ‡‡‡‡‡— | j                   }| j                  Št        j                  ||j                  «      r|j                  }|j
                  Š|j                  |«      Š|j                  ‰||«      Š|j                  rëg }g }|j                  }t        |dz   «      D ]e  Št        }d}t        ‰dz   «      D ](  }	‰‰z
  |	z   }
‰‰   |	   ||
   z  }|‰|
   |z  z  }||z  }Œ* |j                  |«       |j                  |«       Œg g }t        |dz   «      D ]P  Š|‰   }t        d‰dz   «      D ]   }|t        ‰|«      ||   z  |‰|z
     z  z  }Œ" |j                  ||d   z  «       ŒR |S t        |dz   «      D �‡cg c]0  Št        j                  ˆˆˆˆˆfd„t        ‰dz   «      D «       «      ‘Œ2 }}|S c c}w )z?Return point and derivatives up to n <= degree for parameter u.r   r1   r   c              3  óF   •K  — | ]  }‰‰   |   ‰‰‰z
  |z      z  –— Œ y ­wr&   rp   )rx   rH   Úbasis_funcs_dersru   r_   r6   r5   s     €€€€€r   rz   z'Evaluator.derivative.<locals>.<genexpr>
  s5   øè ø€ ð á)˜ð % QÑ'¨Ñ*¨^¸DÀ1¹HÀq¹LÑ-IÕIÙ)ùs   ƒ!)rr   rs   r{   r|   r$   r*   r2   re   r/   r   rB   r	   Úappendr
   r   rN   )r   r>   rX   r9   ÚCKwÚwdersr   ÚvÚwderrH   ÚindexÚbas_func_weightÚCKry   r_   r‚   ru   r6   r5   s                 `@@@@r   Ú
derivativezEvaluator.derivativeä   sÙ  ü€ ð —‘ˆØ×-Ñ-ˆÜ�<‰<˜˜5Ÿ;™;Ô'Ø—‘ˆAà�L‰LˆØ�‰˜qÓ!ˆØ ×8Ñ8¸¸qÀ!ÓDÐØ×Òð !ˆCØ!#ˆEØ—m‘mˆGÜ˜1˜q™5–\�Ü�Ø�Ü˜q 1™už�AØ  1™H q™L�EØ&6°qÑ&9¸!Ñ&<¸wÀu¹~Ñ&M�Oà˜¨Ñ.°Ñ@Ñ@�AØ˜OÑ+‘Dð &ð —
‘
˜1”Ø—‘˜TÕ"ð "ð  ˆBÜ˜1˜q™5–\�Ø˜‘F�Ü˜q ! a¡%ž�AØÔ-¨a°Ó3°e¸A±hÑ>ÀÀAÈÁEÁÑJÑJ‘Að )à—	‘	˜!˜e A™h™,Õ'ð	 "ð ˆ	ô ˜q 1™uœôñ
 &�Aô	 —‘÷ ä" 1 q¡5œ\óõ ð &ð ð ð ˆ	ùòs   Æ5F;c              #  óB   K  — |D ]  }| j                  ||«      –— Œ y ­wr&   )r‹   )r   r4   rX   r>   s       r   r[   zEvaluator.derivatives  s#   è ø€ ó ˆAØ—/‘/ ! QÓ'Ó'ñ ùs   ‚N)r9   r   ru   zSequence[Vec3])r>   rW   rg   r   )r4   rf   rg   zIterable[Vec3]ri   )r>   rW   rX   r   rg   z
list[Vec3])r4   rf   rX   r   rg   zIterable[list[Vec3]])
rj   rk   rl   rm   rn   r   r}   r   r‹   r[   rp   r   r   r   r   É   sG   „ Ù>àÐ,Ð-€Ió.ó
ó ô,ð^ ,-ð(Ø ð(Ø%(ð(à	ô(r   )Ú
__future__r   Útypingr   r   r   r{   r<   Ú_vectorr   r	   Úlinalgr
   Ú__all__r   r   rp   r   r   Ú<module>r’      sA   ðõ #ß /Ñ /Û Û ÷ #Ý (à�KÐ
 €÷v$ñ v$÷rM(ò M(r   