o
    xi                     @  s   d Z ddlmZ ddlZddlZddlZddl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%ddZ		d&d'ddZ		d&d'ddZ	d&d(d!d"ZdS ))z1monkeypatch: patch code to add tensorboard hooks.    )annotationsN)Anyz%tensorflow.python.ops.gen_summary_opsztensorboardX.writerz'tensorflow.python.summary.writer.writerz,tensorboard.summary.writer.event_file_writerztorch.utils.tensorboard.writerreturnNonec                  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   ]/home/ubuntu/.local/lib/python3.10/site-packages/wandb/integration/tensorboard/monkeypatch.pyunpatch   s   r   T savebooltensorboard_xbool | Nonepytorchroot_logdirstrc           	      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   r   c                   sB   | j g  d	 fdd}| _|| _ tjd |dg d S )
Nargsr   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   )hasattrr2   decodeappendr   setr
   termwarnsocketgethostnameresearchspanospathabspath
startswith_notify_tensorboard_logdir)r/   r0   r1   root_logdir_arghostnamerA   logdir_histold_csfw_funcr   r   r   r   new_csfw_funce   s2   

z)_patch_tensorflow2.<locals>.new_csfw_funcr   create_summary_file_writer)r/   r   r0   r   r   r   )rN   orig_create_summary_file_writerr
   r   r;   )r   r   r   r   rM   r   rJ   r   r&   [   s   !r&   c                   sD   g  G  fddd| j }| j | _|| _ tjd |dg d S )Nc                      s$   e Zd Zd
 fdd	Z  ZS )z._patch_file_writer.<locals>.TBXEventFileWriterr1   r   r/   r   r0   r   r   c                   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 )Nr4   r   r5   r6   r7   r8   )r;   r   r<   r
   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   super__init__)selfr1   r/   r0   rH   rI   rA   )	__class__rK   r   r   r   r   rQ      s*   

z7_patch_file_writer.<locals>.TBXEventFileWriter.__init__)r1   r   r/   r   r0   r   r   r   )__name__
__module____qualname__rQ   __classcell__r   rK   r   r   )rS   r   TBXEventFileWriter   s    rY   r   EventFileWriter)rZ   orig_EventFileWriterr
   r   r;   )r   r   r   r   rY   r   rX   r   r'      s
   r'   r1   c                 C  s$   t jd urt jj| ||d d S d S )Nr8   )r
   run_tensorboard_callback)r1   r   r   r   r   r   rG      s   
rG   )r   r   )TNNr   )
r   r   r   r   r   r   r   r   r   r   )Tr   )
r   r   r   r   r   r   r   r   r   r   )r1   r   r   r   r   r   r   r   )__doc__
__future__r   rC   r@   r>   typingr   r
   
wandb.utilr!   r%   r"   r#   r$   r   r.   r&   r'   rG   r   r   r   r   <module>   s6    
C3.