Ë
    :vžjV  ã                   ób   — d dl ZddlmZmZmZ ddlmZ ej                  ddede	dz  fd„«       Z
y)	é    Né   )ÚboundsÚ	constantsÚutil)Ú	ArrayLikeÚpointsÚcheck_directionc                 óþ  — t        j                  |t         j                  ¬«      }t        j                  |d«      st        d«      ‚t        j                  t        |«      t        ¬«      }t        j                  | j                  j                  |«      }|j                  «       s|S t        j                  g d¢«      }|€'t        j                  ||j                  «       df«      }nHt        j                  t        j                  |«      j!                  d«      |j                  «       df«      }| j#                  t        j$                  ||   ||   f«      t        j$                  || f«      d¬«      \  }}}	t        |«      d	k(  r|S t        j&                  |t        |«      d
z  ¬«      j!                  d«      }
t        j(                  |
d
«      dk(  }t        j*                  |Ž }|j-                  «       }|||<   |d	   |   ||<   |
d	k(  j                  d	¬«      }t        j.                  t        j0                  |«      t        j0                  |«      «      }|j                  «       s|S |€“t        j2                  t        j4                  «       j7                  d«      dz
  «      }|j-                  «       }|||<   t9        | ||   |   |¬«      ||<   t:        j<                  j?                  d|j                  «       «       |S )aR  
    Check if a mesh contains a set of points, using ray tests.

    If the point is on the surface of the mesh, behavior is
    undefined.

    Parameters
    ---------
    mesh: Trimesh object
    points: (n,3) points in space

    Returns
    ---------
    contains : (n) bool
                  Whether point is inside mesh or not
    )Údtype)éÿÿÿÿé   zpoints must be (n,3))gíos¤ß Ü?g0ø´3^Ãã?gòÕ¼ßä?é   r   T)Úmultiple_hitsr   r   )Ú	minlength)r   r   )Úaxisg      à?)r	   z2detected %d broken contains test, attempted to fix) ÚnpÚ
asanyarrayÚfloat64r   Úis_shapeÚ
ValueErrorÚzerosÚlenÚboolr   ÚcontainsÚmeshÚanyÚarrayÚtileÚsumÚreshapeÚintersects_locationÚvstackÚbincountÚmodÚequalÚcopyÚlogical_andÚlogical_notÚunitizeÚrandom_generatorÚrandomÚcontains_pointsr   ÚlogÚdebug)Úintersectorr   r	   r   Úinside_aabbÚdefault_directionÚray_directionsÚ	_locationÚ	index_rayÚ_cÚbi_hitsÚbi_containsÚagreeÚmaskÚone_freespaceÚbrokenÚnew_directions                    úe/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/ray/ray_util.pyr,   r,      s—  € ô& �]‰]˜6¬¯©Ô4€FÜ�=‰=˜ Ô)ÜÐ/Ó0Ð0ô �x‰xœ˜F›¬4Ô0€Hô —/‘/ +×"2Ñ"2×"9Ñ"9¸6ÓB€Kð �?‰?ÔØˆô Ÿ™Ò!OÓPÐØÐô Ÿ™Ð!2°[·_±_Ó5FÈÐ4JÓK‰ô Ÿ™Ü�H‰H�_Ó%×-Ñ-¨aÓ0°;·?±?Ó3DÀaÐ2Hó
ˆð  +×>Ñ>Ü
�	‰	�6˜+Ñ&¨¨{Ñ(;Ð<Ó=Ü
�	‰	�> N ?Ð3Ó4Øð  ?ó  Ñ€Iˆy˜"ô ˆ9ƒ~˜ÒØˆô �k‰k˜)¬s°>Ó/BÀQÑ/FÔG×OÑOÐPWÓX€Gä—&‘&˜ !Ó$¨Ñ)€Kô �H‰H�kÐ"€Eð ×ÑÓ€DØ€Dˆ�Jð ! ‘^ EÑ*€HˆT�Nð  ‘\×&Ñ&¨AÐ&Ó.€Mô �^‰^œBŸN™N¨5Ó1´2·>±>À-Ó3PÓQ€Fð �:‰:Œ<Øˆð
 ÐäŸ™¤T×%:Ñ%:Ó%<×%CÑ%CÀAÓ%FÈÑ%LÓMˆà×ÑÓ!ˆØˆˆT‰
ä(Ø˜ Ñ,¨VÑ4Àmô
ˆ�‰ô 	�‰×ÑØ@À&Ç*Á*Ã,ô	
ð €Oó    )N)Únumpyr   Ú r   r   r   Útypedr   Úlog_timer   r,   © r>   r=   Ú<module>rD      sA   ðÛ ç &Ñ &Ý ð ×Ññp¨ð pÀTÈDÁ[ò pó ñpr>   