Ë
    £èh=  ã                  óø   — d dl mZ d dlmZmZmZmZ d dlmZ d dl	Z	d dl
Z
ddlmZmZ ddlmZmZ  e	j                   e
j"                  d¬	«      Zdd
„Zdd„Zddd„Zdd„Z ed«      Zdd„Zddd„Zddd„Zddd„Zy)é    )Úannotations)ÚIterableÚTypeVarÚIteratorÚAny)Úuuid4Né   )Ú
juliandateÚcalendardate)Úhex_strings_to_bytesÚbytes_to_hexstrT)Úquotec                ó<   — t        dt        | «      z
  dz  «      dz  S )a,  
    Returns DXF transparency value as integer in the range from ``0`` to ``255``, where
    ``0`` is 100% transparent and ``255`` is opaque.

    Args:
        value: transparency value as float in the range from ``0`` to ``1``, where ``0``
           is opaque and ``1`` is 100% transparency.

    ç      ð?éÿ   i   )ÚintÚfloat©Úvalues    ú4lib/python3.12/site-packages/ezdxf/tools/__init__.pyÚfloat2transparencyr      s"   € ô �”e˜E“lÑ" cÑ)Ó*¨ZÑ7Ð7ó    c                ó<   — dt        t        | «      dz  «      dz  z
  S )a  
    Returns transparency value as float from ``0`` to ``1``, ``0`` for no transparency
    (opaque) and ``1`` for 100% transparency.

    Args:
        value: DXF integer transparency value, ``0`` for 100% transparency and ``255``
            for opaque

    r   r   g     ào@)r   r   r   s    r   Útransparency2floatr      s"   € ð ””s˜5“z DÑ(Ó)¨EÑ1Ñ1Ð1r   c                ó$   — |r| |z  } | S | | z  } | S )z¯Set/clear binary `flag` in data `flags`.

    Args:
        flags: data value
        flag: flag to set/clear
        state: ``True`` for setting, ``False`` for clearing

    © )ÚflagsÚflagÚstates      r   Úset_flag_stater    *   s)   € ñ Ø˜‘ˆð €Lð ˜˜‘ˆØ€Lr   c                 óP   — dt        t        «       «      j                  «       z   dz   S )zóReturns a general unique ID, based on :func:`uuid.uuid4`.

    This function creates a GUID for the header variables $VERSIONGUID and
    $FINGERPRINTGUID, which matches the AutoCAD pattern
    ``{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}``.

    Ú{Ú})Ústrr   Úupperr   r   r   Úguidr&   :   s#   € ð ””U“W“×#Ñ#Ó%Ñ%¨Ñ+Ð+r   ÚTc              #  óP   K  — t        «       }|}| D ]  }||u r|}Œ
||f–— |}Œ y­w)z`Iterate `iterable` as non-overlapping pairs.

    :code:`take2('ABCDEFGH') -> AB CD EF GH`

    N©Úobject)ÚiterableÚsentinelÚstoreÚitems       r   Útake2r/   H   s:   è ø€ ô ‹x€HØ€EÛˆØ�HÑØ‰Eà˜�+ÒØ‰Eñ ùs   ‚$&c              #  ó‚   K  — t        «       }|}|}|}| D ]  }||u r|}|}Œ||f–— |}Œ |r||ur||ur||f–— yyyy­w)a  Iterate `iterable` as consecutive overlapping pairs.
    This is similar to ``itertools.pairwise()`` in Python 3.10 but with `close` option.

    :code:`polygon_segments('ABCDEFG') -> AB BC CD DE EF FG`
    :code:`polygon_segments('ABCDEFG', True) -> AB BC CD DE EF FG GA`

    Nr)   )r+   Úcloser,   Úfirstr-   r.   s         r   Úpairwiser3   X   sp   è ø€ ô ‹x€HØ€EØ€EØ€DÛˆØ�HÑØˆEØ‰Eà˜�+ÒØ‰Eð ñ �˜hÑ&¨4°uÑ+<Ø�EˆkÓð ,=Ð&€uùs   ‚=?c                óÊ   — |s|s| S t        | «      dk(  ry| d   dv r| d   }| dd } nd}|r| j                  d«      } |rd| v r| j                  d«      } | d	   d
v r| dd	 } || z   S )z²Suppress trailing and/or leading ``0`` of string `s`.

    Args:
         s: data string
         leading: suppress leading ``0``
         trailing: suppress trailing ``0``

    g        Ú0r   z-+r	   NÚ Ú.éÿÿÿÿz.,)r   ÚlstripÚrstrip)ÚsÚleadingÚtrailingÚsigns       r   Úsuppress_zerosr?   o   s�   € ñ ™hØˆô ˆQƒx�3‚Øð 	ˆ�tˆt�|Ø�‰tˆØˆaˆbˆE‰àˆñ Ø�H‰H�S‹MˆÙ�C˜1‘HØ�H‰H�S‹Mˆð 	ˆ�u��}ØˆcˆrˆFˆà�!‰8€Or   c                óF   — | dz  } |rd| cxk  rdk  rn | S | dz  } | dz  } | S )zà
    Normalizes text `angle` to the range from 0 to 360 degrees and fixes upside down text angles.

    Args:
        angle: text angle in degrees
        fix_upside_down: rotate upside down text angle about 180 degree

    g     €v@éZ   i  é´   r   )ÚangleÚfix_upside_downs     r   Únormalize_text_anglerE   ”   s<   € ð �E‰M€EÙ˜B Ô-¨#Ô-ð €Lð 	�‰ˆØ˜‘ˆØ€Lr   )r   r   Úreturnr   )r   r   rF   r   )T)r   r   r   r   r   ÚboolrF   r   )rF   r$   )r+   zIterable[T]rF   zIterator[tuple[T, T]])F)FT)r;   r$   r<   rG   r=   rG   )rC   r   rF   r   )Ú
__future__r   Útypingr   r   r   r   Úuuidr   Ú	functoolsÚhtmlr
   r   Ú
binarydatar   r   ÚpartialÚescaper   r   r    r&   r'   r/   r3   r?   rE   r   r   r   Ú<module>rP      sk   ðõ #ß 3Ó 3Ý Û Û ß 0ß =à	ˆ×	Ñ	˜4Ÿ;™;¨dÔ	3€ó
8ó2ôó ,ñ ˆCƒL€óô ô."õJr   