
    h1                       % S SK Jr  S SK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Jr  SSKJr  SSK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KJr  \\   rS\ S'    " S S\5      r!\!" SSS\"" 5       5      r#\#SS4     S'S jjr$S(S jr%S)S jr& " S S\5      r' " S S\5      r( " S S\\!   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r0S0S$ jr1 " S% S&\5      r2g)1    )annotations)AnySequenceIteratorUnionListTYPE_CHECKINGOptional)	TypeAliasN)datetime   )const)ParsingErrorInvalidLinkStructure)
AcisHeader)AbstractEntityAbstractBuilder
DataLoaderDataExporterEntityExporter)
AcisEntity)Vec3r   	SatRecordc                  @    \ rS rSrSr   S       SS jjrS rSrg)		SatEntity#   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 N)nameattr_ptriddata
attributes)selfr   r    r!   r"   s        @/var/www/html/env/lib/python3.13/site-packages/ezdxf/acis/sat.py__init__SatEntity.__init__&   s(     	 '+'7tR	'+    c                :    U R                    SU R                   S3$ )N())r   r!   r$   s    r%   __str__SatEntity.__str__3   s    ))AdggYa((r(   )r    r#   r"   r!   r   )$-1N)r   strr    r1   r!   intr"   Optional[list[Any]])__name__
__module____qualname____firstlineno____doc__r&   r-   __static_attributes__ r(   r%   r   r   #   s@    <
 $(,, , 	,
 ",)r(   r   znull-ptrr/   r0   c                ,    [        U SX#5      nXl        U$ )zFactory to create new ACIS entities.

Args:
    name: entity type
    attributes: reference to the entity attributes or :attr:`NULL_PTR`.
    id: unique entity id as integer or -1
    data: generic data container as list

r/   )r   r#   )r   r#   r!   r"   es        r%   
new_entityr=   :   s     	$r(ALHr(   c                <    [        U 5      S:  =(       a    U S   S:H  $ )z@Returns ``True`` if the string `s` represents an entity pointer.r   $)len)ss    r%   is_ptrrB   N   s    q6A:%!A$#+%r(   c                  ^  SU 4S jjnT  Hv  nU" UR                   5      Ul        SUl         / nUR                   H=  n[        U5      (       a  UR	                  U" U5      5        M,  UR	                  U5        M?     X2l        Mx     T $ )Nc                B   > [        U SS  5      nUS:X  a  [        $ TU   $ )Nr   r0   )r2   NULL_PTR)rA   numentitiess     r%   ptr!resolve_str_pointers.<locals>.ptrT   s(    !AB%j"9O}r(   r/   )rA   r1   returnr   )r    r#   r"   rB   append)rG   rH   entityr"   tokens   `    r%   resolve_str_pointersrN   S   sr     0[[Ee}}CJ'E"	 !
   Or(   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)SatDataLoaderg   c                *    X l         Xl        SU l        g )Nr   )versionr"   index)r$   r"   rS   s      r%   r&   SatDataLoader.__init__h   s    	
r(   c                F    U R                   [        U R                  5      :*  $ r   )rT   r@   r"   r,   s    r%   has_dataSatDataLoader.has_datam   s    zzS^++r(   Nc                    Ub  U$ U R                   U R                     n [        U5      nU =R                  S-  sl        U$ ! [         a    [	        SU 35      ef = f)Nzexpected integer, got r   )r"   rT   r2   
ValueErrorr   )r$   skip_satentryvalues       r%   read_intSatDataLoader.read_intp   sh    O		$**%	AJE 	

a
  	A!7w?@@	As   A Ac                    U R                   U R                     n [        U5      nU =R                  S-  sl        U$ ! [         a    [	        SU 35      ef = f)Nzexpected double, got r   )r"   rT   floatrZ   r   )r$   r\   r]   s      r%   read_doubleSatDataLoader.read_double|   s]    		$**%	@%LE 	

a
  	@!6ug>??	@s	   = Ac                t    U R                  SS5      nU(       a  U R                  5       $ [        R                  $ )NFI)	read_boolrb   mathinf)r$   finites     r%   read_intervalSatDataLoader.read_interval   s-    S)##%%xxr(   c                j    U R                  5       nU R                  5       nU R                  5       nXU4$ r   )rb   )r$   xyzs       r%   	read_vec3SatDataLoader.read_vec3   s5    Qwr(   c                    U R                   U R                     nX1:X  a  U =R                  S-  sl        gX2:X  a  U =R                  S-  sl        g[        SU SU SU 35      e)Nr   TFzexpected bool string 'z' or 'z', got )r"   rT   r   )r$   truefalser]   s       r%   rg   SatDataLoader.read_bool   sa    		$**%=JJ!OJ^JJ!OJ$TF&wugF
 	
