Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix visdom integration (using viz.line() instead of viz.updatetrace()) #2252

Merged
merged 11 commits into from
Jan 11, 2019
8 changes: 6 additions & 2 deletions gensim/models/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,12 @@ def on_epoch_end(self, epoch, topics=None):
)
self.diff_mat.put(diff_mat)
else:
self.viz.updateTrace(
Y=np.array([value]), X=np.array([epoch]), env=metric.viz_env, win=self.windows[i]
self.viz.line(
Y=np.array([value]),
X=np.array([epoch]),
env=metric.viz_env,
win=self.windows[i],
update='append'
)

if metric.logger == "shell":
Expand Down
60 changes: 60 additions & 0 deletions gensim/test/test_lda_callback.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2018 Allenyl <allen7575@gmail.com>
# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl.html

"""
Automated tests for checking visdom API
"""
import unittest
import subprocess
import time

from gensim.models import LdaModel
from gensim.test.utils import datapath, common_dictionary
from gensim.corpora import MmCorpus
from gensim.models.callbacks import CoherenceMetric

try:
from visdom import Visdom
VISDOM_INSTALLED = True
except ImportError:
VISDOM_INSTALLED = False


@unittest.skipIf(VISDOM_INSTALLED is False, "Visdom not installed")
class TestLdaCallback(unittest.TestCase):

def setUp(self):
self.corpus = MmCorpus(datapath('testcorpus.mm'))
self.ch_umass = CoherenceMetric(corpus=self.corpus, coherence="u_mass", logger="visdom", title="Coherence")
self.callback = [self.ch_umass]
self.model = LdaModel(id2word=common_dictionary, num_topics=2, passes=10, callbacks=self.callback)

self.host = "http://localhost"
self.port = 8097

def testCallbackUpdateGraph(self):

# Popen have no context-manager in 2.7, for this reason - try/finally.
try:
# spawn visdom.server
proc = subprocess.Popen(['python', '-m', 'visdom.server', '-port', str(self.port)])

# wait for visdom server startup (any better way?)
time.sleep(3)

viz = Visdom(server=self.host, port=self.port)
assert viz.check_connection()

# clear screen
viz.close()

self.model.update(self.corpus)
finally:
proc.kill()


if __name__ == '__main__':
unittest.main()
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ def finalize_options(self):
'testfixtures',
'scikit-learn',
'Morfessor==2.0.2a4',
'visdom >= 0.1.8',
]

linux_testenv = win_testenv[:]
Expand Down