Ë
    :vžjø  ã                   ó¬   — d Z ddlmZ ddlmZ ddlmZ  ej                  d«      Zde	de	de
fd	„Zdefd
„Zde	de
fd„Zddedede	fd„Zddede	ddfd„Zy)z˜
units.py
--------------
Deal with physical unit systems (i.e. inches, mm)

Very basic conversions, and no requirement for
sympy.physics.units or pint.
é   )Ú	resources)Úlog)ÚGeometryzunits_to_inches.jsonÚcurrentÚdesiredÚreturnc                 ó    — t        | j                  «       j                  «       «      t        |j                  «       j                  «       «      z  S )af  
    Calculate the conversion from one set of units to another.

    Parameters
    ---------
    current : str
        Unit system values are in now (eg 'millimeters')
    desired : str
        Unit system we'd like values in (eg 'inches')

    Returns
    ---------
    conversion : float
        Number to multiply by to put values into desired units
    )Úto_inchÚstripÚlower)r   r   s     ú^/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/units.pyÚunit_conversionr      s7   € ô" �7—=‘=“?×(Ñ(Ó*Ó+¬g°g·m±m³o×6KÑ6KÓ6MÓ.NÑNÐNó    c                  ó<   — t        t        j                  «       «      S )z–
    Return a set containing all currently valid units.

    Returns
    --------
    keys
      All units with conversions i.e. {'in', 'm', ...}
    )ÚsetÚ_lookupÚkeys© r   r   r   r   &   s   € ô Œw�|‰|‹~ÓÐr   Úunitc                 ó0  — t         j                  | j                  «       j                  «       d«      }|�|S 	 | j	                  d«      \  }}t         |j                  «          t        |«      z  S # t        $ r}d| › d|› d�}Y d}~t        |«      ‚d}~ww xY w)ax  
    Calculate the conversion to an arbitrary common unit.

    Parameters
    ------------
    unit
      Either a key in `units_to_inches.json` or in the simple
      `{float} * {str}` form, i.e. "1.2 * meters". We don't
      support arbitrary `eval` of any math string

    Returns
    ----------
    conversion
      Factor to multiply by to get to an `inch` system.
    NÚ*z:arbitrary units must be in the form "1.21 * meters", not "z" (Ú))r   Úgetr   r   ÚsplitÚfloatÚBaseExceptionÚ
ValueError)r   ÚlookupÚvalueÚkeyÚEÚmessages         r   r
   r
   2   s˜   € ô" �[‰[˜Ÿ™›×+Ñ+Ó-¨tÓ4€FØÐØˆð
à—Z‘Z “_‰
ˆˆsÜ�s—y‘y“{Ñ#¤e¨E£lÑ2Ð2øÜò 
ð IÈÈÈcÐRSÐQTÐTUÐVô 	ô �WÓ
Ðûð
ús   ¸6A/ Á/	BÁ8	BÂBÚobjÚguessc                 óN  — | j                   j                  dd«      g}| j                  �%|j                  | j                  j                  «       |D ]—  }|€Œ|j                  «       j                  dd«      j                  dd«      }dD ]  }|j                  |d«      }Œ dj                  d„ |D «       «      }|j                  «       j                  «       D ]  }|t        v sŒ|c c S  Œ™ |st        d	«      ‚t        j                  d
«       t        | j                  «      dkD  ryy)a9  
    Try to extract hints from metadata and if that fails
    guess based on the object scale.


    Parameters
    ------------
    obj
      A geometry object.
    guess
      If metadata doesn't have units make a "best guess"

    Returns
    ------------
    units
     A guess of what the units might be
    ÚnameNÚunitsÚ r   z_-.Ú c              3   ó*   K  — | ]  }|d vsŒ|–— Œ y­w)Ú
0123456789Nr   )Ú.0Úcs     r   Ú	<genexpr>z&units_from_metadata.<locals>.<genexpr>s   s   è ø€ Ð@¡$˜Q¨!°<Ò*?”q¡$ùs   ‚	Œz"No units and not allowed to guess!zno units: guessing from scaleg      Y@ÚmillimetersÚinches)Úmetadatar   ÚsourceÚappendÚ	file_namer   ÚreplaceÚjoinr   r   r   r   r   Údebugr   Úscale)r#   r$   ÚhintsÚhintÚdelimÚhs         r   Úunits_from_metadatar=   T   s   € ð& �\‰\×Ñ˜f dÓ+Ð,€EØ
‡z�zÐØ�‰�S—Z‘Z×)Ñ)Ô*ó ˆØˆ<ØØ�z‰z‹|×#Ñ# G¨SÓ1×9Ñ9¸&À#ÓFˆãˆEØ—<‘<  sÓ+‰Dð à�w‰wÑ@¡$Ó@Ó@ˆà—‘“×#Ñ#Ö%ˆAà”GŠ|Ø”ñ &ð ñ ÜÐ=Ó>Ð>ô
 ‡I�IÐ-Ô.ÜˆS�Y‰YÓ˜%ÒØàr   Nc                 óÞ   — | j                   €t        | |¬«      | _         t        j                  d| j                   |«       t	        | j                   |«      }| j                  |«       || _         y)a{  
    Given an object with scale and units try to scale
    to different units via the object's `apply_scale`.

    Parameters
    ---------
    obj :  object
        With apply_scale method (i.e. Trimesh, Path2D, etc)
    desired : str
        Units desired (eg 'inches')
    guess:   bool
        Whether we are allowed to guess the units
        if they are not specified.
    N)r$   zconverting units from %s to %s)r'   r=   r   r7   r   Úapply_scale)r#   r   r$   Ú
conversions       r   Ú_convert_unitsrA   ‡   sX   € ð ‡y�yÐô (¨°5Ô9ˆŒ	ä‡I�IÐ.°·	±	¸7ÔCä  §¡¨GÓ4€Jð ‡O�O�JÔà€C…Ir   )T)F)Ú__doc__r)   r   Ú	constantsr   Úparentr   Úget_jsonr   Ústrr   r   r   r   r
   Úboolr=   rA   r   r   r   Ú<module>rH      s�   ðñõ Ý Ý ð ˆ)×
Ñ
Ð3Ó
4€ðO˜Sð O¨3ð O°5ó Oð(	ˆcó 	ð�#ð ˜%ó ñD0˜Xð 0¨dð 0¸có 0ñf˜ð ¨3ð Àô r   