
    hF                    D   % 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rS SKrS SKJr  S SKJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJrJrJrJ r J!r!  \
(       a  SSK"J#r#   " S S\5      r$\\$   r%S\&S'    " S S5      r' " S S\5      r(\(" \RR                  SS\*" 5       5      r+ " S S\5      r, " S S\5      r- " S S\!\(   5      r.      S'S jr/S(S jr0S)S jr1 " S S \ 5      r2S*S! jr3S+S" jr4S,S# jr5\6" \Rn                  Rp                  /5      r9\6" \Rt                  Rp                  /5      r;\6" \Rx                  Rp                  /5      r=\6" \R|                  Rp                  /5      r?\6" \R                  Rp                  /5      rAS$rB " S% S&5      rCg)-    )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                  4    \ rS rSr% SrS\S'   S\S'   S rSrg	)
Token&   z;Named tuple to store tagged value tokens of the SAB format.inttagr   valuec                P    SU R                   S S[        U R                  5       S3$ )Nz(0x02xz, ))r"   strr#   selfs    @/var/www/html/env/lib/python3.13/site-packages/ezdxf/acis/sab.py__str__Token.__str__,   s&    TXXcN"S_$5Q77     N)__name__
__module____qualname____firstlineno____doc____annotations__r+   __static_attributes__r.   r-   r*   r   r   &   s    E	HJ8r-   r   r   	SabRecordc                      \ rS rSrSS jr\SS j5       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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)Decoder3   c                    Xl         SU l        g Nr   dataindexr)   r=   s     r*   __init__Decoder.__init__4   s    	
r-   c                F    U R                   [        U R                  5      :  $ Nr>   lenr=   r(   s    r*   has_dataDecoder.has_data8   s    zzC		N**r-   c                   [        5       n[        R                   H5  nU R                  R	                  U5      (       d  M%  [        U5      U l          O   [        S5      eU R                  5       Ul	        U R                  5       Ul
        U R                  5       Ul        U R                  5       Ul        U R                  5       Ul        U R                  5       Ul        U R                  5       n[         R"                  " U[        R$                  5      Ul        U R)                  5       Ul        U R)                  5       nU R)                  5       nU$ )Nznot a SAB file)r   r   
SIGNATURESr=   
startswithrE   r>   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_headerDecoder.read_header<   s    ))Iyy##I.. ^
 *
 /00==? MMO}} --/"//1  "'00u~~F!113  "  "r-   c                H    U R                   nU =R                   U-  sl         U$ rC   )r>   r)   countposs      r*   forwardDecoder.forwardR   s    jj

e

