Ë
    £èhI  ã                  ó.  — U 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Zd dlZd dlm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 ddlmZmZmZm Z m!Z! e
rddl"m#Z#  G d„ de«      Z$ee$   Z%de&d<    G d„ d«      Z' G d„ de«      Z( e(ejR                  dd e*«       «      Z+ G d„ de«      Z, G d„ de«      Z- G d„ de!e(   «      Z.	 	 	 	 	 	 d'd„Z/d(d„Z0d)d„Z1 G d„ d e «      Z2d*d!„Z3d+d"„Z4d,d#„Z5 e6ejn                  jp                  g«      Z9 e6ejt                  jp                  g«      Z; e6ejx                  jp                  g«      Z= e6ej|                  jp                  g«      Z? e6ej€                  jp                  g«      ZAd$ZB G d%„ d&«      ZCy)-é    )Úannotations)Ú
NamedTupleÚAnyÚSequenceÚIteratorÚUnionÚIterableÚcastÚTYPE_CHECKINGÚListÚTupleÚOptional)Ú	TypeAliasN)Údatetime)ÚVec3é   )Úconst)ÚParsingErrorÚTagsÚInvalidLinkStructure)Ú
AcisHeader)ÚAbstractEntityÚ
DataLoaderÚAbstractBuilderÚDataExporterÚEntityExporter)Ú
AcisEntityc                  ó,   — e Zd ZU dZded<   ded<   d„ Zy)ÚTokenz;Named tuple to store tagged value tokens of the SAB format.ÚintÚtagr   Úvaluec                óP   — d| j                   d›dt        | j                  «      › d�S )Nz(0xÚ02xz, Ú))r!   Ústrr"   ©Úselfs    ú.lib/python3.12/site-packages/ezdxf/acis/sab.pyÚ__str__zToken.__str__,   s&   € Ø�T—X‘X˜c�N "¤S¨¯©£_Ð$5°QÐ7Ð7ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r*   © r+   r)   r   r   &   s   … ÙEà	ƒHØƒJó8r+   r   r   Ú	SabRecordc                  ó†   — e Zd Zdd„Zedd„«       Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd„Zdd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zy)ÚDecoderc                ó    — || _         d| _        y ©Nr   )ÚdataÚindex©r(   r7   s     r)   Ú__init__zDecoder.__init__4   s   € ØˆŒ	Øˆ�
r+   c                óF   — | j                   t        | j                  «      k  S ©N©r8   Úlenr7   r'   s    r)   Úhas_datazDecoder.has_data8   s   € à�z‰zœC §	¡	›NÑ*Ð*r+   c                óŒ  — t        «       }t        j                  D ]/  }| j                  j	                  |«      sŒt        |«      | _         n t        d«      ‚| j                  «       |_	        | j                  «       |_
        | j                  «       |_        | j                  «       |_        | j                  «       |_        | j                  «       |_        | j                  «       }t!        j"                  |t        j$                  «      |_        | j)                  «       |_        | j)                  «       }| j)                  «       }|S )Nznot a SAB file)r   r   Ú
SIGNATURESr7   Ú
startswithr>   r8   r   Úread_intÚversionÚ	n_recordsÚ
n_entitiesÚflagsÚread_str_tagÚ
product_idÚacis_versionr   ÚstrptimeÚDATE_FMTÚcreation_dateÚread_double_tagÚunits_in_mm)r(   ÚheaderÚ	signatureÚdateÚ_s        r)   Úread_headerzDecoder.read_header<   sø   € Ü“ˆÜ×)Ô)ˆIØ�y‰y×#Ñ# IÕ.Ü  ›^�”
Ùð *ô
 Ð/Ó0Ð0ØŸ™›ˆŒØŸ=™=›?ˆÔØ ŸM™M›OˆÔØ—}‘}“ˆŒØ ×-Ñ-Ó/ˆÔØ"×/Ñ/Ó1ˆÔØ× Ñ Ó"ˆÜ'×0Ñ0°´u·~±~ÓFˆÔØ!×1Ñ1Ó3ˆÔà× Ñ Ó"ˆØ× Ñ Ó"ˆØˆr+   c                óH   — | j                   }| xj                   |z  c_         |S r<   )r8   ©r(   ÚcountÚposs      r)   ÚforwardzDecoder.forwardR   s   € Ø�j‰jˆØ�
Š
�eÑ�
Øˆ
r+   c                óB   — | j                  d«      }| j                  |   S )Nr   ©rY   r7   ©r(   rX   s     r)   Ú	read_bytezDecoder.read_byteW   s   € Ø�l‰l˜1‹oˆØ�y‰y˜‰~Ðr+   c                óH   — | j                  |«      }| j                  |||z    S r<   r[   rV   s      r)   Ú
read_byteszDecoder.read_bytes[   s%   € Ø�l‰l˜5Ó!ˆØ�y‰y˜˜s U™{Ð+Ð+r+   c                óp   — | j                  d«      }t        j                  d| j                  |«      d   }|S )Né   z<ir   ©rY   ÚstructÚunpack_fromr7   )r(   rX   Úvaluess      r)   rC   zDecoder.read_int_   s1   € Ø�l‰l˜1‹oˆÜ×#Ñ# D¨$¯)©)°SÓ9¸!Ñ<ˆØˆr+   c                ól   — | j                  d«      }t        j                  d| j                  |«      d   S )Né   z<dr   rb   r\   s     r)   Ú
read_floatzDecoder.read_floatd   s-   € Ø�l‰l˜1‹oˆÜ×!Ñ! $¨¯	©	°3Ó7¸Ñ:Ð:r+   c                ót   — | j                  d|z  «      }t        j                  d|› d�| j                  |«      S )Nrg   Ú<Údrb   rV   s      r)   Úread_floatszDecoder.read_floatsh   s5   € Ø�l‰l˜1˜u™9Ó%ˆÜ×!Ñ! A e W¨A ,°·	±	¸3Ó?Ð?r+   c                óD   — | j                  |«      }|j                  «       S r<   )r_   Údecode)r(   ÚlengthÚtexts      r)   Úread_strzDecoder.read_strl   s   € Ø�‰˜vÓ&ˆØ�{‰{‹}Ðr+   c                óœ   — | j                  «       }|t        j                  k7  rt        d«      ‚| j	                  | j                  «       «      S )Nzstring tag (7) not found)r]   r   ÚSTRr   rq   ©r(   r!   s     r)   rH   zDecoder.read_str_tagp   s;   € Ø�n‰nÓˆØ”$—(‘(Š?ÜÐ9Ó:Ð:Ø�}‰}˜TŸ^™^Ó-Ó.Ð.r+   c                ó~   — | j                  «       }|t        j                  k7  rt        d«      ‚| j	                  «       S )Nzdouble tag (6) not found)r]   r   ÚDOUBLEr   rh   rt   s     r)   rN   zDecoder.read_double_tagv   s3   € Ø�n‰nÓˆØ”$—+‘+ÒÜÐ9Ó:Ð:Ø�‰Ó Ð r+   c           	     ó¼  ‡— ˆfd„}g }g Šd}	 | j                   s0|r#|d   }|j                  t        j                  v r|S t	        d«      ‚| j                  «       }|t        j                  k(  r+|j                  t        || j                  «       «      «       �nÄ|t        j                  k(  r+|j                  t        || j                  «       «      «       �n†|t        j                  k(  r:|j                  t        || j                  | j                  «       «      «      «       �n9|t        j                  k(  r+|j                  t        || j                  «       «      «       �nû|t        j                   k(  r|j                  t        |d«      «       �nË|t        j"                  k(  r|j                  t        |d«      «       �n›|t        j$                  k(  r:|j                  t        || j                  | j                  «       «      «      «       �nN|t        j&                  k(  r0‰j                  | j                  | j                  «       «      «       �n|t        j(                  k(  r`‰j                  | j                  | j                  «       «      «       |j                  t        | |«       «      «       ‰j+                  «        �n˜|t        j,                  k(  r,|j                  t        || j/                  d«      «      «       �nY|t        j0                  k(  r,|j                  t        || j/                  d«      «      «       �n|t        j2                  k(  r*|j                  t        || j                  «       «      «       nÝ|t        j4                  k(  r*|j                  t        || j                  «       «      «       n |t        j6                  k(  r!|dz  }|j                  t        ||«      «       nl|t        j8                  k(  r!|j                  t        ||«      «       |dz  }n8|t        j:                  k(  r|S t	        d|d	›d
|› d|d   j                  › d�«      ‚�ŒP)Nc                 ó&   •— dj                  ‰ «      S )NÚ-)Újoin)Úentity_types   €r)   Úentity_namez(Decoder.read_record.<locals>.entity_name}   s   ø€ Ø—8‘8˜KÓ(Ð(r+   r   Tzpre-mature end of dataFé   r   zunknown SAB tag: 0xÚxz (z) in entity 'Ú')r?   r"   r   ÚDATA_END_MARKERSr   r]   r   ÚINTÚappendr   rC   rv   rh   rs   rq   ÚPOINTERÚ	BOOL_TRUEÚ
BOOL_FALSEÚLITERAL_STRÚENTITY_TYPE_EXÚENTITY_TYPEÚclearÚLOCATION_VECrl   ÚDIRECTION_VECÚENUMÚUNKNOWN_0x17ÚSUBTYPE_STARTÚSUBTYPE_ENDÚ
RECORD_END)r(   r|   re   Úsubtype_levelÚtokenr!   r{   s         @r)   Úread_recordzDecoder.read_record|   s%  ø€ ô	)ð ˆØ!#ˆØˆØØ—=’=ÙØ" 1™I�EØ—{‘{¤e×&<Ñ&<Ñ<Ø%˜Ü"Ð#;Ó<Ð<Ø—.‘.Ó"ˆCØ”d—h‘hŠØ—‘œe C¨¯©«Ó9Ö:ØœŸ™Ò#Ø—‘œe C¨¯©Ó):Ó;Ö<ØœŸ™’Ø—‘œe C¨¯©°t·~±~Ó7GÓ)HÓIÖJØœŸ™Ò$Ø—‘œe C¨¯©«Ó9Ö:ØœŸ™Ò&Ø—‘œe C¨Ó.Ö/ØœŸ™Ò'Ø—‘œe C¨Ó/Ö0Øœ×(Ñ(Ò(Ø—‘œe C¨¯©°t·}±}³Ó)GÓHÖIØœ×+Ñ+Ò+Ø×"Ñ" 4§=¡=°·±Ó1AÓ#BÖCØœ×(Ñ(Ò(Ø×"Ñ" 4§=¡=°·±Ó1AÓ#BÔCØ—‘œe C©«Ó7Ô8Ø×!Ñ!Ö#Øœ×)Ñ)Ò)Ø—‘œe C¨×)9Ñ)9¸!Ó)<Ó=Ö>Øœ×*Ñ*Ò*Ø—‘œe C¨×)9Ñ)9¸!Ó)<Ó=Ö>ØœŸ	™	Ò!Ø—‘œe C¨¯©«Ó9Õ:Øœ×)Ñ)Ò)Ø—‘œe C¨¯©Ó):Ó;Õ<Øœ×*Ñ*Ò*Ø Ñ"�Ø—‘œe C¨Ó7Õ8Øœ×(Ñ(Ò(Ø—‘œe C¨Ó7Ô8Ø Ñ"‘ØœŸ™Ò'Ø�ä"Ø)¨#¨a¨°°3°%°}ÀVÈAÁYÇ_Á_ÐDUÐUVÐWóð ñ[ r+   c              #  óp   K  — 	 	 | j                   r| j                  «       –— ny 	 Œ## t        $ r Y y w xY w­wr<   )r?   r“   Ú
IndexErrorr'   s    r)   Úread_recordszDecoder.read_records´   sD   è ø€ ØðØ—=’=Ø×*Ñ*Ó,Ó,àð -ð øô ò Ùðüs   ‚6…' ¤6§	3°6²3³6N)r7   Úbytes©ÚreturnÚbool)r™   r   )rW   r    )r™   r    )rW   r    r™   r—   ©r™   Úfloat)rW   r    r™   zSequence[float]©r™   r&   )r™   r2   )r™   úIterator[SabRecord])r,   r-   r.   r:   Úpropertyr?   rT   rY   r]   r_   rC   rh   rl   rq   rH   rN   r“   r–   r1   r+   r)   r4   r4   3   sY   „ óð ò+ó ð+óó,ó
ó,óó
;ó@óó/ó!ó6ôpr+   r4   c                  ó4   — e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 dd„Zd„ Zy)Ú	SabEntityz2Low level representation of an ACIS entity (node).Nc                óR   — || _         || _        || _        |�|ng | _        d | _        y r<   )ÚnameÚattr_ptrÚidr7   Ú
attributes)r(   r£   r¤   r¥   r7   s        r)   r:   zSabEntity.__init__Â   s.   € ð ˆŒ	Ø ˆŒØˆŒØ'+Ð'7™t¸RˆŒ	Ø'+ˆ�r+   c                ó:   — | j                   › d| j                  › d�S )NÚ(r%   )r£   r¥   r'   s    r)   r*   zSabEntity.__str__Ï   s   € Ø—)‘)�˜A˜dŸg™g˜Y aÐ(Ð(r+   )éÿÿÿÿr©   N)r£   r&   r¤   r    r¥   r    r7   zOptional[SabRecord])r,   r-   r.   r/   r:   r*   r1   r+   r)   r¡   r¡   ¿   s@   „ Ù<ð
 ØØ$(ð,àð,ð ð,ð ð	,ð
 "ó,ó)r+   r¡   r©   c                  ó^   — e Z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	„Z
dd
„Zdd„Zy)ÚSabDataLoaderc                ó.   — || _         || _        d| _        y r6   )rD   r7   r8   )r(   r7   rD   s      r)   r:   zSabDataLoader.__init__×   s   € ØˆŒØˆŒ	Øˆ�
r+   c                óF   — | j                   t        | j                  «      k  S r<   r=   r'   s    r)   r?   zSabDataLoader.has_dataÜ   s   € Ø�z‰zœS §¡›^Ñ+Ð+r+   Nc                óè   — | j                   | j                     }|j                  t        j                  k(  r/| xj                  dz  c_        t        t        |j                  «      S t        d|› �«      ‚)Nr   zexpected int token, got )	r7   r8   r!   r   r�   r
   r    r"   r   )r(   Úskip_satr’   s      r)   rC   zSabDataLoader.read_intß   sU   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œŸ™Ò Ø�JŠJ˜!‰O�JÜœ˜UŸ[™[Ó)Ð)ÜÐ5°e°WÐ=Ó>Ð>r+   c                óè   — | j                   | j                     }|j                  t        j                  k(  r/| xj                  dz  c_        t        t        |j                  «      S t        d|› �«      ‚)Nr   zexpected double token, got )	r7   r8   r!   r   rv   r
   rœ   r"   r   ©r(   r’   s     r)   Úread_doublezSabDataLoader.read_doubleæ   sU   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œŸ™Ò#Ø�JŠJ˜!‰O�JÜœ˜uŸ{™{Ó+Ð+ÜÐ8¸¸Ð@ÓAÐAr+   c                ój   — | j                  dd«      }|r| j                  «       S t        j                  S )NÚFÚI)Ú	read_boolr²   ÚmathÚinf)r(   Úfinites     r)   Úread_intervalzSabDataLoader.read_intervalí   s-   € Ø—‘  SÓ)ˆÙØ×#Ñ#Ó%Ð%Ü�x‰xˆr+   c                ó*  — | j                   | j                     }|j                  t        j                  t        j
                  fv rA| xj                  dz  c_        t        t        t        t        t        f   |j                  «      S t        d|› �«      ‚)Nr   zexpected vector token, got )r7   r8   r!   r   rŠ   r‹   r
   r   rœ   r"   r   r±   s     r)   Ú	read_vec3zSabDataLoader.read_vec3ó   sn   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œ×*Ñ*¬D×,>Ñ,>Ð?Ñ?Ø�JŠJ˜!‰O�JÜœœe¤U¬EÐ1Ñ2°E·K±KÓ@Ð@ÜÐ8¸¸Ð@ÓAÐAr+   c                ó  — | j                   | j                     }|j                  t        j                  k(  r| xj                  dz  c_        y|j                  t        j
                  k(  r| xj                  dz  c_        yt        d|› �«      ‚)Nr   TFzexpected bool token, got )r7   r8   r!   r   r„   r…   r   )r(   ÚtrueÚfalser’   s       r)   r¶   zSabDataLoader.read_boolú   sg   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œŸ™Ò&Ø�JŠJ˜!‰O�JØØ�Y‰Yœ$Ÿ/™/Ò)Ø�JŠJ˜!‰O�JØÜÐ6°u°gÐ>Ó?Ð?r+   c                ó  — | j                   | j                     }|j                  t        j                  t        j
                  fv r/| xj                  dz  c_        t        t        |j                  «      S t        d|› �«      ‚)Nr   zexpected str token, got )
