o
    mi                     @   s   d Z ddlZddlZddlZddlmZmZ ddlZddlZdZ	dZ
dZdZdZdd
dZ				ddedee dee ded	df
ddZ		ddedededed	df
ddZ		ddedededed	df
ddZ	ddededed	dfddZdS ) z1monkeypatch: patch code to add tensorboard hooks.    N)AnyOptionalz%tensorflow.python.ops.gen_summary_opsztensorboardX.writerz'tensorflow.python.summary.writer.writerz,tensorboard.summary.writer.event_file_writerztorch.utils.tensorboard.writerreturnc                  C   sJ   t jd D ]\} }t jj| dd}t||t|d|  qg t jd< d S )NtensorboardFlazyorig_)wandbpatchedutil
get_modulesetattrgetattr)modulemethodwriter r   g/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/integration/tensorboard/monkeypatch.pyunpatch   s   r   T savetensorboard_xpytorchroot_logdirc           	      C   s  t tjd dkrtdtjjdddd tjjtdd}tjjtdd}tjjtdd}tjjt	dd}tjjt
dd}|sL|sL|rLt|t| |d |rVt|t| |d |r`t|t| |d |rjt|t	| |d |rtt|t
| |d |s|s|std	 d S d S d S d S )
Nr   r   zTensorboard already patched. Call `wandb.tensorboard.unpatch()` first; remove `sync_tensorboard=True` from `wandb.init`; or only call `wandb.tensorboard.patch` once.z"Please install tensorboard packageF)requiredr   r   )r   r   r   r   z%Unsupported tensorboard configuration)lenr	   r
   
ValueErrorr   r   TENSORBOARD_C_MODULETENSORFLOW_PY_MODULETENSORBOARD_WRITER_MODULETENSORBOARD_PYTORCH_MODULETENSORBOARD_X_MODULE_patch_tensorflow2_patch_file_writer	termerror)	r   r   r   r   c_writer	py_writer	tb_writer	pt_writer
tbx_writerr   r   r   patch   sd   r*   r   r   c                    sN   | j g  dtdtdtf fdd}| _|| _ tjd |dg d S )Nargskwargsr   c                     s   t |d dr|d  dn|d } | }tt dkr,dkr,td t	 }t
d| |}|rF|d | d  }nd uratj|tjsatd|  d}t||d	 | i |S )
Nlogdirnumpyutf8   r   vWhen using several event log directories, please call `wandb.tensorboard.patch(root_logdir="...")` before `wandb.init`-\d+__Found log directory outside of given root_logdir, dropping given root_logdir for event file in r   r   )hasattrr.   decodeappendr   setr	   termwarnsocketgethostnameresearchspanospathabspath
startswith_notify_tensorboard_logdir)r+   r,   r-   root_logdir_arghostnamer=   logdir_histold_csfw_funcr   r   r   r   new_csfw_funcc   s2   

z)_patch_tensorflow2.<locals>.new_csfw_funcr   create_summary_file_writer)rJ   r   orig_create_summary_file_writerr	   r
   r7   )r   r   r   r   rI   r   rF   r   r"   Y   s    !r"   c                    sD   g  G  fddd| j }| j | _|| _ tjd |dg d S )Nc                       s4   e Zd Zdedededdf fddZ  ZS )z._patch_file_writer.<locals>.TBXEventFileWriterr-   r+   r,   r   Nc                    s    | }ttdkrdkrtd t }td| |}|r2|d |	 d  }nd urMt
j|t
jsMtd|  d}t||d t j|g|R i | d S )Nr0   r   r1   r2   r3   r4   )r7   r   r8   r	   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   super__init__)selfr-   r+   r,   rD   rE   r=   )	__class__rG   r   r   r   r   rM      s*   

z7_patch_file_writer.<locals>.TBXEventFileWriter.__init__)__name__
__module____qualname__strr   rM   __classcell__r   rG   r   r   )rO   r   TBXEventFileWriter   s    ,rV   r   EventFileWriter)rW   orig_EventFileWriterr	   r
   r7   )r   r   r   r   rV   r   rU   r   r#      s
   r#   r-   c                 C   s$   t jd urt jj| ||d d S d S )Nr4   )r	   run_tensorboard_callback)r-   r   r   r   r   r   rC      s   
rC   )r   N)TNNr   )Tr   )__doc__r?   r<   r:   typingr   r   r	   
wandb.utilr   r!   r   r   r    r   boolrS   r*   r"   r#   rC   r   r   r   r   <module>   s    

C
3
.