
    Og                       d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ ddlmZmZ d dlZerd dlmZ  G d d	e      Zd
Z G d de      Zdd	 	 	 	 	 ddZddZ e
de      Z ee e             Z G d d      Z G d d      Zy)    )annotations)OptionalTYPE_CHECKINGIterableIteratorCallableAnyUnionNewTypecast
NamedTupleMapping)Enum   )DXFAttributeErrorDXF12N)	DXFEntityc                  "    e Zd ZU ded<   ded<   y)DefSubclasszOptional[str]namezdict[str, DXFAttr]attribsN)__name__
__module____qualname____annotations__     [/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/lldxf/attributes.pyr   r      s    
r   r   ifc                       e Zd ZdZdZdZdZdZy)XTypezExtended Attribute Typesr            N)r   r   r   __doc__point2dpoint3d	any_pointcallbackr   r   r   r    r    !   s    "GGIHr   r    )ignorec               ~   t               }| j                  j                         D ]  \  }}|j                  t        j
                  k(  rd|z   }|j                  }|j                  |      }||||<   Mt        |t              r|g}|||<   t        |t              sJ |j                  |        |r|D ]  }d||<   	 |S )N*z*IGNORE)dictr   itemsxtyper    r(   codeget
isinstancestrlistappend)subclassr)   mappingr   	dxfattribr/   existing_datas          r   group_code_mappingr9   *   s     15G#++113 'i??enn, :D~~5<[[5F  GDM--!. -mT222  &'    	&D%GDM	&Nr   c                    i t        |       D ]s  \  }}| d}t        d |j                         D              st        |      t	        fd|j                         D              rt        |      j                  |       u S )Nz*. mapping contains none unique group codesc              3  <   K   | ]  }t        |t                y wN)r1   r2   ).0es     r   	<genexpr>z,merge_group_code_mappings.<locals>.<genexpr>N   s     @!:a%@s   c              3  &   K   | ]  }|v  
 y wr<   r   )r=   kmerge_group_code_mappings     r   r?   z,merge_group_code_mappings.<locals>.<genexpr>P   s     Eq,,Es   )	enumerateallvalues	TypeErroranykeysupdate)mappingsindexr6   msgrB   s       @r   merge_group_code_mappingsrM   J   s    /1#H- 1wAB@w~~/?@@C. EgllnEEC.  ''01 $#r   ReturnDefaultc            	      ~    e Zd ZdZdddedddddf		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZdd	Z	dd
Z
ddZy)DXFAttral  Represents a DXF attribute for an DXF entity, accessible by the
    DXF namespace :attr:`DXFEntity.dxf` like ``entity.dxf.color = 7``.
    This definitions are immutable by design not by implementation.

    Extended Attribute Types
    ------------------------

    - XType.point2d:  2D points only
    - XType.point3d:  3D point only
    - XType.any_point:  mixed 2D/3D point
    - XType.callback: Calls get_value(entity) to get the value of DXF
      attribute 'name', and calls set_value(entity, value) to set value
      of DXF attribute 'name'.

    See example definition: ezdxf.entities.dxfgfx.acdb_entity.

    NF c                   d| _         || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
t        u r| j                  }
t        t        t        t        gt        f      |
      | _        y )NrQ   )r   r/   r.   defaultoptional
dxfversiongettersetteralias	validatorRETURN_DEFAULT_return_defaultr   r   r   r	   fixer)selfr/   r.   rS   rT   rU   rV   rW   rX   rY   r\   s              r   __init__zDXFAttr.__init__n   s     	 	 ',
 $ '  * " "  
 ;D N"((E(8SE3J#78%@
