
    h3                     j    S SK r S SKrS SK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 r " S S5      rg)	    N   )compute_curve)figure_to_image)make_npc                    ^  U 4S jnU$ )Nc                 x   > U R                   (       d  [        S5        U R                  5         g T" U /UQ70 UD6  g )Nz+ERROR: No Visdom server currently connected)server_connectedprint_try_connect)selfargskwargsfns      T/var/www/fran/franai/venv/lib/python3.13/site-packages/tensorboardX/visdom_writer.pywrapper"_check_connection.<locals>.wrapper   s6    $$?@
4!$!&!     )r   r   s   ` r   _check_connectionr      s    " Nr   c                   8   \ rS rSrS rS r\SS j5       r\SS j5       r\S 5       r	\SS j5       r
\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       r\SS j5       r\S 5       r\SS j5       r\SS j5       r\SS j5       r\ SS j5       rS rSrg)VisdomWriter   c                      SSK Jn  0 U l        SU l        U" U0 UD6U l        0 U l        U R                  5         g ! [         a    [        S5      ef = f)Nr   )Visdomz4Visdom visualization requires installation of VisdomF)visdomr   ImportErrorscalar_dictr	   viswindowsr   )r   r   r   r   s       r   __init__VisdomWriter.__init__   sf    	H%
  %4*6*  	HFH H	Hs	   ; Ac                 J   SnU R                   R                  5       U l        U R                  (       dY  US:  aS  [        R                  " S5        US-  nU R                   R                  5       U l        U R                  (       d  US:  a  MS  U R                  (       d   S5       eg )Nr   r   g?z%No connection could be formed quickly)r   check_connectionr	   timesleep)r   startup_secs     r   r   VisdomWriter._try_connect'   s}     $ 9 9 ;''K!OJJsO3K$(HH$=$=$?D! ''K!O $$M&MM$r   Nc           	      V   U R                   R                  U5      c  0 U R                   U'   U R                   U   R                  U5      SLnU(       a  U R                   U   U   U/-   OU/U R                   U   U'   U SU 3nU(       a  UO[        U R                   U   U   5      nU(       a=  U R                  R	                  [        U5      [        U5      USU R                  U   S9  gU R                  R	                  [        U5      [        U5      UUSUS.S9U R                  U'   g)a  Add scalar data to Visdom. Plots the values in a plot titled
   {main_tag}-{tag}.

Args:
    tag (string): Data identifier
    scalar_value (float or string/blobname): Value to save
    global_step (int): Global step value to record
    main_tag (string): Data group identifier
N-append)XYnameupdatewintimesteptitlexlabelylabelr+   r,   r-   opts)r   getlenr   liner   r   )r   tagscalar_valueglobal_stepmain_tagexists	plot_namex_vals           r   
add_scalarVisdomWriter.add_scalar0   s0    )1)+DX&!!(+//4D@$ +/*:*:8*DS*IN++7. 	"3'j#'	*D4D4DX4Ns4S0THHMM%.,'LL+   '+hhmm%.,'&(!	 '4 	'DLL#r   c                 @    U H  nU R                  XBU   X15        M     g)a  Adds many scalar data to summary.

Note that this function also keeps logged scalars in memory. In extreme case it explodes your RAM.

Args:
    tag (string): Data identifier
    main_tag (string): Data group identifier
    tag_scalar_dict (dict): Key-value pair storing the tag and corresponding values
    global_step (int): Global step value to record

Examples::

    writer.add_scalars('run_14h',{'xsinx':i*np.sin(i/r),
                                  'xcosx':i*np.cos(i/r),
                                  'arctanx': numsteps*np.arctan(i/r)}, i)
    This function adds three plots:
        'run_14h-xsinx',
        'run_14h-xcosx',
        'run_14h-arctanx'
    with the corresponding values.
N)rA   )r   r=   tag_scalar_dictr<   keys        r   add_scalarsVisdomWriter.add_scalarsY   s!    . #COOC!5{M #r   c                     [        US5       n[        R                  " U R                  U5        SSS5        0 U l        g! , (       d  f       N= f)zExports to the given 'path' an ASCII file containing all the scalars written
so far by this instance, with the following format:
{writer_id : [[timestamp, step, value], ...], ...}

The scalars saved by ``add_scalars()`` will be flushed after export.
wN)openjsondumpr   )r   pathfs      r   export_scalars_to_json#VisdomWriter.export_scalars_to_jsons   s8     $_IId&&*  _s	   "?
Ac                 d    [        U5      nU R                  R                  [        U5      SU0S9  g)a  Add histogram to summary.

Args:
    tag (string): Data identifier
    values (torch.Tensor, numpy.array, or string/blobname): Values to build histogram
    global_step (int): Global step value to record
    bins (string): one of {'tensorflow', 'auto', 'fd', ...}, this determines how the bins are made. You can find
      other options in: https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html
r2   r6   N)r   r   	histogram)r   r:   valuesr<   binss        r   add_histogramVisdomWriter.add_histogram   s,     76?'3@r   c                 R    [        U5      nU R                  R                  X!US.S9  g)a  Add image data to summary.

Note that this requires the ``pillow`` package.

Args:
    tag (string): Data identifier
    img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data
    global_step (int): Global step value to record
Shape:
    img_tensor: :math:`(C, H, W)`. Use ``torchvision.utils.make_grid()`` to prepare it is a good idea.
    C = colors (can be 1 - grayscale, 3 - RGB, 4 - RGBA)
)r2   captionrR   N)r   r   image)r   r:   
img_tensorr<   rY   s        r   	add_imageVisdomWriter.add_image   s%     Z(
z'(JKr   c                 <    U R                  U[        X$5      U5        g)a^  Render matplotlib figure into an image and add it to summary.

Note that this requires the ``matplotlib`` package.

Args:
    tag (string): Data identifier
    figure (matplotlib.pyplot.figure) or list of figures: figure or a list of figures
    global_step (int): Global step value to record
    close (bool): Flag to automatically close the figure
N)r\   r   )r   r:   figurer<   closes        r   
add_figureVisdomWriter.add_figure   s     	sOF:KHr   c           
      b   UR                   n[        U5      S:  a  [        US   5       H  n[        U[        R
                  5      (       a7  SSKnUR                  X&SS2SS2SS2SS24   5      R                  SSSS5      nO#X&SS2SS2SS2SS24   R                  SSSS5      nSn	UR                  5       nX-  R                  [        R                  5      nUR                   S   S;   d   S	5       eU R                  R                  US
U0S9  M     gU R                  R                  US
U0S9  g)a  Add video data to summary.

Note that this requires the ``moviepy`` package.

Args:
    tag (string): Data identifier
    vid_tensor (torch.Tensor): Video data, the pixel value should in [0, 1]
    global_step (int): Global step value to record
    fps (float or int): Frames per second
Shape:
    vid_tensor: :math:`(B, C, T, H, W)`. (if following tensorboardX format)
    vid_tensor: :math:`(T, H, W, C)`. (if following visdom format)
    B = batches, C = colors (1, 3, or 4), T = time frames, H = height, W = width
   r   Nr            )r   rf   rd   z_Visdom requires the last dimension to be color, which can be 1 (grayscale), 3 (RGB) or 4 (RGBA)fpstensorr6   )shaper8   range
isinstancenpndarraytorch
from_numpypermutenumpyastypeuint8r   video)
r   r:   
vid_tensorr<   rh   rk   irp   ind_vidscale_factors
             r   	add_videoVisdomWriter.add_video   s       u:>58_ j"**55 #.."aAq=133:71aA3F  )Aq!Q7??1aKG" "--/"199"((C}}Q'94 vuv4gUCLA! %$ HHNN*E3<N@r   c                 R    [        U5      nU R                  R                  USU0S9  g)a:  Add audio data to summary.

Args:
    tag (string): Data identifier
    snd_tensor (torch.Tensor, numpy.array, or string/blobname): Sound data
    global_step (int): Global step value to record
    sample_rate (int): sample rate in Hz

Shape:
    snd_tensor: :math:`(1, L)`. The values should lie between [-1, 1].
sample_frequencyri   N)r   r   audio)r   r:   
snd_tensorr<   sample_rates        r   	add_audioVisdomWriter.add_audio   s,     Z(
j);08 	9r   c                 D    Uc  UnU R                   R                  U5        g)a  Add text data to summary.

Args:
    tag (string): Data identifier
    text_string (string): String to save
    global_step (int): Global step value to record
Examples::
    writer.add_text('lstm', 'This is an lstm', 0)
    writer.add_text('rnn', 'This is an rnn', 10)
N)r   text)r   r:   text_stringr<   s       r   add_textVisdomWriter.add_text   s     Kk"r   c                     g Nr   )r   prototxts     r   add_onnx_graphVisdomWriter.add_onnx_graph        	r   c                     g r   r   )r   modelinput_to_modelverboser   s        r   	add_graphVisdomWriter.add_graph   r   r   c                     g r   r   )r   matmetadata	label_imgr<   r:   metadata_headers          r   add_embeddingVisdomWriter.add_embedding   r   r   c           	          [        U5      [        U5      p2[        X#XV5      nUSSS24   USSS24   pU R                  R                  U	UUSU 3SSS.S9  g)	a  Adds precision recall curve.

Args:
    tag (string): Data identifier
    labels (torch.Tensor, numpy.array, or string/blobname): Ground truth data. Binary label for each element.
    predictions (torch.Tensor, numpy.array, or string/blobname):
    The probability that an element be classified as true. Value should in [0, 1]
    global_step (int): Global step value to record
    num_thresholds (int): Number of thresholds used to draw the curve.

rd   N   PR Curve for recall	precisionr1   r5   )r   r   r   r9   )
r   r:   labelspredictionsr<   num_thresholdsweightsraw_datar   r   s
             r   add_pr_curveVisdomWriter.add_pr_curve  sl     &fow{/C nN %QTNHQTN6(."%	 	 		
r   c           	      t    [        U5      [        U5      pvU R                  R                  UUUSU 3SSS.S9  g)a@  Adds precision recall curve with raw data.

Args:
    tag (string): Data identifier
    true_positive_counts (torch.Tensor, numpy.array, or string/blobname): true positive counts
    false_positive_counts (torch.Tensor, numpy.array, or string/blobname): false positive counts
    true_negative_counts (torch.Tensor, numpy.array, or string/blobname): true negative counts
    false_negative_counts (torch.Tensor, numpy.array, or string/blobname): false negative counts
    precision (torch.Tensor, numpy.array, or string/blobname): precision
    recall (torch.Tensor, numpy.array, or string/blobname): recall
    global_step (int): Global step value to record
    num_thresholds (int): Number of thresholds used to draw the curve.
    see: https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/pr_curve/README.md
r   r   r   r1   r5   N)r   r   r9   )r   r:   true_positive_countsfalse_positive_countstrue_negative_countsfalse_negative_countsr   r   r<   r   r   s              r   add_pr_curve_rawVisdomWriter.add_pr_curve_raw#  sG    * $I.6(."%	 	 		
r   c                 6    U ? U ?[        R                  " 5         g r   )r   r   gccollect)r   s    r   r`   VisdomWriter.closeD  s    H


r   )r   r	   r   r   )Ndefaultr   )N
tensorflow)NN)NT)Nrd   )NiD  )NF)NNNr   N)N   N)__name__
__module____qualname____firstlineno__r    r   r   rA   rF   rO   rV   r\   ra   r{   r   r   r   r   r   r   r   r`   __static_attributes__r   r   r   r   r      s>   N & &P N N2 	 	 A A L L  I I $A $AL 9 9  # #        
 
<  PT
 
@r   r   )r   rK   mathr$   rs   rn   summaryr   utilsr   x2numr   r   r   r   r   r   <module>r      s.    	     " " o or   