
    h                    .   S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
JrJrJr  S SKJr  SSKJrJr  S SKr\(       a  S SKJr   " S S	\5      rS
r " S S\5      rSS.     SS jjrSS jr\
" S\5      r\" \\" 5       5      r " S S5      r " S S5      rg)    )annotations)OptionalTYPE_CHECKINGIterableIteratorCallableAnyUnionNewTypecast
NamedTupleMapping)Enum   )DXFAttributeErrorDXF12N)	DXFEntityc                  *    \ rS rSr% S\S'   S\S'   Srg)DefSubclass   zOptional[str]namezdict[str, DXFAttr]attribs N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       H/var/www/html/env/lib/python3.13/site-packages/ezdxf/lldxf/attributes.pyr   r      s    
r    r   ifc                  (    \ rS rSrSrSrSrSrSrSr	g)	XType!   zExtended Attribute Typesr            r   N)
r   r   r   r   __doc__point2dpoint3d	any_pointcallbackr   r   r    r!   r#   r#   !   s    "GGIHr    r#   )ignorec                  [        5       nU R                  R                  5        H  u  p4UR                  [        R
                  :X  a  SU-   nUR                  nUR                  U5      nUc  X2U'   MN  [        U[        5      (       a  U/nXbU'   [        U[        5      (       d   eUR                  U5        M     U(       a  U H  nSX%'   M	     U$ )N*z*IGNORE)dictr   itemsxtyper#   r,   codeget
isinstancestrlistappend)subclassr-   mappingr   	dxfattribr3   existing_datas          r!   group_code_mappingr=   *   s     15G#++113??enn, :D~~5<[[5F  DM---!. -mT2222  & 4   D%GM Nr    c                 &  ^ 0 m[        U 5       H~  u  pU S3n[        S UR                  5        5       5      (       d  [        U5      e[	        U4S jUR                  5        5       5      (       a  [        U5      eTR                  U5        M     T$ )Nz*. mapping contains none unique group codesc              3  B   #    U  H  n[        U[        5      v   M     g 7fN)r5   r6   ).0es     r!   	<genexpr>,merge_group_code_mappings.<locals>.<genexpr>N   s     @/?!:a%%/?s   c              3  ,   >#    U  H	  oT;   v   M     g 7fr@   r   )rA   kmerge_group_code_mappings     r!   rC   rD   P   s     En,,ns   )	enumerateallvalues	TypeErroranykeysupdate)mappingsindexr:   msgrG   s       @r!   merge_group_code_mappingsrR   J   s    /1#H-AB@w~~/?@@@C. EgllnEEEC.  ''0 . $#r    ReturnDefaultc            	          \ rS rSrSrSSS\SSSSS4	                 SS jjrSS jrSS jrSS	 jr	SS
 jr
SS jrSS jrSrg)DXFAttr[   a<  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                    SU l         Xl        X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl	        U
[        L a  U R                  n
[        [        [        [        /[        4      U
5      U l        g )NrW   )r   r3   r2   defaultoptional
dxfversiongettersetteralias	validatorRETURN_DEFAULT_return_defaultr   r   r   r	   fixer)selfr3   r2   rY   rZ   r[   r\   r]   r^   r_   rb   s              r!   __init__DXFAttr.__init__n   s~     	 	 ',
 $ '  * " "  
 ;D N"((E(8SE3J#78%@
r    c                    U R                   $ r@   )rY   )rc   xs     r!   ra   DXFAttr._return_default   s    ||r    c                <    SU R                    SU R                   S3$ )N(z, ))r   r3   rc   s    r!   __str__DXFAttr.__str__   s    499+R		{!,,r    c                (    SU R                  5       -   $ )NrU   )rm   rl   s    r!   __repr__DXFAttr.__repr__   s    4<<>))r    c                     [        XR                  5      " 5       $ ! [         a'    [        SU R                   SU R                   S35      e[
         a    [        SU R                   S35      ef = f)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   )rc   entitys     r!   get_callback_valueDXFAttr.get_callback_value   su    "	Q6;;/11 	# +<T[[MK   	Q#nTYYK$OPP	Qs
    AA/c                     [        XR                  5      " U5        g! [         a'    [        SU R                   SU R                   S35      e[
         a    [        SU R                   S35      ef = f)a  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   )rc   rw   values      r!   set_callback_valueDXFAttr.set_callback_value   st    	QFKK(/ 	# +<T[[MK   	Q#nTYYK$OPP	Qs
    AA1c                H    U R                   (       a  U R                  U5      $ gNT)r_   )rc   r{   s     r!   is_valid_valueDXFAttr.is_valid_value   s    >>>>%((r    )r^   r3   rY   r[   rb   r\   r   rZ   r]   r_   r2   )r3   intr2   zOptional[XType]rZ   boolr[   r6   r\   r6   r]   r6   r^   r6   r_   zOptional[Callable[[Any], bool]]rb   z:Optional[Union[Callable[[Any], Any], None, ReturnDefault]])rg   r	   returnr	   )r   r6   )rw   r   r   r	   )rw   r   r{   r	   r   None)r{   r	   r   r   )r   r   r   r   r(   r   rd   ra   rm   rp   rx   r|   r   r   r   r    r!   rU   rU   [   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    rU   c                  H    \ rS rSrSrS	S jrS
S jrSS jrS 4SS jjrSr	g)DXFAttributes   _attribsc                h   [        5       U l        U H  nUR                  R                  5        H|  u  p4X4l        X@R                  U'   UR
                  (       d  M,  [        R                  " U5      nUR
                  Ul        UR                  Ul        XPR                  UR
                  '   M~     M     g r@   )r0   r   r   r1   r   r^   copy)rc   subclassdefsr9   r   r;   r^   s         r!   rd   DXFAttributes.__init__   s~    ,0F$H#+#3#3#9#9#;!%&/d#??? IIi0E!*EJ"+..EK5:MM)//2 $< %r    c                    XR                   ;   $ r@   r   )rc   r   s     r!   __contains__DXFAttributes.__contains__   s    }}$$r    c                8    U R                   R                  U5      $ r@   )r   r4   )rc   keys     r!   r4   DXFAttributes.get   s    }}  %%r    c                    gr   r   )rg   s    r!   <lambda>DXFAttributes.<lambda>   s    Dr    c                L   ^ U4S jU R                   R                  5        5       $ )Nc              3     >#    U  H6  u  pUR                   S :  d  M  T" U5      (       d  M&  UR                   U4v   M8     g7f)r   N)r3   )rA   r   attribfuncs      r!   rC   7DXFAttributes.build_group_code_items.<locals>.<genexpr>   s<      
 5{{Q  #':  V[[$ 5s   AAA)r   r1   )rc   r   s    `r!   build_group_code_items$DXFAttributes.build_group_code_items   s"    
 $ 3 3 5
 	
r    N)r   r   )r   r6   r   r   )r   r6   r   zOptional[DXFAttr])r   zIterator[tuple[int, str]])
r   r   r   r   	__slots__rd   r   r4   r   r   r   r    r!   r   r      s%    I
;%& +9 
 
r    r   )r9   r   r-   zOptional[Iterable[int]]r   z dict[int, Union[str, list[str]]])rO   r   r   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#   r=   rR   objectrS   r`   rU   r   r   r    r!   <module>r      s    #     + ( *  
 D  AE&=%@	$ 0mVX.G GT
 
r    