Ë
    :vžjº
  ã                   ó`   — d Z ddlZddlmZmZmZ dedee   dee   fd„Zdd	ed
edee   fd„Z	y)zk
interval.py
--------------

Deal with 1D intervals which are defined by:
  [start position, end position]
é    Né   )Ú	ArrayLikeÚNDArrayÚfloat64ÚaÚbÚreturnc                 ó*  — t        j                  | t         j                  ¬«      } t        j                  |t         j                  ¬«      }| j                  dk(  }| j	                  d«      } |j	                  d«      }| j                  d¬«       |j                  d¬«       | j                  \  }}|j                  \  }}t        j                  t        j                  ||k\  ||k\  «      «      }t        j                  | j                  t         j                  ¬«      }t        j                  t        j                  ||   ||   g«      j                  d¬«      t        j                  ||   ||   g«      j                  d¬«      f«      ||<   |r|d   S |S )aŠ  
    Given pairs of ranges merge them in to
    one range if they overlap.

    Parameters
    --------------
    a : (2, ) or (n, 2)
      Start and end of a 1D interval
    b : (2, ) float
      Start and end of a 1D interval

    Returns
    --------------
    inter : (2, ) or (2, 2) float
      The unioned range from the two inputs,
      if not np.ptp(`inter, axis=1)` will be zero.
    )Údtype)é   )éÿÿÿÿr   r   ©Úaxisr   )ÚnpÚarrayr   ÚshapeÚreshapeÚsortÚTÚlogical_notÚ
logical_orÚzerosÚcolumn_stackÚmaxÚmin)	r   r   Úis_1DÚa_lowÚa_highÚb_lowÚb_highÚcheckÚoverlaps	            úa/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/interval.pyÚintersectionr$      sA  € ô$ 	�‰�œ"Ÿ*™*Ô%€AÜ
�‰�œ"Ÿ*™*Ô%€Að �G‰G�t‰O€EØ	�	‰	�'Ó€AØ	�	‰	�'Ó€Að ‡F�F�€F„NØ‡F�F�€F„NØ—C‘C�M€Eˆ6Ø—C‘C�M€Eˆ6ô �N‰Nœ2Ÿ=™=¨°&©¸%À6¹/ÓJÓK€EÜ�h‰h�q—w‘w¤b§j¡jÔ1€GÜ—_‘_ä�H‰H�e˜E‘l E¨%¡LÐ1Ó2×6Ñ6¸AÐ6Ó>Ü�H‰H�f˜U‘m V¨E¡]Ð3Ó4×8Ñ8¸aÐ8Ó@ð	
ó€GˆE�Nñ Ø�q‰zÐà€Nó    Ú	intervalsr   c                 óˆ  — t        | «      dk(  rt        j                  d«      S |r1t        j                  | d¬«      } | | dd…df   j	                  «          } | d   j                  «       g}| dd D ]<  \  }}|d   d   |k\  rt        |d   d   |«      |d   d<   Œ*|j                  ||g«       Œ> t        j                  |«      S )a&  
    For array of multiple intervals union them all into
    the subset of intervals.

    For example:
    `intervals = [[1,2], [2,3]] -> [[1, 3]]`
    `intervals = [[1,2], [2.5,3]] -> [[1, 2], [2.5, 3]]`


    Parameters
    ------------
    intervals : (n, 2)
      Pairs of `(min, max)` values.
    sort
      If the array is already ordered into (min, max) pairs
      and then pairs sorted by minimum value you can skip the
      sorting in this function.

    Returns
    ----------
    unioned : (m, 2)
      New intervals where `m <= n`
    r   r   r   Nr   )	Úlenr   r   r   ÚargsortÚtolistr   Úappendr   )r&   r   ÚunionsÚbeginÚends        r#   Úunionr/   >   sÆ   € ô0 ˆ9ƒ~˜ÒÜ�x‰x˜‹{Ðñ ä—G‘G˜I¨AÔ.ˆ	à˜iª¨1¨™o×5Ñ5Ó7Ñ8ˆ	ð ˜‰l×!Ñ!Ó#Ð$€Fà  “m‰
ˆˆsØ�"‰:�a‰=˜EÒ!Ü  r¡
¨1¡¨sÓ3ˆF�2‰J�qŠMà�M‰M˜5 #˜,Õ'ð	 $ô �8‰8�FÓÐr%   )T)
Ú__doc__Únumpyr   Útypedr   r   r   r$   Úboolr/   © r%   r#   Ú<module>r5      sY   ðñó ç .Ñ .ð-�Ið - '¨'Ñ"2ð -°w¸wÑ7Gó -ñ`,�Yð , dð ,°g¸gÑ6Fô ,r%   