Ë
    £èh"a  ã                  óz  — d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlmZ erd d	lmZ d d
lmZ d dlmZ ddgZ e	j>                  d«      Z dZ!dZ"dddddœZ# e$g d¢«      Z% G d„ d«      Z&	 	 	 	 	 	 	 	 d,d„Z'h d£Z( G d„ d«      Z)dddddd d!d"d#d$d%d&d'd(d)d*œZ*d-d+„Z+y).é    )Úannotations)ÚAnyÚOptionalÚUnionÚIterableÚTYPE_CHECKINGÚSetN)Úoptions)Úconst)ÚXTypeÚDXFAttributesÚDXFAttr)Ú
cast_valueÚdxftag)ÚTags)ÚExtendedTags)Ú	DXFEntity)ÚAbstractTagWriterÚDXFNamespaceÚSubclassProcessorÚezdxfz(Invalid DXF attribute "{}" for entity {}z!DXF attribute "{}" does not existÚon_layer_changeÚon_linetype_changeÚon_style_changeÚon_dimstyle_change)ÚlayerÚlinetypeÚstyleÚdimstyle)Ú_entityÚhandleÚownerc                  óD  — e Zd ZdZ	 	 d	 	 	 dd„Zd d„Zd!d"d„Zd#d„Zd$d„Zd„ Z		 	 d	 	 	 	 	 	 	 d%d	„Z
d&d
„Zd'd„Zd(d„Zd!d)d„Zd&d„Zd'd„Zd'd„Zd*d„Zdddœ	 	 	 	 	 d+d„Zd(d„Zd,d„Zd,d„Zed-d„«       Zed.d„«       Zd&d„Z	 	 	 	 	 	 d/d„Z	 	 	 	 	 	 d0d„Z	 	 	 	 	 	 d0d„Zy)1r   az  :class:`DXFNamespace` manages all named DXF attributes of an entity.

    The DXFNamespace.__dict__ is used as DXF attribute storage, therefore only
    valid Python names can be used as attrib name.

    The namespace can only contain immutable objects: string, int, float, bool,
    Vec3. Because of the immutability, copy and deepcopy are the same.

    (internal class)
    Nc                ó<  — |ry|j                   }|d   j                  dk(  rdnd}d }d }|D ]:  }|j                  }||k(  r|j                  }|sŒ# n|dk(  sŒ+|j                  }|sŒ: n | j                  |||«       y | j	                  «        | j                  |«       y )Nr   ÚDIMSTYLEéi   é   éJ  )Ú
base_classÚvalueÚcodeÚrewireÚreset_handles)	ÚselfÚ	processorÚentityr)   Úhandle_coder!   r"   ÚtagÚ
group_codes	            ú4lib/python3.12/site-packages/ezdxf/entities/dxfns.pyÚ__init__zDXFNamespace.__init__3   s¡   € ñ
 Ø"×-Ñ-ˆJØ!+¨A¡×!4Ñ!4¸
Ò!B™#ÈˆKð ˆFØˆEÛ!�Ø ŸX™X�
Ø Ò,Ø ŸY™Y�FÚÙØ 3Ó&ØŸI™I�EÚÙð "ð �K‰K˜ ¨Õ.à×ÑÔ Ø�K‰K˜Õó    c                óª   — | j                  «       }| j                  j                  «       D ]  \  }}||j                  |<   Œ |j                  |«       |S ©N)Ú	__class__Ú__dict__Úitemsr,   )r.   r0   Ú	namespaceÚkÚvs        r4   ÚcopyzDXFNamespace.copyO   sM   € Ø—N‘NÓ$ˆ	Ø—M‘M×'Ñ'Ö)‰DˆAˆqØ$%ˆI×Ñ˜qÒ!ð *à×Ñ˜Ô ØÐr6   c                ó8   — | j                  | j                  «      S r8   )r?   r    )r.   Úmemodicts     r4   Ú__deepcopy__zDXFNamespace.__deepcopy__V   s   € Ø�y‰y˜Ÿ™Ó&Ð&r6   c                ó   — | j                   S r8   ©r:   ©r.   s    r4   Ú__getstate__zDXFNamespace.__getstate__Y   s   € Ø�}‰}Ðr6   c                ó”   — t        |t        «      s!t        dt        |«      j                  › �«      ‚t
        j                  | d|«       y )Nzinvalid state: r:   )Ú