r7   r8   r!   r   rs   r†   r
   r&   r"   r   r±   s     r)   rq   zSabDataLoader.read_str  s`   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œŸ™¤4×#3Ñ#3Ð4Ñ4Ø�JŠJ˜!‰O�JÜœ˜UŸ[™[Ó)Ð)ÜÐ5°e°WÐ=Ó>Ð>r+   c                óè   — | j                   | j                     }|j                  t        j                  k(  r/| xj                  dz  c_        t        t        |j                  «      S t        d|› �«      ‚)Nr   zexpected pointer token, got )	r7   r8   r!   r   rƒ   r
   r   r"   r   r±   s     r)   Úread_ptrzSabDataLoader.read_ptr  sU   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�9‰9œŸ™Ò$Ø�JŠJ˜!‰O�JÜœ¨¯©Ó4Ð4ÜÐ9¸%¸ÐAÓBÐBr+   c                ó‚   — | j                  «       j                  d«      }|d d D �cg c]  }t        |«      ‘Œ c}S c c}w )NÚ é   )rq   Úsplitrœ   )r(   re   Úvs      r)   Úread_transformzSabDataLoader.read_transform  s<   € ð —‘“×&Ñ& sÓ+ˆØ"(¨¨"¡+Ó.¡+˜Q”�a• +Ñ.Ð.ùÒ.s   §<)r7   r2   rD   r    r˜   r<   )r¯   zOptional[int]r™   r    r›   )r™   ztuple[float, float, float])r¾   r&   r¿   r&   r™   rš   r�   )r™   r   )r™   zlist[float])r,   r-   r.   r:   r?   rC   r²   rº   r¼   r¶   rq   rÂ   rÈ   r1   r+   r)   r«   r«   Ö   s8   „ óó
,ô?óBóóBó@ó?óCô/r+   r«   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	Ú
SabBuilderz7Low level data structure to manage ACIS SAB data files.c                ó>   — t        «       | _        g | _        g | _        y r<   )r   rP   ÚbodiesÚentitiesr'   s    r)   r:   zSabBuilder.__init__  s   € Ü “lˆŒØ')ˆŒØ)+ˆ�r+   c                ó8  — | j                  «        t        | j                  «      t        | j                  j
                  «      z   | j                  _        d| j                  _        d| j                  _        | j                  j                  «       g}t        «       }t        | j                  «      D ]  }|j                  |«       Œ |j                  |j                  «       |j!                  | j                  j#                  «       «       dj%                  |«      S )z9Returns the SAB representation of the ACIS file as bytes.r   rÅ   r+   )Úreorder_recordsr>   rÌ   r    rP   Úhas_asm_headerrF   rE   rG   ÚdumpbÚEncoderÚbuild_sab_recordsrÍ   Úwrite_recordÚextendÚbufferr‚   Úsab_end_markerrz   )r(   r7   ÚencoderÚrecords       r)   Údump_sabzSabBuilder.dump_sab$  sÊ   € à×ÑÔÜ!$ T§[¡[Ó!1´CØ�K‰K×&Ñ&ó5
