Source code for sourced.ml.core.utils.projector

from http.server import HTTPServer, SimpleHTTPRequestHandler, test
import logging
import os
import shutil
import threading
import time


[docs]class CORSWebServer: def __init__(self): self.thread = None self.server = None
[docs] def serve(self): outer = self class ClojureServer(HTTPServer): def __init__(self, *args, **kwargs): HTTPServer.__init__(self, *args, **kwargs) outer.server = self class CORSRequestHandler(SimpleHTTPRequestHandler): def end_headers(self): self.send_header("Access-Control-Allow-Origin", "*") SimpleHTTPRequestHandler.end_headers(self) test(CORSRequestHandler, ClojureServer)
[docs] def start(self): self.thread = threading.Thread(target=self.serve) self.thread.start()
[docs] def stop(self): if self.running: self.server.shutdown() self.server.server_close() self.thread.join() self.server = None self.thread = None
@property
[docs] def running(self): return self.server is not None
[docs]web_server = CORSWebServer()
[docs]def present_embeddings(destdir, run_server, labels, index, embeddings): log = logging.getLogger("projector") log.info("Writing Tensorflow Projector files...") if not os.path.isdir(destdir): os.makedirs(destdir) os.chdir(destdir) metaf = "id2vec_meta.tsv" with open(metaf, "w") as fout: if len(labels) > 1: fout.write("\t".join(labels) + "\n") for item in index: if len(labels) > 1: fout.write("\t".join(item) + "\n") else: fout.write(item + "\n") log.info("Wrote %s", metaf) dataf = "id2vec_data.tsv" with open(dataf, "w") as fout: for vec in embeddings: fout.write("\t".join(str(v) for v in vec)) fout.write("\n") log.info("Wrote %s", dataf) jsonf = "id2vec.json" with open(jsonf, "w") as fout: fout.write("""{ "embeddings": [ { "tensorName": "id2vec", "tensorShape": [%s, %s], "tensorPath": "http://0.0.0.0:8000/%s", "metadataPath": "http://0.0.0.0:8000/%s" } ] } """ % (len(embeddings), len(embeddings[0]), dataf, metaf)) log.info("Wrote %s", jsonf) if run_server and not web_server.running: web_server.start() url = "http://projector.tensorflow.org/?config=http://0.0.0.0:8000/" + jsonf log.info(url) if run_server: if shutil.which("xdg-open") is not None: os.system("xdg-open " + url) else: browser = os.getenv("BROWSER", "") if browser: os.system(browser + " " + url) else: print("\t" + url)
[docs]def wait(): log = logging.getLogger("projector") secs = int(os.getenv("PROJECTOR_SERVER_TIME", "60")) log.info("Sleeping for %d seconds, safe to Ctrl-C" % secs) try: time.sleep(secs) except KeyboardInterrupt: pass web_server.stop()