r(   c                .   U R                   U R                     nU R                  [        R                  R
                  :  d  UR                  S5      (       a1  U =R                  S-  sl        U R                   U R                  S-
     $ [        SU 35      e)N@   r   zexpected string, got )r"   rT   rS   r   FeaturesAT
startswithr   r$   r]   s     r%   read_strSatDataLoader.read_str   sq    		$**%<<%..+++u/?/?/D/DJJ!OJ99TZZ!^,,25':;;r(   c                    U R                   U R                     n[        U[        5      (       a  U =R                  S-  sl        U$ [	        S[        U5       35      e)Nr   zexpected pointer, got )r"   rT   
isinstancer   r   type)r$   rL   s     r%   read_ptrSatDataLoader.read_ptr   sJ    4::&fn--JJ!OJM3DL>BCCr(   c                ^    [        S5       Vs/ s H  oR                  5       PM     sn$ s  snf )N   )rangerb   )r$   _s     r%   read_transformSatDataLoader.read_transform   s'    
 -2"I6Iq  "I666s   *)r"   rT   rS   )r"   	list[Any]rS   r2   )rJ   boolr   )r[   zOptional[int]rJ   r2   )rJ   ra   )rJ   ztuple[float, float, float])rt   r1   ru   r1   rJ   r   )rJ   r1   )rJ   r   )rJ   zlist[float])r4   r5   r6   r7   r&   rW   r^   rb   rk   rq   rg   r~   r   r   r9   r:   r(   r%   rP   rP   g   s5    
,


<D7r(   rP   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)
SatBuilder   z7Low level data structure to manage ACIS SAT data files.c                L    [        5       U l        / U l        / U l        0 U l        g r   )r   headerbodiesrG   _export_mappingr,   s    r%   r&   SatBuilder.__init__   s!     l'))+57r(   c                F   U R                  5         [        U R                  5      [        U R                  R
                  5      -   U R                  l        U R                  R                  S:X  a  SU R                  l        O$[        U R                  5      U R                  l        U R                  R                  5       nUR                  [        U R                  U R                  R                  5      5        UR                  U R                  R                  5       5        U$ )zReturns the text representation of the ACIS file as list of strings
without line endings.

Raise:
    InvalidLinkStructure: referenced ACIS entity is not stored in
        the :attr:`entities` storage

  r   )reorder_recordsr@   r   r2   r   has_asm_header
n_entitiesrS   	n_recordsrG   dumpsextendbuild_str_recordsrK   sat_end_markerr$   r"   s     r%   dump_satSatBuilder.dump_sat   s     	!$T[[!1CKK&&5
 "
 ;;#%$%DKK!$'$6DKK!{{  "%dmmT[[5H5HIJDKK..01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   rG   )r$   rG   r<   s      r%   set_entitiesSatBuilder.set_entities   s,    "*?(Qff.>q(?  @s   11)r   r   rG   r   N)rJ   NonerJ   	list[str])rG   list[SatEntity]rJ   r   )	r4   r5   r6   r7   r8   r&   r   r   r9   r:   r(   r%   r   r      s    A8,!r(   r   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
SatExporter   c                X    [        UR                  UR                  S9n[        Ul        U$ )N)r!   )r   r   r!   rE   r#   r$   rL   records      r%   make_recordSatExporter.make_record   s#    6;;6995$r(   c                ,    [        XR                  5      $ r   )SatDataExporterr"   )r$   r   s     r%   make_data_exporterSatExporter.make_data_exporter   s    t[[11r(   c                    [        5       nU R                  Ul        UR                  U R                  5       5        UR	                  5       $ r   )r   r   r   export_recordsr   )r$   builders     r%   r   SatExporter.dump_sat   s:    ,T0023!!r(   r:   N)rL   r   rJ   r   )r   r   rJ   r   r   )r4   r5   r6   r7   r   r   r   r9   r:   r(   r%   r   r      s    
2"r(   r   c              #    ^ #    SU 4S jjnT  H  nUR                   /nUR                  U" UR                  5      5        US:  a$  UR                  [        UR                  5      5        UR
                   HK  n[        U[        5      (       a  UR                  U" U5      5        M1  UR                  [        U5      5        MM     UR                  S5        SR                  U5      v   M     g 7f)Nc                   > U [         L a  g STR                  U 5       3$ ! [         a    [        S[	        U 5       S35      ef = f)Nr/   r?   zentity z not in record storage)rE   rT   rZ   r   r1   )r<   rG   s    r%   ptr_str"build_str_records.<locals>.ptr_str   sT    =	Qx~~a()** 	Q&Q8N'OPP	Qs	   ! #Ar   # )r<   r   rJ   r1   )	r   rK   r#   r1   r!   r"   r   r   join)rG   rS   r   rL   tokensr"   s   `     r%   r   r      s     Q ++gf//01c>MM#fii.)KKD$	**gdm,c$i(	  
 	chhv s   C*C-c              #     #    SnSnSnU R                  5        HT  nUS:  a  X4-  nUS-  nUS:X  a  Uv   SnM   M"  US:X  a  M*  US;   a  X-  nM6  US:X  d  M>  U(       d  MG  [        U5      nSnMV     g 7f)N r   r   rx   
0123456789r   )rstripr2   )rA   rF   collectrM   cs        r%   parse_header_strr      s     
CGEXXZQ;JEqLG!|  #X,HC#X###hGC s   AA2A2 A2c                   [        5       nU S   R                  5       n[        US   5      Ul         [        US   5      Ul        [        US   5      Ul        [        US   5      Ul        [        [        U S   5      5      n US   Ul        US   Ul        [        U5      S:  a.   [        R                  " US   [         R"                  5      Ul        U S   R                  5       n ['        US   5      Ul        XSS  4$ ! [        [        4 a     Nf = f! [         a     Nf = f! [         a     N_f = f! [        [        4 a     NNf = f)Nr   r   ry      )r   splitr2   rS   r   r   flags
IndexErrorrZ   listr   
product_idacis_versionr@   r   strptimer   DATE_FMTcreation_datera   units_in_mm)r"   r   r   s      r%   parse_headerr     sL   \F!W]]_F^FNvay>q	N6!9~ "47+,F"1I$Qi 6{Q	#+#4#4VAY#OF  !W]]_F"6!9- 8' 
#     		
 
# sG   9D D '-D' (D7 DD
D$#D$'
D43D47E
	E
c              #     #    U  HQ  nUR                  [        R                  5      (       d$  UR                  [        R                  5      (       a    g Uv   MS     g 7fr   )r|   r   END_OF_ACIS_DATA_SATBEGIN_OF_ACIS_HISTORY_DATA)r"   lines     r%   _filter_recordsr   1  sG     ??55566$//,,;
 ;
 
 s   AAc              #     #    SR                  [        U 5      5      nUR                  S5       H   nUR                  5       nU(       d  M  Uv   M"     g 7f)Nr   r   )r   r   r   strip)r"   merged_datar   s      r%   merge_record_stringsr   :  sB     ((?401K##C(6L )s   AA
	Ac                *   Sn/ n[        U 5       H  nUR                  5       nUS   R                  5       nUR                  S5      (       a-  [	        U5      * nXa:w  a  [        S5      eUR                  S5        UR                  U5        US-  nM     U$ )Nr   -z-non-continuous sequence numbers not supportedr   )r   r   r   r|   r2   r   poprK   )r"   expected_seq_numrecordsr   r   first_tokenrF   s          r%   parse_recordsr   B  s    !G$T* JJLQioo'!!#&&{##C&"C  JJqMvA + Nr(   c           	         / nU  HI  nUS   nUS   nSnUS:  a  [        US   5      nUSS  nOUSS  nUR                  [        XEXg5      5        MK     U$ )Nr   r   r0   r   ry   r   )r2   rK   r   )r   rS   rG   r   r   attrid_r"   s           r%   build_entitiesr   T  sn     !#Hayayc>fQi.C!":D!":D	$c89  Or(   c                D   [        U [        5      (       a  U R                  5       nOU n[        U[        5      (       d  [	        S5      e[        5       n[        U5      u  p1X2l        [        U5      n[        XCR                  5      nUR                  [        U5      5        U$ )zReturns the :class:`SatBuilder` for the ACIS :term:`SAT` file content
given as string or list of strings.

Raises:
    ParsingError: invalid or unsupported ACIS data structure

z+expected as string or a sequence of strings)r   r1   
splitlinesr   	TypeErrorr   r   r   r   r   rS   r   rN   )rA   r"   r   r   r   rG   s         r%   	parse_satr   e  s     !S||~dH%%EFFlG%LFND!Gg~~6H-h78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 r   )rS   exporterr"   )r$   r   r"   s      r%   r&   SatDataExporter.__init__~  s    '' 	r(   c                \    U(       d%  U R                   R                  [        U5      5        g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"   rK   r1   )r$   r]   r[   s      r%   	write_intSatDataExporter.write_int  s"     IISZ( r(   c                >    U R                   R                  US 5        g )Ngr"   rK   r}   s     r%   write_doubleSatDataExporter.write_double  s    		E!9&r(   c                    [         R                  " U5      (       a  U R                  R                  S5        g U R                  R                  S5        U R	                  U5        g )Nrf   re   )rh   isinfr"   rK   r   r}   s     r%   write_intervalSatDataExporter.write_interval  sC    ::eIIS!IIS!e$r(   c                    U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        g r   r   rn   ro   rp   r}   s     r%   write_loc_vec3SatDataExporter.write_loc_vec3  8    %''"%''"%''"r(   c                    U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        g r   r   r}   s     r%   write_dir_vec3SatDataExporter.write_dir_vec3  r  r(   c                V    U R                   R                  U(       a  U5        g U5        g r   r   )r$   r]   rt   ru   s       r%   
write_boolSatDataExporter.write_bool  s    		2E2r(   c                    U R                   R                  S[        U5       35        U R                   R                  [        U5      5        g )Nrx   )r"   rK   r@   r1   r}   s     r%   	write_strSatDataExporter.write_str  s5    		1SZL)*		U$r(   c                &    U R                  U5        g r   )r
  r}   s     r%   write_literal_str!SatDataExporter.write_literal_str  s    ur(   c                    [         nUR                  (       d  U R                  R                  U5      nU R                  R                  U5        g r   )rE   is_noner   
get_recordr"   rK   r   s      r%   	write_ptrSatDataExporter.write_ptr  s4    ~~]]--f5F		 r(   c                :    U R                   R                  U5        g r   )r"   r   r   s     r%   write_transformSatDataExporter.write_transform  s    		r(   )r"   r   rS   N)r   r   r"   r   )F)r]   r2   rJ   r   )r]   ra   rJ   r   )r]   r   rJ   r   )r]   r   rt   r1   ru   r1   rJ   r   )r]   r1   rJ   r   )rL   r   rJ   r   )r"   r   rJ   r   )r4   r5   r6   r7   r&   r   r   r   r   r  r  r
  r  r  r  r9   r:   r(   r%   r   r   }  s9    
)'%#
#
3%!r(   r   )r   r1   r"   r3   rJ   r   )rA   r1   rJ   r   )rG   r   rJ   r   )rG   r   rS   r2   rJ   Iterator[str])rA   r1   rJ   r  )r"   Sequence[str]rJ   z tuple[AcisHeader, Sequence[str]])r"   r  rJ   r  )r"   r  rJ   zlist[SatRecord])r   zSequence[SatRecord]rS   r2   rJ   r   )rA   zUnion[str, Sequence[str]]rJ   r   )3
__future__r   typingr   r   r   r   r   r	   r
   typing_extensionsr   rh   r   r   r   r   r   hdrr   abstractr   r   r   r   r   rG   r   
ezdxf.mathr   r1   r   __annotations__r   tuplerE   r=   rB   rN   rP   r   r   r   r   r   r   r   r   r   r   r   r:   r(   r%   <module>r!     s   #   (    5   $Cy	9  ) )( ZEG4
 	 $	
 	
 (&
(I7J I7X"! "!J".+ " .(<$ +."02l 2r(   