r-   c                B    U R                  S5      nU R                  U   $ )Nr   rb   r=   r)   ra   s     r*   	read_byteDecoder.read_byteW   s    ll1oyy~r-   c                F    U R                  U5      nU R                  X"U-    $ rC   re   r_   s      r*   
read_bytesDecoder.read_bytes[   s#    ll5!yyU{++r-   c                r    U R                  S5      n[        R                  " SU R                  U5      S   nU$ )N   z<ir   rb   structunpack_fromr=   )r)   ra   valuess      r*   rK   Decoder.read_int_   s1    ll1o##D$))S9!<r-   c                n    U R                  S5      n[        R                  " SU R                  U5      S   $ )N   z<dr   rn   rf   s     r*   
read_floatDecoder.read_floatd   s-    ll1o!!$		37::r-   c                v    U R                  SU-  5      n[        R                  " SU S3U R                  U5      $ )Nrt   <drn   r_   s      r*   read_floatsDecoder.read_floatsh   s5    ll1u9%!!AeWA,		3??r-   c                D    U R                  U5      nUR                  5       $ rC   )rj   decode)r)   lengthtexts      r*   read_strDecoder.read_strl   s    v&{{}r-   c                    U R                  5       nU[        R                  :w  a  [        S5      eU R	                  U R                  5       5      $ )Nzstring tag (7) not found)rg   r   STRr   r   r)   r"   s     r*   rP   Decoder.read_str_tagp   s;    nn$((?9::}}T^^-..r-   c                    U R                  5       nU[        R                  :w  a  [        S5      eU R	                  5       $ )Nzdouble tag (6) not found)rg   r   DOUBLEr   ru   r   s     r*   rV   Decoder.read_double_tagv   s3    nn$++9::  r-   c           	       ^ U4S jn/ n/ mSn U R                   (       d7  U(       a%  US   nUR                  [        R                  ;   a  U$ [	        S5      eU R                  5       nU[        R                  :X  a*  UR                  [        XPR                  5       5      5        GOU[        R                  :X  a*  UR                  [        XPR                  5       5      5        GOU[        R                  :X  a9  UR                  [        XPR                  U R                  5       5      5      5        GO=U[        R                  :X  a*  UR                  [        XPR                  5       5      5        GOU[        R                   :X  a  UR                  [        US5      5        GOU[        R"                  :X  a  UR                  [        US5      5        GOU[        R$                  :X  a9  UR                  [        XPR                  U R                  5       5      5      5        GOPU[        R&                  :X  a0  TR                  U R                  U R                  5       5      5        GOU[        R(                  :X  a_  TR                  U R                  U R                  5       5      5        UR                  [        XQ" 5       5      5        TR+                  5         GOU[        R,                  :X  a+  UR                  [        XPR/                  S5      5      5        GOZU[        R0                  :X  a+  UR                  [        XPR/                  S5      5      5        GOU[        R2                  :X  a)  UR                  [        XPR                  5       5      5        OU[        R4                  :X  a)  UR                  [        XPR                  5       5      5        OU[        R6                  :X  a   US-  nUR                  [        XS5      5        OmU[        R8                  :X  a   UR                  [        XS5      5        US-  nO9U[        R:                  :X  a  U$ [	        SUS	 S
U SUS   R                   S35      eGMa  )Nc                 &   > SR                  T 5      $ )N-)join)entity_types   r*   entity_name(Decoder.read_record.<locals>.entity_name}   s    88K((r-   r   Tzpre-mature end of dataF   r   zunknown SAB tag: 0xxz (z) in entity '')rF   r#   r   DATA_END_MARKERSr   rg   r   INTappendr   rK   r   ru   r   r   POINTER	BOOL_TRUE
BOOL_FALSELITERAL_STRENTITY_TYPE_EXENTITY_TYPEclearLOCATION_VECrz   DIRECTION_VECENUMUNKNOWN_0x17SUBTYPE_STARTSUBTYPE_END
RECORD_END)r)   r   rq   subtype_leveltokenr"   r   s         @r*   read_recordDecoder.read_record|   s   	) !#=="1IE{{e&<&<<%"#;<<.."CdhheC9:#eC):;<eCt~~7G)HIJ$eC9:&eC./'eC/0(((eCt}})GHI+++""4==1A#BC(((""4==1A#BCeC78!!#)))eC)9)9!)<=>***eC)9)9!)<=>		!eC9:)))eC):;<***"eC78(((eC78"'")#a3%}VAY__DUUVW [ r-   c              #  |   #      U R                   (       a  U R                  5       v   Og M(  ! [         a     g f = f7frC   )rF   r   
IndexErrorr(   s    r*   read_recordsDecoder.read_records   s>     ==**,,   s   <#, <
9<9<r<   N)r=   bytesreturnbool)r   r   )r`   r!   )r   r!   )r`   r!   r   r   r   float)r`   r!   r   zSequence[float]r   r'   )r   r6   )r   Iterator[SabRecord])r/   r0   r1   r2   r@   propertyrF   r\   rb   rg   rj   rK   ru   rz   r   rP   rV   r   r   r5   r.   r-   r*   r8   r8   3   sY     + +,
,
;@/!6pr-   r8   c                  @    \ rS rSrSr   S       SS jjrS rSrg)		SabEntity   z2Low level representation of an ACIS entity (node).Nc                N    Xl         X l        X0l        Ub  UO/ U l        S U l        g rC   )nameattr_ptridr=   
attributes)r)   r   r   r   r=   s        r*   r@   SabEntity.__init__   s(     	 '+'7tR	'+r-   c                :    U R                    SU R                   S3$ )N(r&   )r   r   r(   s    r*   r+   SabEntity.__str__   s    ))AdggYa((r-   )r   r   r=   r   r   )r   N)r   r'   r   r!   r   r!   r=   zOptional[SabRecord])r/   r0   r1   r2   r3   r@   r+   r5   r.   r-   r*   r   r      s@    <
 $(,, , 	,
 ",)r-   r   r   c                  |    \ rS rSrSS jrSS jrS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S jrSrg)SabDataLoader   c                *    X l         Xl        SU l        g r;   )rL   r=   r>   )r)   r=   rL   s      r*   r@   SabDataLoader.__init__   s    	
r-   c                F    U R                   [        U R                  5      :*  $ rC   rD   r(   s    r*   rF   SabDataLoader.has_data   s    zzS^++r-   Nc                    U R                   U R                     nUR                  [        R                  :X  a/  U =R                  S-  sl        [        [        UR                  5      $ [        SU 35      e)Nr   zexpected int token, got )	r=   r>   r"   r   r   r
   r!   r#   r   )r)   skip_satr   s      r*   rK   SabDataLoader.read_int   sU    		$**%99 JJ!OJU[[))5eW=>>r-   c                    U R                   U R                     nUR                  [        R                  :X  a/  U =R                  S-  sl        [        [        UR                  5      $ [        SU 35      e)Nr   zexpected double token, got )	r=   r>   r"   r   r   r
   r   r#   r   r)   r   s     r*   read_doubleSabDataLoader.read_double   sU    		$**%99#JJ!OJu{{++8@AAr-   c                t    U R                  SS5      nU(       a  U R                  5       $ [        R                  $ )NFI)	read_boolr   mathinf)r)   finites     r*   read_intervalSabDataLoader.read_interval   s-    S)##%%xxr-   c                .   U R                   U R                     nUR                  [        R                  [        R
                  4;   aA  U =R                  S-  sl        [        [        [        [        [        4   UR                  5      $ [        SU 35      e)Nr   zexpected vector token, got )r=   r>   r"   r   r   r   r
   r   r   r#   r   r   s     r*   	read_vec3SabDataLoader.read_vec3   sn    		$**%99**D,>,>??JJ!OJeUE12EKK@@8@AAr-   c                    U R                   U R                     nUR                  [        R                  :X  a  U =R                  S-  sl        gUR                  [        R
                  :X  a  U =R                  S-  sl        g[        SU 35      e)Nr   TFzexpected bool token, got )r=   r>   r"   r   r   r   r   )r)   truefalser   s       r*   r   SabDataLoader.read_bool   sg    		$**%99&JJ!OJYY$//)JJ!OJ6ug>??r-   c                
   U R                   U R                     nUR                  [        R                  [        R
                  4;   a/  U =R                  S-  sl        [        [        UR                  5      $ [        SU 35      e)Nr   zexpected str token, got )
r=   r>   r"   r   r   r   r
   r'   r#   r   r   s     r*   r   SabDataLoader.read_str  s`    		$**%994#3#344JJ!OJU[[))5eW=>>r-   c                    U R                   U R                     nUR                  [        R                  :X  a/  U =R                  S-  sl        [        [        UR                  5      $ [        SU 35      e)Nr   zexpected pointer token, got )	r=   r>   r"   r   r   r
   r   r#   r   r   s     r*   read_ptrSabDataLoader.read_ptr  sU    		$**%99$JJ!OJ449%ABBr-   c                    U R                  5       R                  S5      nUS S  Vs/ s H  n[        U5      PM     sn$ s  snf )N    )r   splitr   )r)   rq   vs      r*   read_transformSabDataLoader.read_transform  s<     &&s+"("+.+Qa+...s   ?)r=   r>   rL   )r=   r6   rL   r!   r   rC   )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/   r0   r1   r2   r@   rF   rK   r   r   r   r   r   r   r   r5   r.   r-   r*   r   r      s8    
,?BB@?C/r-   r   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)
SabBuilderi  z7Low level data structure to manage ACIS SAB data files.c                >    [        5       U l        / U l        / U l        g rC   )r   rX   bodiesentitiesr(   s    r*   r@   SabBuilder.__init__  s     l'))+r-   c                <   U R                  5         [        U R                  5      [        U R                  R
                  5      -   U R                  l        SU R                  l        SU R                  l        U R                  R                  5       /n[        5       n[        U R                  5       H  nUR                  U5        M     UR                  UR                  5        UR!                  U R                  R#                  5       5        SR%                  U5      $ )z9Returns the SAB representation of the ACIS file as bytes.r   r   r-   )reorder_recordsrE   r   r!   rX   has_asm_headerrN   rM   rO   dumpbEncoderbuild_sab_recordsr   write_recordextendbufferr   sab_end_markerr   )r)   r=   encoderrecords       r*   dump_sabSabBuilder.dump_sab$  s    !$T[[!1CKK&&5
 "
 !"![[..01)'6F  ( 7GNN#DKK..01xx~r-   c                l    U Vs/ s H  o"R                   S:X  d  M  UPM     snU l        Xl        gs  snf )z.Reset entities and bodies list. (internal API)bodyN)r   r   r   )r)   r   es      r*   set_entitiesSabBuilder.set_entities4  s,    "*?(Qff.>q(?  @s   11)r   r   rX   Nr   Noner   r   )r   list[SabEntity]r   r  )	r/   r0   r1   r2   r3   r@   r   r  r5   r.   r-   r*   r   r     s    A,
 !r-   r   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
SabExporteri:  c                X    [        UR                  UR                  S9n[        Ul        U$ )N)r   )r   typer   NULL_PTRr   r)   entityr   s      r*   make_recordSabExporter.make_record;  s#    6;;6995$r-   c                ,    [        XR                  5      $ rC   )SabDataExporterr=   )r)   r   s     r*   make_data_exporterSabExporter.make_data_exporter@  s    t[[11r-   c                    [        5       nU R                  Ul        UR                  U R                  5       5        UR	                  5       $ rC   )r   rX   r  export_recordsr   )r)   builders     r*   r   SabExporter.dump_sabC  s:    ,T0023!!r-   r.   N)r  r   r   r   )r   r   r   r   r  )r/   r0   r1   r2   r  r  r   r5   r.   r-   r*   r
  r
  :  s    
2"r-   r
  c              #    #    U  H  nUS   R                   [        R                  :X  d   S5       eUS   R                  nU[        R
                  ;   a  [        U5      v     g US   R                   [        R                  :X  d   S5       eUS   R                  nSnUS:  a=  US   R                   [        R                  :X  d   S5       eUS   R                  nUS	S  nOUSS  n[        X4XV5      v   M     g 7f)
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   )recordsrL   r   r   attrid_r=   s          r*   build_entitiesr  J  s      ay}} 0 00K2KK0ay5)))D/!ay}},M.MM,ayc>!9==DHH,>.>>,)//C!":D!":DC.. s   C4C6c                H  ^  SU 4S jjnT  H  nU" UR                   5      Ul        SUl         [        UR                  5       HX  u  p4UR                  [
        R                  :X  d  M%  [        UR                  U" UR                  5      5      UR                  U'   MZ     M     T $ )Nc                &   > U S:X  a  [         $ TU    $ )Nr   )r  )numr   s    r*   ptrresolve_pointers.<locals>.ptr`  s    "9O}r-   r   )r"  r!   r   r   )	r   r   	enumerater=   r"   r   r   r   r#   )r   r#  r  r>   r   s   `    r*   resolve_pointersr&  _  sz    
 0%fkk2LEyyDLL(%*599c%++6F%GE" 3  Or-   c                H   [        U [        [        45      (       d  [        S5      e[	        5       n[        U 5      nUR                  5       Ul        [        [        UR                  5       UR                  R                  5      5      nUR                  [        U5      5        U$ )zReturns 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   r8   r\   rX   listr  r   rL   r  r&  )r=   r  decoderr   s       r*   	parse_sabr-  n  s     dUI.//344lGdmG((*GNw++-w~~/E/EFH )(34Nr-   c                      \ rS rSrSS jrS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S
 jrSS jrSS jrSrg)r  i  c                >    UR                   U l         Xl        X l        g rC   )rL   exporterr=   )r)   r0  r=   s      r*   r@   SabDataExporter.__init__  s    '' 	r-   c                j    U R                   R                  [        [        R                  U5      5        g)zThere are sometimes additional int values in SAB files which are
not present in SAT files, maybe reference counters e.g. vertex, coedge.
N)r=   r   r   r   r   )r)   r#   r   s      r*   	write_intSabDataExporter.write_int  s!     			txx/0r-   c                j    U R                   R                  [        [        R                  U5      5        g rC   )r=   r   r   r   r   r)   r#   s     r*   write_doubleSabDataExporter.write_double  s    		t{{E23r-   c                *   [         R                  " U5      (       a4  U R                  R                  [	        [
        R                  S5      5        g U R                  R                  [	        [
        R                  S5      5        U R                  U5        g )NFT)	r   isinfr=   r   r   r   r   r   r7  r6  s     r*   write_intervalSabDataExporter.write_interval  sY    ::eIIU4??E:;IIU4>>489e$r-   c                j    U R                   R                  [        [        R                  U5      5        g rC   )r=   r   r   r   r   r6  s     r*   write_loc_vec3SabDataExporter.write_loc_vec3  s!    		t00%89r-   c                j    U R                   R                  [        [        R                  U5      5        g rC   )r=   r   r   r   r   r6  s     r*   write_dir_vec3SabDataExporter.write_dir_vec3  s!    		t1159:r-   c                    U(       a4  U R                   R                  [        [        R                  S5      5        g U R                   R                  [        [        R
                  S5      5        g )NTF)r=   r   r   r   r   r   )r)   r#   r   r   s       r*   
write_boolSabDataExporter.write_bool  s?    IIU4>>489IIU4??E:;r-   c                j    U R                   R                  [        [        R                  U5      5        g rC   )r=   r   r   r   r   r6  s     r*   	write_strSabDataExporter.write_str  s    		txx/0r-   c                j    U R                   R                  [        [        R                  U5      5        g rC   )r=   r   r   r   r   r6  s     r*   write_literal_str!SabDataExporter.write_literal_str  s!    		t//78r-   c                    [         nUR                  (       d  U R                  R                  U5      nU R                  R                  [        [        R                  U5      5        g rC   )	r  is_noner0  
get_recordr=   r   r   r   r   r  s      r*   	write_ptrSabDataExporter.write_ptr  s?    ~~]]--f5F		t||V45r-   c                J    U R                  SR                  U5      S-   5        g )Nr   )rJ  r   r?   s     r*   write_transformSabDataExporter.write_transform  s    sxx~34r-   )r=   r0  rL   N)r0  r
  r=   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  )r=   z	list[str]r   r  )r/   r0   r1   r2   r@   r3  r7  r;  r>  rA  rD  rG  rJ  rO  rR  r5   r.   r-   r*   r  r    s9    
14%:;<1965r-   r  c                D   U [         R                  :X  a  [        S[         R                   35      eU R                  S5      nUS S  Vs/ s H  n[	        [
        R                  U5      PM     nnUR                  [	        [
        R                  US   5      5        U$ s  snf )Nzinvalid record type: r   r   )	r   NULL_PTR_NAMEr   r   r   r   r   r   r   )r   partsparttokenss       r*   encode_entity_typerZ    s    u""""#E$7$7#89
 	
 JJsOE;@":F:4eD''.:FF
MM%((%)45M Gs   	$Bc                    U R                   (       a  [        [        R                  S5      $  [        [        R                  UR	                  U 5      5      $ ! [
         a    [        S[        U 5       S35      ef = f)Nr   zentity z not in record storage)is_null_ptrr   r   r   r>   
ValueErrorr   r'   )r  r   s     r*   encode_entity_ptrr^    sh    T\\2&&
T\\8>>&#9:: 
"c&k]"89
 	

s   (A #A9c              #    #    U  GH3  n/ nUR                  [        UR                  5      5        UR                  [	        UR
                  U 5      5        UR                  [        [        R                  UR                  5      5        UR                   H  nUR                  [        R                  :X  a'  UR                  [	        UR                  U 5      5        MH  UR                  [        R                  :X  a&  UR                  [        UR                  5      5        M  UR                  U5        M     Uv   GM6     g 7frC   )r   rZ  r   r   r^  r   r   r   r   r   r=   r"   r   r#   r   )r   r  r   r   s       r*   r   r     s      (56'(9(98DEeDHHfii01[[EyyDLL(/XFGd...0=>e$ !  s   D<D>utf8c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
r   i  c                    / U l         g rC   r   r(   s    r*   r@   Encoder.__init__  s	    #%r-   c                v    U H  nU R                  U5        M     U R                  R                  [        5        g rC   )write_tokenr   r   END_OF_RECORD)r)   r   r   s      r*   r   Encoder.write_record  s,    EU# =)r-   c           	        UR                   nU[        R                  [        R                  [        R                  4;   a\  [        UR                  [        5      (       d   eU R                  R                  [        R                  " SX!R                  5      5        g U[        R                  :X  a\  [        UR                  [        5      (       d   eU R                  R                  [        R                  " SX!R                  5      5        g U[        R                  :X  a|  [        UR                  [        5      (       d   eUR                  R!                  ["        S9nU R                  R                  [        R                  " SU[%        U5      5      U-   5        g U[        R&                  :X  a|  [        UR                  [        5      (       d   eUR                  R!                  ["        S9nU R                  R                  [        R                  " SU[%        U5      5      U-   5        g U[        R(                  [        R*                  4;   a|  [        UR                  [        5      (       d   eUR                  R!                  ["        S9nU R                  R                  [        R                  " SU[%        U5      5      U-   5        g U[        R,                  [        R.                  4;   at  UR                  n[        U[0        5      (       d   eU R                  R                  [        R                  " SX$R2                  UR4                  UR6                  5      5        g U[        R8                  :X  a   U R                  R                  [:        5        g U[        R<                  :X  a   U R                  R                  [>        5        g U[        R@                  :X  a   U R                  R                  [B        5        g U[        RD                  :X  a   U R                  R                  [F        5        g [I        SU 35      e)Nz<Biz<Bd)encodingz<BBz<B3dzinvalid tag in token: )%r"   r   r   r   r   r(  r#   r!   r   r   ro   packr   r   r   r'   encodeSAB_ENCODINGrE   r   r   r   r   r   r   r   yzr   TRUE_RECORDr   FALSE_RECORDr   SUBTYPE_START_RECORDr   SUBTYPE_END_RECORDr]  )r)   r   r"   r=   r   s        r*   rf  Encoder.write_token  s   ii488T\\49955ekk3////KKv{{5#{{CDDKKekk51111KKv{{5#{{CDDHH_ekk3////;;%%|%<DKKv{{5#s4yADHID$$$ekk3////;;%%|%<DKKv{{5#s4yADHIT%%t':':;;ekk3////;;%%|%<DKKv{{5#s4yADHIT&&(:(:;;Aa&&&&KKv{{63QSS!##FGDNN"KK{+DOO#KK|,D&&&KK34D$$$KK125eW=>>r-   rc  Nr  )r   r6   r   r  )r   r   r   r  )r/   r0   r1   r2   r@   r   rf  r5   r.   r-   r*   r   r     s    &*
!?r-   r   )r  zIterable[SabRecord]rL   r!   r   zIterator[SabEntity])r   r  r   r  )r=   zUnion[bytes, bytearray]r   r   )r   r'   r   rT  )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   ro   r   
ezdxf.mathr    r   r   r   r   hdrr   abstractr   r   r   r   r   r   r   r   r6   r4   r8   r   rV  tupler  r   r   r
  r  r&  r-  r  rZ  r^  r   r   r   r#   rg  r   rp  r   rq  r   rr  r   rs  rm  r   r.   r-   r*   <module>r}     s   #    (      ; ;   $8J 8 E{	9 "I IX) )( U(("b%':C/J C/L! !<".+ " / /+.//*(05l 05f
$ t,,-.T^^))*+doo++,-d006678 D,,2234 *? *?r-   