isinstanceÚdictÚ	TypeErrorÚtypeÚ__name__ÚobjectÚ__setattr__)r.   Ústates     r4   Ú__setstate__zDXFNamespace.__setstate__\   s;   € Ü˜%¤Ô&Ü˜o¬d°5«k×.BÑ.BÐ-CÐDÓEÐEä×Ñ˜4 ¨UÕ3r6   c                ó@   — d| j                   d<   d| j                   d<   y)zReset handle and owner to None.Nr!   r"   rD   rE   s    r4   r-   zDXFNamespace.reset_handlesb   s   € à"&ˆ�‰�hÑØ!%ˆ�‰�gÒr6   c                óh   — || j                   d<   |�|| j                   d<   |�|| j                   d<   yy)zÅRewire DXF namespace with parent entity

        Args:
            entity: new associated entity
            handle: new handle or None
            owner:  new entity owner handle or None

        r    Nr!   r"   rD   )r.   r0   r!   r"   s       r4   r,   zDXFNamespace.rewireg   s?   € ð $*ˆ�‰�iÑ ØÐØ&,ˆD�M‰M˜(Ñ#ØÐØ%*ˆD�M‰M˜'Ò"ð r6   c                ó*  — | j                   j                  |«      }|rD|j                  t        j                  k(  r|j                  | j                  «      S |j                  S t        j                  t        j                  || j                  «      «      ‚)z»Called if DXF attribute `key` does not exist, returns the DXF
        default value or ``None``.

        Raises:
            DXFAttributeError: attribute `key` is not supported

        )Ú
dxfattribsÚgetÚxtyper   ÚcallbackÚget_callback_valuer    Údefaultr   ÚDXFAttributeErrorÚERR_INVALID_DXF_ATTRIBÚformatÚdxftype)r.   ÚkeyÚ
attrib_defs      r4   Ú__getattr__zDXFNamespace.__getattr__|   su   € ð )-¯©×(;Ñ(;¸CÓ(@ˆ
ÙØ×Ñ¤5§>¡>Ò1Ø!×4Ñ4°T·\±\ÓBÐBà!×)Ñ)Ð)ä×)Ñ)Ü&×-Ñ-¨c°4·<±<Ó@óð r6   c                óÊ  ‡ ‡‡‡— dˆ fd„Šˆˆˆfd„}‰ j                   j                  ‰«      Š‰rP‰j                  t        j                  k(  r‰j                  ‰ j                  |«       nI ||«      ‰ j                  ‰<   n3t        j                  t        j                  ‰‰ j                  «      «      ‚‰t        v r*t        ‰ j                  t        ‰   d«      }|r	 ||«       yyy)ú~Set DXF attribute `key` to `value`.

        Raises:
            DXFAttributeError: attribute `key` is not supported

        c                 óz   •— ‰j                  d«      } ‰j                  }|r|j                  «       d| › d�z   S d| › �S )Nr!   z(#Ú)Ú#)rU   r    r]   )r!   r    r.   s     €r4   r0   z(DXFNamespace.__setattr__.<locals>.entity—   sC   ø€ à—X‘X˜hÓ'ˆFØ—l‘lˆGÙØ—‘Ó(¨R°¨x°q¨>Ñ9Ð9à˜6˜(�|Ð#r6   c           
     óH  •— t        ‰j                  | «      } ‰j                  | «      sy‰j                  r@‰j                  | «      } t        j                  d‰› d ‰«       › dt        | «      › d�«       | S t        j                  dt        | «      › d‰› d ‰«       › d�«      ‚| S )NzFixed invalid attribute "z" in entity z to "z".zInvalid value z for attribute "Ú.)	r   r+   Úis_valid_valueÚfixerÚloggerÚdebugÚstrr   ÚDXFValueError)r*   r_   r0   r^   s    €€€r4   Úcheckz'DXFNamespace.__setattr__.<locals>.check    s³   ø€ Ü˜zŸ™°Ó6ˆEØ×,Ñ,¨UÔ3Ø×#Ò#Ø&×,Ñ,¨UÓ3�EÜ—L‘LØ3°C°5ð 9Ù"›H˜: U¬3¨u«:¨,°bð:ôð ˆLô	  ×-Ñ-Ø(¬¨U«¨Ð4DÀSÀEð J"Ù"(£( ¨1ð.óð ð ˆLr6   N©Úreturnrl   )rT   rU   rV   r   rW   Úset_callback_valuer    r:   r   rZ   r[   r\   r]   ÚSETTER_EVENTSÚgetattr)r.   r^   r*   rn   Úhandlerr_   r0   s   ``   @@r4   rN   zDXFNamespace.__setattr__�   sº   û€ õ	$ö	ð  )-¯©×(;Ñ(;¸CÓ(@ˆ
ÙØ×Ñ¤5§>¡>Ò1Ø×-Ñ-¨d¯l©l¸EÕBá%*¨5£\�—‘˜cÒ"ä×)Ñ)Ü&×-Ñ-¨c°4·<±<Ó@óð ð ”-ÑÜ˜dŸl™l¬M¸#Ñ,>ÀÓEˆGÙÙ˜•ð ð  r6   c                ó�   — | j                  |«      r| j                  |= yt        j                  t        j                  |«      «      ‚)ztDelete DXF attribute `key`.

        Raises:
            DXFAttributeError: attribute `key` does not exist

        N)Úhasattrr:   r   rZ   ÚERR_DXF_ATTRIB_NOT_EXITSr\   ©r.   r^   s     r4   Ú__delattr__zDXFNamespace.__delattr__À   s9   € ð �<‰<˜ÔØ—‘˜cÑ"ä×)Ñ)Ô*B×*IÑ*IÈ#Ó*NÓOÐOr6   c                óV  — | j                  |«      r| j                  |   S | j                  j                  |«      }|r:|j                  t
        j                  k(  r|j                  | j                  «      S |S t        j                  t        j                  || j                  «      «      ‚)zÐReturns value of DXF attribute `key` or the given `default` value
        not DXF default value for unset attributes.

        Raises:
            DXFAttributeError: attribute `key` is not supported

        )rv   r:   rT   rU   rV   r   rW   rX   r    r   rZ   r[   r\   r]   )r.   r^   rY   r_   s       r4   rU   zDXFNamespace.getÌ   s‰   € ð �<‰<˜Ôà—=‘= Ñ%Ð%Ø*.¯/©/×*=Ñ*=¸cÓ*Bˆ
