From da51e4292bbab0416f5a5e6ea9b7fd05d140dbb3 Mon Sep 17 00:00:00 2001 From: Jyotirmoy Chakraborty <191668179+Joy-chakraborty-23@users.noreply.github.com> Date: Sat, 2 Aug 2025 14:04:59 +0530 Subject: [PATCH 1/2] Update __init__.py Uses numpy.ma.masked_invalid to ignore NaN values. Alternatively, np.nan_to_num replaces NaN with a default (e.g., 0). --- py/visdom/__init__.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/py/visdom/__init__.py b/py/visdom/__init__.py index 3c0a6c66..aa26d86f 100644 --- a/py/visdom/__init__.py +++ b/py/visdom/__init__.py @@ -1733,6 +1733,11 @@ def scatter(self, X, Y=None, win=None, env=None, opts=None, update=None, name=No @pytorch_wrap def line(self, Y, X=None, win=None, env=None, opts=None, update=None, name=None): + import numpy as np + + Y = np.array(Y) + if np.any(np.isnan(Y)): + Y = np.ma.masked_invalid(Y) """ This function draws a line plot. It takes in an `N` or `NxM` tensor `Y` that specifies the values of the `M` lines (that connect `N` points) @@ -1761,6 +1766,7 @@ def line(self, Y, X=None, win=None, env=None, opts=None, update=None, name=None) If `update` is specified, the figure will be updated without creating a new plot -- this can be used for efficient updating. """ + if update is not None: if update == "remove": return self.scatter( @@ -1805,6 +1811,14 @@ def line(self, Y, X=None, win=None, env=None, opts=None, update=None, name=None) labels = np.arange(1, Y.shape[1] + 1) labels = np.tile(labels, (Y.shape[0], 1)).ravel(order="F") + win = 'line_' + env + str(idx) + return _send({ + 'data': Y.tolist(), # Send cleaned data + 'win': win, + 'eid': env, + 'layout': layout, + 'opts': opts}) + return self.scatter( X=linedata, Y=labels, opts=opts, win=win, env=env, update=update, name=name ) From 39cf1b155dce2265a05396f7effc79160ccc5aec Mon Sep 17 00:00:00 2001 From: Jyotirmoy Chakraborty <191668179+Joy-chakraborty-23@users.noreply.github.com> Date: Sat, 9 Aug 2025 00:35:07 +0530 Subject: [PATCH 2/2] Update app.py --- py/visdom/server/app.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/py/visdom/server/app.py b/py/visdom/server/app.py index 717ef5bb..15052598 100644 --- a/py/visdom/server/app.py +++ b/py/visdom/server/app.py @@ -217,3 +217,25 @@ def load_user_settings(self): settings["user_css"] = user_css return settings +class SocketHandler(tornado.websocket.WebSocketHandler): + def check_origin(self, origin): + return True # Or customize for security + + def open(self): + try: + logging.info("WebSocket connection opened") + # Existing open logic (e.g., register client) + except Exception as e: + logging.error(f"WebSocket open error: {e}") + + def on_message(self, message): + try: + # Existing message handling logic + pass + except Exception as e: + logging.error(f"WebSocket message error: {e}") + self.close() # Gracefully close on error + + def on_close(self): + logging.info("WebSocket connection closed") + # Existing cleanup logic