
    'j                        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dS ).    )annotations)IterableTypeVarIteratorAny)uuid4N   )
juliandatecalendardate)hex_strings_to_bytesbytes_to_hexstrT)quotevaluefloatreturnintc                L    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   )r   r   r   s    N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/tools/__init__.pyfloat2transparencyr      s'     eEll"c)**Z77    c                L    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'     s5zzD())E111r   flagsflagstateboolc                "    |r| |z  } n| | z  } | S )zSet/clear binary `flag` in data `flags`.

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

     )r   r   r   s      r   set_flag_stater"   *   s'      Lr   strc                 h    dt          t                                                                z   dz   S )zReturns 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}``.

    {})r#   r   upperr!   r   r   guidr(   :   s*     UWW##%%%++r   TiterableIterable[T]Iterator[tuple[T, T]]c              #  R   K   t                      }|}| D ]}||u r|}	||fV  |}dS )z`Iterate `iterable` as non-overlapping pairs.

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

    Nobject)r*   sentinelstoreitems       r   take2r3   H   sX       xxHE  HEE+EE r   Fc              #     K   t                      }|}|}|}| D ]}||u r|}|}||fV  |}|r||ur||ur||fV  dS dS dS dS )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*   closer0   firstr1   r2   s         r   pairwiser7   X   s       xxHEED  HEEE+EE h&&4u+<+<Ek &&+<+<r   sleadingtrailingc                   |s|s| S t          |           dk    rdS | d         dv r| d         }| dd         } nd}|r|                     d          } |rd| v r|                     d          } | d	         d
v r
| dd	         } || z   S )zSuppress 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)r8   r9   r:   signs       r   suppress_zerosrC   o   s      h  Qxx3s 	tt||tabbE  HHSMM C1HHHHSMM 	u}}crcF!8Or   anglec                H    | dz  } |rd| cxk     rdk    rn n
| 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!   )rD   fix_upside_downs     r   normalize_text_anglerI      sM     EME B----#-----Lr   )r   r   r   r   )r   r   r   r   )T)r   r   r   r   r   r   r   r   )r   r#   )r*   r+   r   r,   )F)FT)r8   r#   r9   r   r:   r   )rD   r   r   r   )
__future__r   typingr   r   r   r   uuidr   	functoolshtmlr
   r   
binarydatar   r   partialescaper   r   r"   r(   r)   r3   r7   rC   rI   r!   r   r   <module>rR      s{   # " " " " " 3 3 3 3 3 3 3 3 3 3 3 3            0 0 0 0 0 0 0 0 = = = = = = = =		4;d	3	3	3
8 
8 
8 
82 2 2 2     , , , , GCLL        ." " " " "J      r   