ÙØ×Ñ¤5§>¡>Ò1Ø!×4Ñ4°T·\±\ÓBÐBà�ä×)Ñ)Ü&×-Ñ-¨c°4·<±<Ó@óð r6   c                óP   — | j                  |d«      }|€| j                  |«      S |S )z8Returns DXF default value for unset DXF attribute `key`.N)rU   Údxf_default_value©r.   r^   r*   s      r4   Úget_defaultzDXFNamespace.get_defaultã   s,   € à—‘˜˜dÓ#ˆØ.3¨mˆt×%Ñ% cÓ*ÐFÀÐFr6   c                ó(   — | j                  ||«       y)rb   N)rN   r}   s      r4   ÚsetzDXFNamespace.setè   s   € ð 	×Ñ˜˜eÕ$r6   c                ó"   — || j                   |<   y)z²Set DXF attribute `key` to `value` without any validity checks.

        Used for fast attribute setting without validity checks at loading time.

        (internal API)
        NrD   r}   s      r4   Úunprotected_setzDXFNamespace.unprotected_setñ   s   € ð #ˆ�‰�cÒr6   c                ó6   — t        | j                  «      }|d= |S )z@Returns all existing DXF attributes, except DXFEntity back-link.r    )rI   r:   )r.   Úattribss     r4   Úall_existing_dxf_attribsz%DXFNamespace.all_existing_dxf_attribsú   s   € ä�t—}‘}Ó%ˆØ�IÐØˆr6   F)ÚexcludeÚignore_errorsc               ó¸   — |€t         }ndh|z  }| j                  }|j                  «       D ]  \  }}||vsŒ	  |||«       Œ y# t        t        f$ r |s‚ Y Œ,w xY w)z,Update DXF namespace attributes from a dict.Nr    )ÚEXCLUDE_FROM_UPDATErN   r;   ÚAttributeErrorÚ
