Ë
    :vžj)  ã                   óP   — d dl ZddlmZ ddlmZ ddlmZ dd„Z	dd„Z
ded	efd
„Zy)é    Né   )Úres_path)Útol_path)ÚIntegerc           
      ó<  — t        j                  | t         j                  ¬«      } |€Át         j                  j	                  t        j
                  | d¬«      d¬«      j                  «       }t        j                  |t        j                  |z  z  «      }t        t        j                  |t        j                  t        | «      z  t        j                  t        | «      z  «      «      }t        |«      }t        j                  dd|«      }d|z
  }t        | «      dz
  }t!        t#        |«      t        j$                  t        | «      «      | «      }|D ��	�
cg c])  \  }}	}
||	z  |||	z
  z  z  j'                  d«      |
z  |z  ‘Œ+ }}	}}
t        j                  |d¬«      }t(        j*                  rZt        j                  |ddg   | ddg   z
  d	z  d¬«      }|t(        j,                  k  j/                  «       sJ ‚t        |«      d	k\  sJ ‚| ddg   |ddg<   |S c c}
}	}w )
ak  
    Parameters
    ----------
    points : (order, dimension) float
      Control points of the bezier curve
      For a 2D cubic bezier, order=3, dimension=2
    count : int, or None
      Number of segments
    scale : float
      Scale of curve
    Returns
    ----------
    discrete: (n, dimension) float
     Points forming a a polyline representation
    ©Údtyper   ©Úaxisé   g        ç      ð?)éÿÿÿÿr   r   r   )ÚnpÚ
asanyarrayÚfloat64ÚlinalgÚnormÚdiffÚsumÚceilÚresÚseg_fracÚintÚclipÚmin_sectionsÚlenÚmax_sectionsÚlinspaceÚzipÚbinomialÚarangeÚreshapeÚtolÚstrictÚmergeÚall)ÚpointsÚcountÚscaler   ÚtÚt_dÚnÚiterableÚcÚiÚpÚstackedÚresultÚtests                 úc/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/path/curve.pyÚdiscretize_bezierr5      sÑ  € ô" �]‰]˜6¬¯©Ô4€Fà€}ô �y‰y�~‰~œbŸg™g f°1Ô5¸Aˆ~Ó>×BÑBÓDˆÜ—‘˜¤§¡¨uÑ 4Ñ5Ó6ˆÜÜ�G‰G�Eœ3×+Ñ+¬c°&«kÑ9¼3×;KÑ;KÌcÐRXËkÑ;YÓZó
ˆô �‹J€Eô 	�‰�C˜˜eÓ$€Aà
�‰'€CÜˆF‹�a‰€Aä”8˜A“;¤§	¡	¬#¨f«+Ó 6¸Ó?€Hñ MUõÙLTÁÀÀAÀqˆ!ˆQ‰$�3˜1˜q™5‘>Ñ	"×+Ñ+¨GÓ4°qÑ8¸1Ó<ÈHð ò ô �V‰V�G !Ô$€Fô ‡z‚zä�v‰v�v˜q "˜g‘¨°°B°©Ñ8¸QÑ>ÀQÔGˆØ”s—y‘yÑ ×%Ñ%Ô'Ð'Ð'Ü�6‹{˜aÒÐÐð ˜a ˜W‘o€FˆAˆrˆ7�Oà€Mùôs   Å.Hc           
      ó|  — ddl m} t        j                  | t        j                  ¬«      } t        |«      t        | «      z
  dz
  }|€¬t        j                  j                  t        j                  | d¬«      d¬«      j                  «       }t        t        j                  |t        j                  |z  z  t        j                  t        | «      z  t        j                  t        | «      z  «      «      }t        j                   |d   |d   |«      } |||| j"                  |g«      }t        j$                  |«      }|S )aó  
    Given a B-Splines control points and knot vector, return
    a sampled version of the curve.

    Parameters
    ----------
    control : (o, d) float
      Control points of the b- spline
    knots : (j,) float
      B-spline knots
    count : int
      Number of line segments to discretize the spline
      If not specified will be calculated as something reasonable

    Returns
    ----------
    discrete : (count, dimension) float
       Points on a polyline version of the B-spline
    r   )Úsplevr   r   r
   r   )Úscipy.interpolater7   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚTÚcolumn_stack)	ÚcontrolÚknotsr(   r)   r7   Údegreer   ÚiplÚdiscretes	            r4   Údiscretize_bspliner@   ?   sô   € õ, (ô �m‰m˜G¬2¯:©:Ô6€GÜ�‹Zœ#˜g›,Ñ&¨Ñ*€FØ€}Ü�y‰y�~‰~œbŸg™g g°AÔ6¸Qˆ~Ó?×CÑCÓEˆÜÜ�G‰GØœŸ™ uÑ,Ñ-Ü× Ñ ¤3 w£<Ñ/Ü× Ñ ¤3 w£<Ñ/óó
ˆô �+‰+�e˜A‘h  b¡	¨5Ó
1€CÙ�S˜5 '§)¡)¨VÐ4Ó5€HÜ�‰˜xÓ(€Hà€Oó    r,   Úreturnc                 ó¦   — | dk(  rddgS | dk(  rg d¢S | dk(  rg d¢S | dk(  rg d¢S | dk(  rg d	¢S d
dl m}  || t        j                  | dz   «      «      S )a+  
    Return all binomial coefficients for a given order.

    For n > 5, scipy.special.binom is used, below we hardcode.

    Parameters
    --------------
    n : int
      Order of binomial

    Returns
    ---------------
    binom : (n + 1,) int
      Binomial coefficients of a given order
    r   r   )r   r   r   é   )r   rD   rD   r   é   )r   rE   é   rE   r   é   )r   rG   é
   rH   rG   r   r   )Úbinom)Úscipy.specialrI   r   r!   )r,   rI   s     r4   r    r    k   se   € ð  	ˆA‚vØ�1ˆvˆØ	
ˆaŠÚÐØ	
ˆaŠÚÐØ	
ˆaŠÚÐØ	
ˆaŠÚ#Ð#å'á�QœŸ	™	 ! a¡%Ó(Ó)Ð)rA   )Nr   )Únumpyr   Ú	constantsr   r   r   r#   Útypedr   r5   r@   Úlistr    © rA   r4   Ú<module>rP      s0   ðÛ å 'Ý 'Ý ó4ón)ðX*�ð *˜Dô *rA   