Ë
    £èh‡   ã                  ó  — 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__© ó    ú6lib/python3.12/site-packages/ezdxf/lldxf/attributes.pyr   r      s   … Ø
ÓØÔr   r   ifýÿÿc                  ó    — 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Ø�?‰?œeŸn™nÒ,ð ˜‘:ˆDØ�~‰~ˆØ5<·[±[ÀÓ5FˆØÐ Ø ˆG�DŠMä˜-¬Ô-Ø!. �Ø -�˜‘Ü˜m¬TÔ2Ð2Ð2Ø× Ñ  Õ&ð 4ñ  ó ˆDØ%ˆG�DŠMð à€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±n°ˆqÐ,Ô,±nùs   ƒ)Ú	enumerateÚallÚvaluesÚ	TypeErrorÚanyÚkeysÚupdate)ÚmappingsÚindexr6   ÚmsgrB   s       @r   Úmerge_group_code_mappingsrM   J   s|   ø€ Ø/1ÐÜ# HÖ-‰ˆˆwØ�ÐAÐBˆÜÑ@¨w¯~©~Ô/?Ó@Ô@Ü˜C“.Ð ÜÓE°g·l±l´nÓEÔEÜ˜C“.Ð Ø ×'Ñ'¨Õ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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äœ(¤8¬S¨E´3¨JÑ#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   € Ø�4—9‘9�+˜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Ø/”7˜6 4§;¡;Ó/Ó1Ð1øÜò 	Ü#Ø  §¡ Ð+<¸T¿[¹[¸MÈÐKóð ô ò 	QÜ# n°T·Y±Y°K¸Ð$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Ø(ŒG�F˜DŸK™KÓ(¨Õ/øÜò 	Ü#Ø  §¡ Ð+<¸T¿[¹[¸MÈÐKóð ô ò 	QÜ# n°T·Y±Y°K¸Ð$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­   „ ñð* "&ØØØØØØØ59ØLPð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„   € Ü,0«FˆŒÛ$ˆHØ#+×#3Ñ#3×#9Ñ#9Ö#;‘��iØ!%�	”Ø&/�—‘˜dÑ#Ø—?“?Ü ŸI™I iÓ0�EØ!*§¡�E”JØ"+§.¡.�E”KØ5:�D—M‘M )§/¡/Ò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   € °Dr   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   øè ø€ ð 
á 5‘��fØ�{‰{˜QŠ¡4¨¤:ð �[‰[˜$ÔÙ 5ù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€Ù�m¡V£XÓ.€÷Gñ G÷T
ò 
r   