
    h                        S r SSKrSSKrSSKrSSKrSSKrSSKr SSKrSr SSK
Jr  SrSSKJr  \R                  " S5      r\R                  " S	5      r0 rS
 rS rS r " S S5      r " S S5      r\" S\" 5       5         " S S5      r " S S5      r\" S\" 5       5         " S S5      rS rS rS rg! \	 a    Sr Nf = f! \	 a    Sr Nf = f)z
To write tf_record into file. Here we use it for tensorboard's event writting.
The code was borrowed from https://github.com/TeamHG-Memex/tensorboard_logger
    NTF)storage   )crc32cz^[A-Za-z0-9.]z[A-Za-z0-9_.\-/]+c                 8    SU ;   a  [        S5      eU[        U '   g )N:zprefix cannot contain a :)
ValueErrorREGISTERED_FACTORIES)prefixfactorys     T/var/www/fran/franai/venv/lib/python3.13/site-packages/tensorboardX/record_writer.pyregister_writer_factoryr   %   s     
f}455#*     c                      U R                  S5      S   n[        U   nUR                  U 5      $ ! [         a?    [        R
                  R                  U 5      (       d  [        R                  " U 5         g gf = f)z'Initialize the directory for log files.r   r   N)splitr	   directory_checkKeyErrorospathexistsmakedirsr   r
   r   s      r   r   r   +   sg    C#&v.&&t,, ww~~d##KK $s   -0 AA98A9c                      U R                  S5      S   n[        U   nUR                  U 5      $ ! [         a    [        U S5      s $ f = f)z)Open a writer for outputting event files.r   r   wb)r   r	   openr   r   s      r   	open_filer   6   sN     C#&v.||D!!  D$ s   -0 A	A	c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)S3RecordWriter@   z/Writes tensorboard protocol buffer files to S3.c                 ~    [         (       d  [        S5      eXl        [        R                  " 5       U l        SU l        g )Nz'boto3 must be installed for S3 support.F)
S3_ENABLEDImportErrorr   ioBytesIObufferclosedselfr   s     r   __init__S3RecordWriter.__init__C   s,    zGHH	jjlr   c                 H    U R                   (       d  U R                  5         g g N)r%   closer'   s    r   __del__S3RecordWriter.__del__J   s    {{JJL r   c                     U R                   nUR                  S5      (       a  U[        S5      S  nUR                  S5      nUS   nUS[        U5      -   S  nX14$ )Nzs3:///r   r   r   
startswithlenr   r'   r   bpbuckets       r   bucket_and_pathS3RecordWriter.bucket_and_pathN   ]    yy??7##G&DZZ_AAFO$%|r   c                 :    U R                   R                  U5        g r+   r$   writer'   vals     r   r=   S3RecordWriter.writeW       #r   c                    [         R                  " S[        R                  R	                  S5      S9nU R                  5       u  p#[        R                  " U R                  5      nUR                  S5        UR                  XBU5        g )Ns3S3_ENDPOINT)endpoint_urlr   )
boto3clientr   environgetr8   copyr$   seekupload_fileobj)r'   rC   r7   r   upload_buffers        r   flushS3RecordWriter.flushZ   s_    \\$RZZ^^M-JK++-		$++.1
-6r   c                 2    U R                  5         SU l        g )NT)rN   r%   r-   s    r   r,   S3RecordWriter.closea   s    