ñ "
ˆ�‰Ôð !"ˆ�‰ÔØˆ�‰ÔØ!Ÿ[™[×.Ñ.Ó0Ð1ˆÜ“)ˆÜ'¨¯©Ö6ˆFØ× Ñ  Õ(ð 7à�‰�G—N‘NÔ#Ø�‰�D—K‘K×.Ñ.Ó0Ô1Ø�x‰x˜‹~Ðr+   c                óf   — |D �cg c]  }|j                   dk(  sŒ|‘Œ c}| _        || _        yc c}w )z.Reset entities and bodies list. (internal API)ÚbodyN)r£   rÌ   rÍ   )r(   rÍ   Úes      r)   Úset_entitieszSabBuilder.set_entities4  s0   € á"*Ó?¡(˜Q¨a¯f©f¸Ó.>’q (Ñ?ˆŒØ ˆ�ùò @s   ….š.N©r™   ÚNone©r™   r—   )rÍ   úlist[SabEntity]r™   rà   )r,   r-   r.   r/   r:   rÚ   rÞ   r1   r+   r)   rÊ   rÊ     s   „ ÙAó,ó
ô !r+   rÊ   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚSabExporterc                ó^   — t        |j                  |j                  ¬«      }t        |_        |S )N)r¥   )r¡   Útyper¥   ÚNULL_PTRr¦   ©r(   ÚentityrÙ   s      r)   Úmake_recordzSabExporter.make_record;  s#   € Ü˜6Ÿ;™;¨6¯9©9Ô5ˆÜ$ˆÔØˆr+   c                ó.   — t        | |j                  «      S r<   )ÚSabDataExporterr7   )r(   rÙ   s     r)   Úmake_data_exporterzSabExporter.make_data_exporter@  s   € Ü˜t V§[¡[Ó1Ð1r+   c                ó–   — t        «       }| j                  |_        |j                  | j                  «       «       |j	                  «       S r<   )rÊ   rP   rÞ   Úexport_recordsrÚ   )r(   Úbuilders     r)   rÚ   zSabExporter.dump_sabC  s:   € Ü“,ˆØŸ™ˆŒØ×Ñ˜T×0Ñ0Ó2Ô3Ø×ÑÓ!Ð!r+   N)ré   r   r™   r¡   )rÙ   r¡   r™   r   rá   )r,   r-   r.   rê   rí   rÚ   r1   r+   r)   rä   rä   :  s   „ óó
2ô"r+   rä   c              #  óä  K  — | D ]ç  }|d   j                   t        j                  k(  sJ d«       ‚|d   j                  }|t        j
                  v rt        |«      –—  y |d   j                   t        j                  k(  sJ d«       ‚|d   j                  }d}|dk\  r<|d   j                   t        j                  k(  sJ d«       ‚|d   j                  }|d	d  }n|dd  }t        ||||«      –— Œé y ­w)