ValueError)r.   rT   r†   r‡   Úset_attributer=   r>   s          r4   ÚupdatezDXFNamespace.update   st   € ð ˆ?Ü)‰Gà �k GÑ+ˆGà×(Ñ(ˆØ×$Ñ$Ö&‰DˆAˆqØ˜ÒðÙ! ! QÕ'ñ 'øô '¬
Ð3ò Ù(Øñ )ðús   ¸	AÁAÁAc                ó>   — 	 | j                   |= y# t        $ r Y yw xY w)z:Delete DXF attribute `key` silently without any exception.N)r:   ÚKeyErrorrx   s     r4   ÚdiscardzDXFNamespace.discard  s%   € ð	Ø—‘˜cÑ"øÜò 	Ùð	ús   ‚ �	›c                ó   — || j                   v S )a  Returns True if DXF attribute `key` is supported else False.
        Does not grant that attribute `key` really exists and does not
        check if the actual DXF version of the document supports this
        attribute, unsupported attributes will be ignored at export.

        )rT   rx   s     r4   Úis_supportedzDXFNamespace.is_supported  s   € ð �d—o‘oÐ%Ð%r6   c                ó   — || j                   v S )z9Returns True if attribute `key` really exists else False.rD   rx   s     r4   rv   zDXFNamespace.hasattr&  s   € à�d—m‘mÐ#Ð#r6   c                ó.   — | j                   j                  S )zReturns the DXF entity type.)r    ÚDXFTYPErE   s    r4   r]   zDXFNamespace.dxftype*  s   € ð �|‰|×#Ñ#Ð#r6   c                ó.   — | j                   j                  S )z%Returns the DXF attribute definition.)r    Ú