r   c                    | j                   S r<   )rS   )r]   xs     r   r[   zDXFAttr._return_default   s    ||r   c                <    d| j                    d| j                   dS )N(z, ))r   r/   r]   s    r   __str__zDXFAttr.__str__   s    499+R		{!,,r   c                (    d| j                         z   S )NrP   )re   rd   s    r   __repr__zDXFAttr.__repr__   s    4<<>))r   c                    	  t        || j                               S # t        $ r' t        d| j                   d| j                   d      t
        $ r t        d| j                   d      w xY w)a_  
        Executes a callback function in 'entity' to get a DXF value.

        Callback function is defined by self.getter as string.

        Args:
            entity: DXF entity

        Raises:
            AttributeError: getter method does not exist
            TypeError: getter is None

        Returns:
            DXF attribute value

        DXF attribute z: invalid getter .z has no getter.)getattrrV   AttributeErrorr   r   rF   )r]   entitys     r   get_callback_valuezDXFAttr.get_callback_value   sy    "	Q/764;;/11 	# +<T[[MK   	Q#nTYYK$OPP	Qs
    AA.c                    	  t        || j                        |       y# t        $ r' t        d| j                   d| j                   d      t
        $ r t        d| j                   d      w xY w)aK  Executes a callback function in 'entity' to set a DXF value.

        Callback function is defined by self.setter as string.

        Args:
            entity: DXF entity
            value: DXF attribute value

        Raises:
            AttributeError: setter method does not exist
            TypeError: setter is None

        ri   z: invalid setter rj   z has no setter.N)rk   rW   rl   r   r   rF   )r]   rm   values      r   set_callback_valuezDXFAttr.set_callback_value   sx    	Q(GFDKK(/ 	# +<T[[MK   	Q#nTYYK$OPP	Qs
    AA0c                >    | j                   r| j                  |      S yNT)rY   )r]   rp   s     r   is_valid_valuezDXFAttr.is_valid_value   s    >>>>%((r   )r/   intr.   zOptional[XType]rT   boolrU   r2   rV   r2   rW   r2   rX   r2   rY   zOptional[Callable[[Any], bool]]r\   z:Optional[Union[Callable[[Any], Any], None, ReturnDefault]])r`   r	   returnr	   )rw   r2   )rm   r   rw   r	   )rm   r   rp   r	   rw   None)rp   r	   rw   rv   )r   r   r   r$   r   r^   r[   re   rg   rn   rq   rt   r   r   r   rP   rP   [   s    * "&59LP4A4A 4A
 4A 4A 4A 4A 4A 34A J4Al-*Q4Q.r   rP   c                  6    e Zd ZdZddZd	dZd
dZd fddZy)DXFAttributes_attribsc                Z   t               | _        |D ]  }|j                  j                         D ]x  \  }}||_        || j                  |<   |j
                  s)t        j                  |      }|j
                  |_        |j                  |_        || j                  |j
                  <   z  y r<   )r,   r|   r   r-   r   rX   copy)r]   subclassdefsr5   r   r7   rX   s         r   r^   zDXFAttributes.__init__   s    ,0F$ 	;H#+#3#3#9#9#; ;i!%	&/d#?? IIi0E!*EJ"+..EK5:DMM)//2;	;r   c                    || j                   v S r<   r{   )r]   r   s     r   __contains__zDXFAttributes.__contains__   s    t}}$$r   c                8    | j                   j                  |      S r<   )r|   r0   )r]   keys     r   r0   zDXFAttributes.get   s    }}  %%r   c                     yrs   r   )r`   s    r   <lambda>zDXFAttributes.<lambda>   s    r   c                J    fd| j                   j                         D        S )Nc              3  n   K   | ],  \  }}|j                   d kD  r |      r|j                   |f . yw)r   N)r/   )r=   r   attribfuncs      r   r?   z7DXFAttributes.build_group_code_items.<locals>.<genexpr>   s7      
f{{Q4: [[$
s   25)r|   r-   )r]   r   s    `r   build_group_code_itemsz$DXFAttributes.build_group_code_items   s"    
 $ 3 3 5
 	
r   N)r   r   )r   r2   rw   rv   )r   r2   rw   zOptional[DXFAttr])rw   zIterator[tuple[int, str]])r   r   r   	__slots__r^   r   r0   r   r   r   r   rz   rz      s     I
;%& +9 
r   rz   )r5   r   r)   zOptional[Iterable[int]]rw   z dict[int, Union[str, list[str]]])rJ   r   rw   zdict[int, str]) 
__future__r   typingr   r   r   r   r   r	   r
   r   r   r   r   enumr   constr   r   r~   ezdxf.entitiesr   r   VIRTUAL_TAGr    r9   rM   objectrN   rZ   rP   rz   r   r   r   <module>r      s    #     + ( *  
 D  AE&=%@	$ 0mVX.G GT
 
r   