Nr   zinvalid entity-name tagr   zinvalid attribute pointer tagr©   i¼  é   zinvalid id tagr}   )	r!   r   rˆ   r"   r   r€   r¡   rƒ   r�   )ÚrecordsrD   rÙ   r£   ÚattrÚid_r7   s          r)   Úbuild_entitiesrö   J  sé   è ø€ ó ˆØ�a‰y�}‰}¤× 0Ñ 0Ò0ÐKÐ2KÓKÐ0Ø�a‰y�‰ˆØ”5×)Ñ)Ñ)Ü˜D“/Ò!ÙØ�a‰y�}‰}¤§¡Ò,ÐMÐ.MÓMÐ,Ø�a‰y�‰ˆØˆØ�cŠ>Ø˜!‘9—=‘=¤D§H¡HÒ,Ð>Ð.>Ó>Ð,Ø˜‘)—/‘/ˆCØ˜!˜"�:‰Dà˜!˜"�:ˆDÜ˜˜d C¨Ó.Ó.ñ ùs   ‚C.C0c                ó:  ‡ — dˆ fd„}‰ D ]Ž  } ||j                   «      |_        d|_         t        |j                  «      D ]V  \  }}|j                  t
        j                  k(  sŒ$t        |j                   ||j                  «      «      |j                  |<   ŒX Œ� ‰ S )Nc                ó$   •— | dk(  rt         S ‰|    S )Nr©   )rç   )ÚnumrÍ   s    €r)   Úptrzresolve_pointers.<locals>.ptr`  s   ø€ Ø�"Š9ÜˆOØ˜‰}Ðr+   r©   )rù   r    r™   r¡   )	r¤   r¦   Ú	enumerater7   r!   r   rƒ   r   r"   )rÍ   rú   ré   r8   r’   s   `    r)   Úresolve_pointersrü   _  s|   ø€ õó
 ˆÙ §¡Ó0ˆÔØˆŒÜ% f§k¡kÖ2‰LˆE�5Ø�y‰yœDŸL™LÓ(Ü%*¨5¯9©9±c¸%¿+¹+Ó6FÓ%G�—‘˜EÒ"ñ 3ð ð €Or+   c                ó>  — t        | t        t        f«      st        d«      ‚t	        «       }t        | «      }|j                  «       |_        t        t        |j                  «       |j                  j                  «      «      }|j                  t        |«      «       |S )zÁReturns the :class:`SabBuilder` for the ACIS :term:`SAB` file content
    given as string or list of strings.

    Raises:
        ParsingError: invalid or unsupported ACIS data structure

    zexpected bytes, bytearray)Ú