DXFATTRIBSrE   s    r4   rT   zDXFNamespace.dxfattribs/  s   € ð �|‰|×&Ñ&Ð&r6   c                óV   — | j                   j                  |«      }|r|j                  S y)z9Returns the default value as defined in the DXF standard.N)rT   rU   rY   )r.   r^   Úattribs      r4   r|   zDXFNamespace.dxf_default_value4  s&   € à$(§O¡O×$7Ñ$7¸Ó$<ˆÙØ—>‘>Ð!àr6   c                ó|   — t        |t        «      r| j                  ||«       y|D ]  }| j                  ||«       Œ y)a¢  Exports DXF attribute `name` by `tagwriter`. Non-optional attributes
        are forced and optional tags are only written if different to default
        value. DXF version check is always on: does not export DXF attribs
        which are not supported by tagwriter.dxfversion.

        Args:
            tagwriter: tag writer object
            attribs: DXF attribute name as string or an iterable of names

        N)rH   rl   Ú_export_dxf_attribute_optional)r.   Ú	tagwriterr„   Únames       r4   Úexport_dxf_attribszDXFNamespace.export_dxf_attribs<  s8   € ô �gœsÔ#Ø×/Ñ/°	¸7ÕCã�Ø×3Ñ3°I¸tÕDñ  r6   c                ó‚  — | j                   j                  |«      }|€3t        j                  t        j                  || j                  «      «      ‚|j                  }|j                  }| j                  |d«      }|€|s|}|€t        j                  d|› d�«       y|r|j                  s|�||k(  ryt        |||«       y)z…Exports DXF attribute `name` by `tagwriter`.

        Optional tags are only written if they differ from the default value.

        NúDXF attribute 'ú'' not written because its a None value.)rT   rU   r   rZ   r[   r\   r]   ÚoptionalrY   rj   rk   Úforce_optionalÚ_export_group_codes)r.   rœ   r�   r™   r¢   rY   r*   s          r4   r›   z+DXFNamespace._export_dxf_attribute_optionalO  sÄ   € ð %)§O¡O×$7Ñ$7¸Ó$=ˆØˆ>Ü×)Ñ)Ü&×-Ñ-¨d°D·L±LÓAóð ð —?‘?ˆØ—.‘.ˆØ—‘˜˜tÓ$ˆð ˆ=¡àˆEàˆ=Ü�L‰LØ! $ Ð'NÐOôð ñ Ø×-Ò-ØÐ#Ø˜5Ò àÜ˜I v¨uÕ5r6   c                óì   — | j                  |«      sy| j                  j                  |«      }|€J d|› d�«       ‚| j                  |«      }|€t        j	                  d|› d�«       yt        |||«       y)aK  Exports DXF attribute `name` by `tagwriter` if exists.

        If the attribute exists, and it's not None it will be written, the optional-flag
        is ignored.

        No default value will be written if the attribute doesn't exist!
        This method can not be used for attributes that are required (e.g. layer)!

        Nzexisting DXF attribute 'z*' has no definition class - internal errorr    r¡   )rv   rT   rU   rj   rk   r¤   )r.   rœ   r�   r™   r*   s        r4   Úexport_dxf_attribute_if_existsz+DXFNamespace.export_dxf_attribute_if_existsv  s‡   € ð �|‰|˜DÔ!Øà$(§O¡O×$7Ñ$7¸Ó$=ˆàÐð	Wà% d VÐ+UÐVó	WØð —‘˜“ˆØˆ=Ü�L‰LØ! $ Ð'NÐOôð Ü˜I v¨uÕ5r6   )NN)r/   zOptional[SubclassProcessor]r0   úOptional[DXFEntity])r0   r   r8   )rA   zOptional[dict])rp   rM   )rO   rM   rp   ÚNone)r0   r§   r!   úOptional[str]r"   r©   rp   r¨   )r^   rl   rp   r   )r^   rl   r*   r   rp   r¨   )r^   rl   rp   r¨   )r^   rl   rY   r   rp   r   )rp   rI   )rT   zdict[str, Any]r†   zOptional[Set[str]]rp   r¨   )r^   rl   rp   Úboolro   )rp   r   )rœ   r   r„   zUnion[str, Iterable]rp   r¨   )rœ   r   r�   rl   rp   r¨   )rL   Ú
__module__Ú__qualname__Ú__doc__r5   r?   rB   rF   rP   r-   r,   r`   rN   ry   rU   r~   r€   r‚   r…   r�   r�   r’   rv   Úpropertyr]   rT   r|   rž   r›   r¦   © r6   r4   r   r   '   s^  „ ñ	ð 26Ø&*ð à.ð ð $ó ó8ô'óó4ò&ð !%Ø#ð	+à#ð+ð ð+ð ð	+ð
 
ó+ó*ó&/ób
Pôó.Gó
%ó#óð '+Øñà"ðð $ð	ð 
óó,ó&ó$ð ò$ó ð$ð ò'ó ð'óðEØ*ðEØ5IðEà	óEð&%6Ø*ð%6Ø25ð%6à	ó%6ðN6Ø*ð6Ø25ð6à	ô6r6   c                ó’  — |€J ‚|€J ‚| j                   |j                   k  ry |j                  t        j                  k(  r't	        |«      dkD  r	 |j
                  |j                  f}t        |t        «      rd|vsJ d«       ‚d|vsJ d«       ‚t        |j                  |«      }| j                  |«       y # t        $ r |d d }Y Œ^w xY w)Né   Ú
zline break '\n' not allowedÚzline break '\r' not allowed)Ú
dxfversionrV   r   Úpoint2dÚlenÚxÚyrŠ   rH   rl   r   r+   Ú	write_tag)rœ   r™   r*   r2   s       r4   r¤   r¤   “  sÖ   € ð ÐÐÐØÐÐÐð ×Ñ˜f×/Ñ/Ò/Øð ‡|�|”u—}‘}Ò$¬¨U«°aªð	Ø—W‘W˜eŸg™gÐ&ˆEô �%œÔØ˜5Ñ Ð@Ð"@Ó@Ð Ø˜5Ñ Ð@Ð"@Ó@Ð Ü
�—‘˜eÓ
$€CØ×Ñ˜Õøô ò 	Ø˜"˜1�IŠEð	ús   ÁB5 Â5CÃC>   r   r'   r(   éf   c                  ó¤   — e Zd ZdZddd„Zed„ «       Z	 	 d	 	 	 	 	 dd„Zdd„Zdd„Z		 	 	 	 	 	 	 	 dd„Z
d	d
dœ	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 dd„Zy)r   z=Helper class for loading tags into entities. (internal class)Nc                ó´  — t        |j                  «      dk(  rt        d«      ‚t        |j                  «      | _        |j                  xs g | _        || _        |t        j                  k(  xs t        | j                  «      dk(  | _        |j                  «       | _
        |  	 |j                  «       | _        y # t        j                  $ r
 d| _        Y y w xY w)Nr   zInvalid tags.é   ú<?>)r¶   Ú
subclassesr‹   ÚlistÚembedded_objectsr´   r   ÚDXF12Úr12r]   r�   Ú
get_handler!   rm   )r.   Útagsr´   s      r4   r5   zSubclassProcessor.__init__²  s­   € Üˆt�‰Ó 1Ò$Ü˜_Ó-Ð-Ü&*¨4¯?©?Ó&;ˆŒØ,0×,AÑ,AÒ,GÀRˆÔØ)3ˆŒð %¬¯©Ñ3ÒS¼¸T¿_¹_Ó9MÐQRÑ9RˆŒØŸ™›ˆŒ	Ùð	 ØŸ/™/Ó+ˆD�KøÜ×"Ñ"ò 	 ØˆDŽKð	 ús   Â$B: Â:CÃCc                ó    — | j                   d   S ©Nr   )r¿   rE   s    r4   r)   zSubclassProcessor.base_classÆ  s   € à�‰˜qÑ!Ð!r6   c                ó”   — t         j                  r8|D ]2  }d}|rd|› �}t        j                  dt	        |«      › d|› �|z   «       Œ4 y y )NÚ z in entity #zignored z in subclass )r
   Úlog_unprocessed_tagsrj   ÚinfoÚrepr)r.   Úunprocessed_tagsÚsubclassr!   r2   r0   s         r4   rÊ   z&SubclassProcessor.log_unprocessed_tagsÊ  sR   € ô ×'Ò'Û'�Ø�ÙØ+¨F¨8Ð4�FÜ—‘˜h¤t¨C£y k°¸x¸jÐIÈFÑRÕSñ	 (ð (r6   c                ój   — | j                   D ]$  }t        |«      sŒ|d   j                  |k(  sŒ"|c S  y rÇ   )r¿   r¶   r*   )r.   r�   rÎ   s      r4   Úfind_subclasszSubclassProcessor.find_subclass×  s2   € ØŸœˆHÜ�8�} ¨!¡×!2Ñ!2°dÓ!:Ø’ð (ð r6   c                ó@   — 	 | j                   |   S # t        $ r Y y w xY wr8   )r¿   Ú
IndexError)r.   Úindexs     r4   Úsubclass_by_indexz#SubclassProcessor.subclass_by_indexÝ  s(   € ð	Ø—?‘? 5Ñ)Ð)øÜò 	Ùð	ús   ‚ ‘	œc                óˆ   — | j                  |«      }|r.t        |«      dkD  r |d   }|j                  |k(  r|j                  S |S )Nr½   )rÔ   r¶   r+   r*   )r.   Úsubclass_indexr3   rY   rÎ   r2   s         r4   Údetect_implementation_versionz/SubclassProcessor.detect_implementation_versionã  sF   € ð ×)Ñ)¨.Ó9ˆÙœ˜H›¨Ò)à˜1‘+ˆCØ�x‰x˜:Ò%Ø—y‘yÐ Øˆr6   FT)ÚrecoverÚlogc               óp  — | j                   r| j                  d   }nFt        |t        «      r| j	                  |«      }n$t        |t
        «      r| j                  |«      }n|}t        «       }|�t        |«      dk(  r|S t        «       }|j                  }	|j                  }
|j                  }|j                  }|d   j                  dv rdnd}||d D ]z  } |	|j                  «      }t        |t        «      r|}d}|D ]  }||vsŒ|} ||«        n |r1|d   dk7  sŒK ||t!        |j                  |j"                  «      «       Œs |
|«       Œ| | j                   r|S |rt        |«      rt%        ||«      }t        |«      r4|r2|d   j"                  }| j'                  |||j                  d«      ¬«       |S )a2  Load DXF attributes into the DXF namespace and returns the
        unprocessed tags without leading subclass marker(100, AcDb...).
        Bypasses the DXF attribute validity checks.

        Args:
            dxf: entity DXF namespace
            group_code_mapping: group code to DXF attribute name mapping,
                callback attributes have to be marked with a leading "*"
            subclass: subclass by index, by name or as Tags()
            recover: recover graphic attributes
            log: enable/disable logging of unprocessed tags

        r   N)r   éd   r½   Ú*r!   )rÎ   r!   )rÃ   r¿   rH   ÚintrÔ   rl   rÐ   r   r¶   r€   rU   Úappendr‚   Úaddr+   rÀ   r   r*   Úrecover_graphic_attributesrÊ   )r.   ÚdxfÚgroup_code_mappingrÎ   rØ   rÙ   rÅ   rÍ   Úprocessed_namesÚget_attrib_nameÚappend_unprocessed_tagÚunprotected_set_attribÚmark_attrib_as_processedÚstartr2   r�   ÚnamesÚname_s                     r4   Úfast_load_dxfattribsz&SubclassProcessor.fast_load_dxfattribsï  s¾  € ð, �8Š8Ø—?‘? 1Ñ%‰Dä˜(¤CÔ(Ø×-Ñ-¨hÓ7‘Ü˜H¤cÔ*Ø×)Ñ)¨(Ó3‘à�ä›6ÐØˆ<œ3˜t›9¨š>Ø#Ð#ä$'£Eˆà,×0Ñ0ˆØ!1×!8Ñ!8ÐØ!$×!4Ñ!4ÐØ#2×#6Ñ#6Ð ð ˜!‘W—\‘\ XÑ-‘°1ˆØ˜˜“<ˆCÙ" 3§8¡8Ó,ˆDÜ˜$¤Ô%Ø�ð �ó #�EØ OÒ3Ø$˜Ù0°Ô7Ùð	 #ñ
 ð ˜‘7˜c“>Ù*Øœj¨¯©°3·9±9Ó=õñ ' sÕ+ð-  ð0 �8Š8ð
 $Ð#ñ ”sÐ+Ô,ô  :Ð:JÈCÓPÐÜÐÔ ¡Sà˜‘7—=‘=ˆDØ×%Ñ%Ø ¨4¸¿¹ÀÓ8Ið &ô ð  Ðr6   c                ó˜   — | j                   ry| j                  d   }|d   dk(  r&|j                  d„ | j                  d   D «       «       yy)z¡It is valid to mix up the base class with AcDbEntity class.
        This method appends all none base class group codes to the
        AcDbEntity class.
        Nr½   r   )rÛ   Ú
AcDbEntityc              3  óF   K  — | ]  }|j                   t        vsŒ|–— Œ y ­wr8   )r+   ÚBASE_CLASS_CODES)Ú.0r2   s     r4   Ú	<genexpr>zESubclassProcessor.append_base_class_to_acdb_entity.<locals>.<genexpr>W  s!   è ø€ ð $Ù1˜°S·X±XÔEUÒ5U”Ñ1ùs   ‚!š!)rÃ   r¿   Úextend)r.   Úacdb_entity_tagss     r4   Ú append_base_class_to_acdb_entityz2SubclassProcessor.append_base_class_to_acdb_entityH  sT   € ð �8Š8ØàŸ?™?¨1Ñ-ÐØ˜AÑÐ"5Ò5Ø×#Ñ#ñ $Ø#Ÿ™¨qÒ1ó$õ ð 6r6   c                óL  — t         j                  j                  | j                  «      }|j                  }|j
                  }|D ]^  } ||j                  «      }t        |t        «      sŒ&|j                  d«      rŒ8 ||t        |j                  |j                  «      «       Œ` y)a‹  Load DXF attributes from all subclasses into the DXF namespace.

        Can not handle same group codes in different subclasses, does not remove
        processed tags or log unprocessed tags and bypasses the DXF attribute
        validity checks.

        This method ignores the subclass structure and can load data from
        very malformed DXF files, like such in issue #604.
        This method works only for very simple DXF entities with unique group
        codes in all subclasses, the old DXF R12 entities:

            - POINT
            - LINE
            - CIRCLE
            - ARC
            - INSERT
            - SHAPE
            - SOLID/TRACE/3DFACE
            - TEXT (ATTRIB/ATTDEF bypasses TEXT loader)
            - BLOCK/ENDBLK
            - POLYLINE/VERTEX/SEQEND
            - DIMENSION and subclasses
            - all table entries: LAYER, LTYPE, ...

        And the newer DXF entities:

            - ELLIPSE
            - RAY/XLINE

        The recover mode for graphical attributes is automatically included.
        Logging of unprocessed tags is not possible but also not required for
        this simple and well known entities.

        Args:
            dxf: entity DXF namespace
            group_code_mapping: group code name mapping for all DXF attributes
                from all subclasses, callback attributes have to be marked with
                a leading "*"

        rÜ   N)Ú	itertoolsÚchainÚfrom_iterabler¿   rU   r‚   r+   rH   rl   Ú
