
    'j                    @   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dS )    )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<   dS )DefSubclasszOptional[str]namezdict[str, DXFAttr]attribsN)__name__
__module____qualname____annotations__     P/DATA/AppData/hermes/venv/lib/python3.11/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dS )XTypezExtended Attribute Typesr            N)r   r   r   __doc__point2dpoint3d	any_pointcallbackr   r   r   r    r    !   s(        ""GGIHHHr   r    )ignoresubclassr)   Optional[Iterable[int]]return dict[int, Union[str, list[str]]]c                  t                      }| j                                        D ]\  }}|j        t          j        k    rd|z   }|j        }|                    |          }||||<   Ct          |t                    r|g}|||<   t          |t                    sJ |                    |           |r
|D ]}d||<   |S )N*z*IGNORE)dictr   itemsxtyper    r(   codeget
isinstancestrlistappend)r*   r)   mappingr   	dxfattribr3   existing_datas          r   group_code_mappingr<   *   s     15G#+1133 ' 'i?en,, :D~5<[[5F5F  GDMM--- .!. -mT22222  &&&& &  	& 	&D%GDMMNr   mappingsr   dict[int, str]c                 V   i t          |           D ]\  }}| d}t          d |                                D                       st          |          t	          fd|                                D                       rt          |                              |           S )Nz*. mapping contains none unique group codesc              3  @   K   | ]}t          |t                    V  d S N)r5   r6   ).0es     r   	<genexpr>z,merge_group_code_mappings.<locals>.<genexpr>N   s,      @@!:a%%@@@@@@r   c              3      K   | ]}|v V  	d S rA   r   )rB   kmerge_group_code_mappings     r   rD   z,merge_group_code_mappings.<locals>.<genexpr>P   s)      EEq,,EEEEEEr   )	enumerateallvalues	TypeErroranykeysupdate)r=   indexr9   msgrG   s       @r   merge_group_code_mappingsrQ   J   s    /1#H-- 1 1wBBB@@w~~/?/?@@@@@ 	!C.. EEEEgllnnEEEEE 	!C..  ''0000##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dS )(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 r3   intr2   Optional[XType]optionalbool
dxfversionr6   gettersetteralias	validatorOptional[Callable[[Any], bool]]fixer:Optional[Union[Callable[[Any], Any], None, ReturnDefault]]c                "   d| _         || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
t          u r| j        }
t          t          t          t          gt          f                  |
          | _        d S )NrU   )r   r3   r2   defaultrX   rZ   r[   r\   r]   r^   RETURN_DEFAULT_return_defaultr   r   r   r	   r`   )selfr3   r2   rc   rX   rZ   r[   r\   r]   r^   r`   s              r   __init__zDXFAttr.__init__n   s     	 	 ',
 $ '  * " "  
 ;D N""(E(8SE3J#78%@@


r   xr	   r,   c                    | j         S rA   )rc   )rf   rh   s     r   re   zDXFAttr._return_default   s
    |r   c                (    d| j          d| j         dS )N(z, ))r   r3   rf   s    r   __str__zDXFAttr.__str__   s    ,49,,	,,,,r   c                0    d|                                  z   S )NrT   )rn   rm   s    r   __repr__zDXFAttr.__repr__   s    4<<>>))r   entityr   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.)getattrr[   AttributeErrorr   r   rK   )rf   rq   s     r   get_callback_valuezDXFAttr.get_callback_value   s    "	Q/764;//111 	 	 	#KKKT[KKK    	Q 	Q 	Q#$OTY$O$O$OPPP	Qs
    AA+valueNonec                    	  t          || j                  |           dS # 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

        rs   z: invalid setter rt   z has no setter.N)ru   r\   rv   r   r   rK   )rf   rq   rx   s      r   set_callback_valuezDXFAttr.set_callback_value   s    	Q(GFDK((///// 	 	 	#KKKT[KKK    	Q 	Q 	Q#$OTY$O$O$OPPP	Qs
   " AA.c                >    | j         r|                      |          S dS NT)r^   )rf   rx   s     r   is_valid_valuezDXFAttr.is_valid_value   s#    > 	>>%(((4r   )r3   rV   r2   rW   rX   rY   rZ   r6   r[   r6   r\   r6   r]   r6   r^   r_   r`   ra   )rh   r	   r,   r	   )r,   r6   )rq   r   r,   r	   )rq   r   rx   r	   r,   ry   )rx   r	   r,   rY   )r   r   r   r$   r   rg   re   rn   rp   rw   r{   r~   r   r   r   rT   rT   [   s         * "&59LP4A 4A 4A 4A 4Al   - - - -* * * *Q Q Q Q4Q Q Q Q.     r   rT   c                  8    e Zd ZdZddZdd	ZddZd fddZdS )DXFAttributes_attribssubclassdefsr   c                   t                      | _        |D ]t}|j                                        D ]X\  }}||_        || j        |<   |j        r;t          j        |          }|j        |_        |j        |_        || j        |j        <   Yud S rA   )r0   r   r   r1   r   r]   copy)rf   r   r*   r   r:   r]   s         r   rg   zDXFAttributes.__init__   s    ,0FF$ 	; 	;H#+#3#9#9#;#; ; ;i!%	&/d#? ; Ii00E!*EJ"+.EK5:DM)/2;	; 	;r   r   r6   r,   rY   c                    || j         v S rA   r   )rf   r   s     r   __contains__zDXFAttributes.__contains__   s    t}$$r   keyOptional[DXFAttr]c                6    | j                             |          S rA   )r   r4   )rf   r   s     r   r4   zDXFAttributes.get   s    }  %%%r   c                    dS r}   r   )rh   s    r   <lambda>zDXFAttributes.<lambda>   s    D r   Iterator[tuple[int, str]]c                N    fd| j                                         D             S )Nc              3  \   K   | ]&\  }}|j         d k     |          |j         |fV  'dS )r   N)r3   )rB   r   attribfuncs      r   rD   z7DXFAttributes.build_group_code_items.<locals>.<genexpr>   sN       
 
f{Q44:: [$
 
r   )r   r1   )rf   r   s    `r   build_group_code_itemsz$DXFAttributes.build_group_code_items   s<    
 
 
 
 $ 3 3 5 5
 
 
 	
r   N)r   r   )r   r6   r,   rY   )r   r6   r,   r   )r,   r   )r   r   r   	__slots__rg   r   r4   r   r   r   r   r   r      su        I
; 
; 
; 
;% % % %& & & & +9. 
 
 
 
 
 
 
r   r   )r*   r   r)   r+   r,   r-   )r=   r   r,   r>   ) 
__future__r   typingr   r   r   r   r   r	   r
   r   r   r   r   enumr   constr   r   r   ezdxf.entitiesr   r   VIRTUAL_TAGr    r<   rQ   objectrR   rd   rT   r   r   r   r   <module>r      s   # " " " " "                                + + + + + + + +  )((((((         *      
     D    AE     @	$ 	$ 	$ 	$ 00mVVXX..G G G G G G G GT
 
 
 
 
 
 
 
 
 
r   