isinstancer—   Ú	bytearrayÚ	TypeErrorrÊ   r4   rT   rP   Úliströ   r–   rD   rÞ   rü   )r7   rð   ÚdecoderrÍ   s       r)   Ú	parse_sabr  n  s�   € ô �dœU¤IÐ.Ô/ÜÐ3Ó4Ð4Ü‹l€GÜ�d‹m€GØ×(Ñ(Ó*€G„NÜÜ�w×+Ñ+Ó-¨w¯~©~×/EÑ/EÓFó€Hð ×ÑÔ)¨(Ó3Ô4Ø€Nr+   c                  óf   — e Zd Zdd„Zddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zy)rì   c                óB   — |j                   | _         || _        || _        y r<   )rD   Úexporterr7   )r(   r  r7   s      r)   r:   zSabDataExporter.__init__ƒ  s   € Ø×'Ñ'ˆŒØ ˆŒØˆ�	r+   c                ój   — | j                   j                  t        t        j                  |«      «       y)z™There are sometimes additional int values in SAB files which are
        not present in SAT files, maybe reference counters e.g. vertex, coedge.
        N)r7   r‚   r   r   r�   )r(   r"   r¯   s      r)   Ú	write_intzSabDataExporter.write_intˆ  s!   € ð 	�	‰	×ÑœœtŸx™x¨Ó/Õ0r+   c                ój   — | j                   j                  t        t        j                  |«      «       y r<   )r7   r‚   r   r   rv   ©r(   r"   s     r)   Úwrite_doublezSabDataExporter.write_doubleŽ  s   € Ø�	‰	×ÑœœtŸ{™{¨EÓ2Õ3r+   c                ó  — t        j                  |«      r4| j                  j                  t	        t
        j                  d«      «       y | j                  j                  t	        t
        j                  d«      «       | j                  |«       y )NFT)	r·   Úisinfr7   r‚   r   r   r…   r„   r  r
  s     r)   Úwrite_intervalzSabDataExporter.write_interval‘  sV   € Ü�:‰:�eÔØ�I‰I×ÑœU¤4§?¡?°EÓ:Õ;à�I‰I×ÑœU¤4§>¡>°4Ó8Ô9Ø×Ñ˜eÕ$r+   c                ój   — | j                   j                  t        t        j                  |«      «       y r<   )r7   r‚   r   r   rŠ   r
  s     r)   Úwrite_loc_vec3zSabDataExporter.write_loc_vec3˜  s!   € Ø�	‰	×Ñœœt×0Ñ0°%Ó8Õ9r+   c                ój   — | j                   j                  t        t        j                  |«      «       y r<   )r7   r‚   r   r   r‹   r
  s     r)   Úwrite_dir_vec3zSabDataExporter.write_dir_vec3›  s!   € Ø�	‰	×Ñœœt×1Ñ1°5Ó9Õ:r+   c                óÖ   — |r4| j                   j                  t        t        j                  d«      «       y | j                   j                  t        t        j
                  d«      «       y )NTF)r7   r‚   r   r   r„   r…   )r(   r"   r¾   r¿   s       r)   Ú
write_boolzSabDataExporter.write_boolž  s?   € ÙØ�I‰I×ÑœU¤4§>¡>°4Ó8Õ9à�I‰I×ÑœU¤4§?¡?°EÓ:Õ;r+   c                ój   — | j                   j                  t        t        j                  |«      «       y r<   )r7   r‚   r   r   rs   r
  s     r)   Ú	write_strzSabDataExporter.write_str¤  s   € Ø�	‰	×ÑœœtŸx™x¨Ó/Õ0r+   c                ój   — | j                   j                  t        t        j                  |«      «       y r<   )r7   r‚   r   r   r†   r
  s     r)   Úwrite_literal_strz!SabDataExporter.write_literal_str§  s!   € Ø�	‰	×Ñœœt×/Ñ/°Ó7Õ8r+   c                óÄ   — t         }|j                  s| j                  j                  |«      }| j                  j                  t        t        j                  |«      «       y r<   )	rç   Úis_noner  Ú