startswithr   r*   )r.   rá   râ   rÅ   rä   ræ   r2   r�   s           r4   Úsimple_dxfattribs_loaderz*SubclassProcessor.simple_dxfattribs_loader[  sz   € ôX �‰×,Ñ,¨T¯_©_Ó=ˆØ,×0Ñ0ˆØ!$×!4Ñ!4ÐÛˆCÙ" 3§8¡8Ó,ˆDÜ˜$¤Õ$¨T¯_©_¸SÕ-AÙ& t¬Z¸¿¹À#Ç)Á)Ó-LÕMñ r6   r8   )rÅ   r   r´   r©   )r¾   N)rÍ   r   r!   r©   rp   r¨   )r�   rl   rp   úOptional[Tags])rÓ   rÝ   rp   rû   )rÖ   rÝ   r3   rÝ   rY   rÝ   rp   rÝ   )rá   r   râ   zdict[int, Union[str, list]]rÎ   zUnion[int, str, Tags]rp   r   )rp   r¨   )rá   r   râ   zdict[int, str]rp   r¨   )rL   r«   r¬   r­   r5   r®   r)   rÊ   rÐ   rÔ   r×   rë   rô   rú   r¯   r6   r4   r   r   ¯  sÙ   „ ÙGô ð( ñ"ó ð"ð Ø $ð	Tà"ðTð ð	Tð
 
óTóóð	Ø!ð	Ø/2ð	Ø=@ð	à	ó	ð$ ØñW àðW ð 8ðW ð (ð	W ð 
óW órð&2NØð2NØ5Cð2Nà	ô2Nr6   r   r   ÚcolorÚ
paperspaceÚ
lineweightÚltscaleÚ	invisibleÚ
true_colorÚ
color_nameÚtransparencyÚshadow_modeÚmaterial_handleÚvisualstyle_handleÚplotstyle_enumÚplotstyle_handle)é   é   é>   éC   ir  é0   é<   i¤  i®  i¸  i  i[  i\  i|  i†  c                óè   — t        «       }| D ]b  }t        j                  |j                  «      }|r.|j	                  |«      s|j                  ||j                  «       ŒR|j                  |«       Œd |S r8   )r   ÚGRAPHIC_ATTRIBUTES_TO_RECOVERrU   r+   rv   r€   r*   rÞ   )rÅ   rá   rÍ   r2   Úattrib_names        r4   rà   rà   ¥  s`   € Ü“vÐÛˆÜ3×7Ñ7¸¿¹ÓAˆñ ˜sŸ{™{¨;Ô7Ø�G‰G�K §¡Õ+à×#Ñ# CÕ(ð ð Ðr6   )rœ   r   r™   r   r*   r   rp   r¨   )rÅ   r   rá   r   rp   r   ),Ú
__future__r   Útypingr   r   r   r   r   r	   Úloggingrö   r   r
   Úezdxf.lldxfr   Úezdxf.lldxf.attributesr   r   r   Úezdxf.lldxf.typesr   r   Úezdxf.lldxf.tagsr   Úezdxf.lldxf.extendedtagsr   Úezdxf.entitiesr   Úezdxf.lldxf.tagwriterr   Ú__all__Ú	getLoggerrj   r[   rw   rr   Ú	frozensetr‰   r   r¤   rï   r   r  rà   r¯   r6   r4   Ú<module>r     s  ðõ #ß E× EÛ Û Ý Ý ß @Ñ @ß 0Ý !áÝ5Ý(Ý7ð Ð.Ð
/€Ø	ˆ×	Ñ	˜7Ó	#€àCÐ Ø>Ð ð Ø$ØØ$ñ	€ñ  Ò >Ó?Ð ÷i6ñ i6ðXØ ðØ*1ðØ:=ðà	óò2 $Ð ÷^Nñ ^NðD ØØØØ	ØØØ	Ø	Ø	Ø	Ø	Ø	Ø	Ø	ñ!Ð ô*
r6   