r   )r$   r%   r   N__name__
__module____qualname____firstlineno____doc__r(   r.   r8   r=   rN   r,   __static_attributes__ r   r   r   r   @   s#    97r   r   c                   $    \ rS rSrSrS rS rSrg)S3RecordWriterFactoryf   z.Factory for event protocol buffer files to S3.c                     [        U5      $ r+   )r   r&   s     r   r   S3RecordWriterFactory.openi   s    d##r   c                     g r+   rY   r&   s     r   r   %S3RecordWriterFactory.directory_checkl        	r   rY   NrS   rT   rU   rV   rW   r   r   rX   rY   r   r   r[   r[   f   s    8$r   r[   rC   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)GCSRecordWriteru   zAWrites tensorboard protocol buffer files to Google Cloud Storage.c                     [         (       d  [        S5      eXl        [        R                  " 5       U l        [        R                  " 5       nU R                  5       u  p4[        R                  " X#5      n[        R                  " XE5      U l        g )NzM`google-cloud-storage` must be installed in order to use the 'gs://' protocol)GCS_ENABLEDr!   r   r"   r#   r$   r   Clientr8   BucketBlobblob)r'   r   rG   bucket_namefilepathr7   s         r   r(   GCSRecordWriter.__init__x   sh    { 5 6 6 	jjl! $ 4 4 64LL2	r   c                 $    U R                  5         g r+   )r,   r-   s    r   r.   GCSRecordWriter.__del__       

r   c                     U R                   nUR                  S5      (       a  U[        S5      S  nUR                  S5      nUS   nUS[        U5      -   S  nX14$ )Nzgs://r1   r   r   r2   r5   s       r   r8   GCSRecordWriter.bucket_and_path   r:   r   c                 :    U R                   R                  U5        g r+   r<   r>   s     r   r=   GCSRecordWriter.write   rA   r   c                     [         R                   " U R                  5      nUR                  S5        U R                  R                  nU R                  R                  UR                  5       US9  g )Nr   )dataif_generation_match)rJ   r$   rK   rk   
generationupload_from_stringgetvalue)r'   rM   blob_generations      r   rN   GCSRecordWriter.flush   sY    		$++.1 ))..		$$-*@*@*B9H 	% 	Jr   c                 $    U R                  5         g r+   )rN   r-   s    r   r,   GCSRecordWriter.close   rq   r   )rk   r$   r   NrR   rY   r   r   rd   rd   u   s$    K3Jr   rd   c                   $    \ rS rSrSrS rS rSrg)GCSRecordWriterFactory   z@Factory for event protocol buffer files to Google Cloud Storage.c                     [        U5      $ r+   )rd   r&   s     r   r   GCSRecordWriterFactory.open   s    t$$r   c                     g r+   rY   r&   s     r   r   &GCSRecordWriterFactory.directory_check   ra   r   rY   Nrb   rY   r   r   r   r      s    J%r   r   gsc                   ,    \ rS rSrS rS rS rS rSrg)RecordWriter   c                 j    0 U l         [        5       U l        Xl        S U l        [        U5      U l        g r+   )_name_to_tf_nameset	_tf_namesr   _writerr   r&   s     r   r(   RecordWriter.__init__   s*     "	 r   c                 (   U R                   R                  n[        R                  " S[	        U5      5      nU" U5        U" [        R                  " S[        U5      5      5        U" U5        U" [        R                  " S[        U5      5      5        g )NQI)r   r=   structpackr4   masked_crc32c)r'   rw   wheaders       r   r=   RecordWriter.write   sc    LLS#d),	&		&++c=0
12	$	&++c=.
/0r   c                 8    U R                   R                  5         g r+   )r   rN   r-   s    r   rN   RecordWriter.flush       r   c                 8    U R                   R                  5         g r+   )r   r,   r-   s    r   r,   RecordWriter.close   r   r   )r   r   r   r   N)	rS   rT   rU   rV   r(   r=   rN   r,   rX   rY   r   r   r   r      s    '1r   r   c                 j    [        [        U 5      5      n[        US-	  [        US-  5      -  S-   5      $ )N      l   jE )u32r   )rw   xs     r   r   r      s1    F4LAbCRL(J677r   c                     U S-  $ )Nl    rY   )r   s    r   r   r      s    z>r   c                     [         R                  U 5      (       d  SU -   n SR                  [        R	                  U 5      5      $ )N._)_VALID_OP_NAME_STARTmatchjoin_VALID_OP_NAME_PARTfindall)names    r   make_valid_tf_namer      s7    %%d++Tz88'//566r   )rW   rJ   r"   r   os.pathrer   rF   r    r!   google.cloudr   rg   r   compiler   r   r	   r   r   r   r   r[   rd   r   r   r   r   r   rY   r   r   <module>r      s  
  	 	  	 J$K zz/2 jj!56   + # #L	 	 35 6) )X	 	 46 7 .8
7A  J
  Ks"   B8 C 8CCCC