get_recordr7   r‚   r   r   rƒ   rè   s      r)   Ú	write_ptrzSabDataExporter.write_ptrª  s?   € ÜˆØ�~Š~Ø—]‘]×-Ñ-¨fÓ5ˆFØ�	‰	×ÑœœtŸ|™|¨VÓ4Õ5r+   c                óJ   — | j                  dj                  |«      dz   «       y )NrÄ   )r  rz   r9   s     r)   Úwrite_transformzSabDataExporter.write_transform°  s   € à×Ñ˜sŸx™x¨›~°Ñ3Õ4r+   N)r  rä   r7   úlist[Token])F)r"   r    r™   rà   )r"   rœ   r™   rà   )r"   r   r™   rà   )r"   rš   r¾   r&   r¿   r&   r™   rà   )r"   r&   r™   rà   )ré   r   r™   rà   )r7   z	list[str]r™   rà   )r,   r-   r.   r:   r  r  r  r  r  r  r  r  r  r  r1   r+   r)   rì   rì   ‚  s9   „ óô
1ó4ó%ó:ó;ó<ó1ó9ó6ô5r+   rì   c                ó<  — | t         j                  k(  rt        dt         j                  › �«      ‚| j                  d«      }|d d D �cg c]  }t	        t
        j                  |«      ‘Œ }}|j                  t	        t
        j                  |d   «      «       |S c c}w )Nzinvalid record type: ry   r©   )	r   ÚNULL_PTR_NAMEr   rÆ   r   r   r‡   r‚   rˆ   )r£   ÚpartsÚpartÚtokenss       r)   Úencode_entity_typer%  µ  sŒ   € ØŒu×"Ñ"Ò"Ü"Ø#¤E×$7Ñ$7Ð#8Ð9ó
ð 	
ð �J‰J�s‹O€EØ;@ÀÀ"¹:ÓF¹:°4Œe”D×'Ñ'¨Õ.¸:€FÐFØ
‡M�M”%œ×(Ñ(¨%°©)Ó4Ô5Ø€Mùò Gs   Á!Bc                óì   — | j                   rt        t        j                  d«      S 	 t        t        j                  |j	                  | «      «      S # t
        $ r t        dt        | «      › d�«      ‚w xY w)Nr©   zentity z not in record storage)Úis_null_ptrr   r   rƒ   r8   Ú
ValueErrorr   r&   )ré   rÍ   s     r)   Úencode_entity_ptrr)  À  sh   € Ø×ÒÜ”T—\‘\ 2Ó&Ð&ð
Ü”T—\‘\ 8§>¡>°&Ó#9Ó:Ð:øÜò 
Ü"Ø”c˜&“k�]Ð"8Ð9ó
ð 	
ð
ús   ¨(A Á"A3c              #  óp  K  — | D �],  }g }|j                  t        |j                  «      «       |j                  t	        |j
                  | «      «       |j                  t        t        j                  |j                  «      «       |j                  D ]˜  }|j                  t        j                  k(  r&|j                  t	        |j                  | «      «       ŒF|j                  t        j                  k(  r%|j                  t        |j                  «      «       Œˆ|j                  |«       Œš |–— �Œ/ y ­wr<   )rÕ   r%  r£   r‚   r)  r¦   r   r   r�   r¥   r7   r!   rƒ   r"   rˆ   )rÍ   ré   rÙ   r’   s       r)   rÓ   rÓ   Ë  sÑ   è ø€ ÜˆØ ˆØ�‰Ô(¨¯©Ó5Ô6à�‰Ô'¨×(9Ñ(9¸8ÓDÔEà�‰”eœDŸH™H f§i¡iÓ0Ô1Ø—[”[ˆEØ�y‰yœDŸL™LÒ(Ø—‘Ô/°·±¸XÓFÕGØ—‘œd×.Ñ.Ò.Ø—‘Ô0°·±Ó=Õ>à—‘˜eÕ$ð !ð Œñ ùs   ‚D4D6Úutf8c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)rÒ   c                ó   — g | _         y r<   )rÖ   r'   s    r)   r:   zEncoder.__init__æ  s	   € Ø#%ˆ�r+   c                ór   — |D ]  }| j                  |«       Œ | j                  j                  t        «       y r<   )Úwrite_tokenrÖ   r‚   ÚEND_OF_RECORD)r(   rÙ   r’   s      r)   rÔ   zEncoder.write_recordé  s,   € ÛˆEØ×Ñ˜UÕ#ð à�‰×Ñœ=Õ)r+   c           	     ó:  — |j                   }|t        j                  t        j                  t        j                  fv rWt        |j                  t        «      sJ ‚| j                  j                  t        j                  d||j                  «      «       y |t        j                  k(  rWt        |j                  t        «      sJ ‚| j                  j                  t        j                  d||j                  «      «       y |t        j                  k(  ryt        |j                  t        «      sJ ‚|j                  j!                  t"        ¬«      }| j                  j                  t        j                  d|t%        |«      «      |z   «       y |t        j&                  k(  ryt        |j                  t        «      sJ ‚|j                  j!                  t"        ¬«      }| j                  j                  t        j                  d|t%        |«      «      |z   «       y |t        j(                  t        j*                  fv ryt        |j                  t        «      sJ ‚|j                  j!                  t"        ¬«      }| j                  j                  t        j                  d|t%        |«      «      |z   «       y |t        j,                  t        j.                  fv ro|j                  }t        |t0        «      sJ ‚| j                  j                  t        j                  d||j2                  |j4                  |j6                  «      «       y |t        j8                  k(  r | j                  j                  t:        «       y |t        j<                  k(  r | j                  j                  t>        «       y |t        j@                  k(  r | j                  j                  tB        «       y |t        jD                  k(  r | j                  j                  tF        «       y tI        d|› �«      ‚)Nz<Biz<Bd)Úencodingz<BBz<B3dzinvalid tag in token: )%r!   r   r�   rƒ   rŒ   rþ   r"   r    rÖ   r‚   rc   Úpackrv   rœ   rs   r&   ÚencodeÚSAB_ENCODINGr>   r†   rˆ   r‡   rŠ   r‹   r   r~   ÚyÚzr„   ÚTRUE_RECORDr…   ÚFALSE_RECORDrŽ   ÚSUBTYPE_START_RECORDr�   ÚSUBTYPE_END_RECORDr(  )r(   r’   r!   r7   rÇ   s        r)   r/  zEncoder.write_tokenî  s½  € Ø�i‰iˆØ”4—8‘8œTŸ\™\¬4¯9©9Ð5Ñ5Ü˜eŸk™k¬3Ô/Ð/Ð/Ø�K‰K×ÑœvŸ{™{¨5°#°u·{±{ÓCÕDØ”D—K‘KÒÜ˜eŸk™k¬5Ô1Ð1Ð1Ø�K‰K×ÑœvŸ{™{¨5°#°u·{±{ÓCÕDØ”D—H‘HŠ_Ü˜eŸk™k¬3Ô/Ð/Ð/Ø—;‘;×%Ñ%¬|Ð%Ó<ˆDØ�K‰K×ÑœvŸ{™{¨5°#´s¸4³yÓAÀDÑHÕIØ”D×$Ñ$Ò$Ü˜eŸk™k¬3Ô/Ð/Ð/Ø—;‘;×%Ñ%¬|Ð%Ó<ˆDØ�K‰K×ÑœvŸ{™{¨5°#´s¸4³yÓAÀDÑHÕIØ”T×%Ñ%¤t×':Ñ':Ð;Ñ;Ü˜eŸk™k¬3Ô/Ð/Ð/Ø—;‘;×%Ñ%¬|Ð%Ó<ˆDØ�K‰K×ÑœvŸ{™{¨5°#´s¸4³yÓAÀDÑHÕIØ”T×&Ñ&¬×(:Ñ(:Ð;Ñ;Ø—‘ˆAÜ˜a¤Ô&Ð&Ð&Ø�K‰K×ÑœvŸ{™{¨6°3¸¿¹¸Q¿S¹SÀ!Ç#Á#ÓFÕGØ”D—N‘NÒ"Ø�K‰K×Ñœ{Õ+Ø”D—O‘OÒ#Ø�K‰K×Ñœ|Õ,Ø”D×&Ñ&Ò&Ø�K‰K×ÑÔ3Õ4Ø”D×$Ñ$Ò$Ø�K‰K×ÑÔ1Õ2äÐ5°e°WÐ=Ó>Ð>r+   Nrß   )rÙ   r2   r™   rà   )r’   r   r™   rà   )r,   r-   r.   r:   rÔ   r/  r1   r+   r)   rÒ   rÒ   å  s   „ ó&ó*ô
!?r+   rÒ   )ró   zIterable[SabRecord]rD   r    r™   zIterator[SabEntity])rÍ   râ   r™   râ   )r7   zUnion[bytes, bytearray]r™   rÊ   )r£   r&   r™   r  )ré   r¡   rÍ   râ   r™   r   )rÍ   râ   r™   rž   )DÚ
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Útyping_extensionsr   r·   rc   r   Ú
ezdxf.mathr   Ú r   r   r   r   Úhdrr   Úabstractr   r   r   r   r   rÍ   r   r   r2   r0   r4   r¡   r!  Útuplerç   r«   rÊ   rä   rö   rü   r  rì   r%  r)  rÓ   r—   r�   r"   r0  r„   r8  r…   r9  rŽ   r:  r�   r;  r5  rÒ   r1   r+   r)   Ú<module>rD     s•  ðö #÷÷ ÷ ñ õ (Û Û Ý å Ý ß ;Ñ ;Ý ÷õ ñ Ý$ô8ˆJô 8ð ˜E‘{€	ˆ9Ó "÷Iñ IôX)�ô )ñ( �U×(Ñ(¨"¨b±%³'Ó:€ôC/�Jô C/ôL!�ô !ô<"�. Ñ+ô "ð /Ø ð/Ø+.ð/àó/ó*óô(05�lô 05ófó
óñ$ �t—‘×,Ñ,Ð-Ó.€Ù�T—^‘^×)Ñ)Ð*Ó+€Ù�d—o‘o×+Ñ+Ð,Ó-€Ù˜d×0Ñ0×6Ñ6Ð7Ó8Ð Ù˜D×,Ñ,×2Ñ2Ð3Ó4Ð Ø€÷*?ò *?r+   