Exemple #1
0
    def _figure_data(self, plot, fmt, as_script=False, **kwargs):
        if fmt == 'gif':
            import plotly.io as pio

            from PIL import Image
            from plotly.io.orca import ensure_server, shutdown_server, status

            running = status.state == 'running'
            if not running:
                ensure_server()

            nframes = len(plot)
            frames = []
            for i in range(nframes):
                plot.update(i)
                img_bytes = BytesIO()
                figure = go.Figure(self.get_plot_state(plot))
                img = pio.to_image(figure, 'png', validate=False)
                img_bytes.write(img)
                frames.append(Image.open(img_bytes))

            if not running:
                shutdown_server()

            bio = BytesIO()
            duration = (1. / self.fps) * 1000
            frames[0].save(bio,
                           format='GIF',
                           append_images=frames[1:],
                           save_all=True,
                           duration=duration,
                           loop=0)
            bio.seek(0)
            data = bio.read()
        elif fmt in ('png', 'svg'):
            import plotly.io as pio

            # Wrapping plot.state in go.Figure here performs validation
            # and applies any default theme.
            figure = go.Figure(self.get_plot_state(plot))
            data = pio.to_image(figure, fmt)

            if fmt == 'svg':
                data = data.decode('utf-8')
        else:
            raise ValueError("Unsupported format: {fmt}".format(fmt=fmt))

        if as_script:
            b64 = base64.b64encode(data).decode("utf-8")
            (mime_type, tag) = MIME_TYPES[fmt], HTML_TAGS[fmt]
            src = HTML_TAGS['base64'].format(mime_type=mime_type, b64=b64)
            div = tag.format(src=src, mime_type=mime_type, css='')
            return div
        return data
def __run_exp(d,
              cfgs,
              prog_list,
              pid,
              cfgs_keys,
              q,
              WRITE_FREQ=10,
              overwrite=True):

    df = pd.DataFrame(index=range(WRITE_FREQ),
                      columns=list(cfgs_keys).extend(["acc", "elapsed_time"]))

    def check_mem():
        # gives an object with many fields
        vm = psutil.virtual_memory()
        return (vm.percent)

    def pack_affmat_str(i):
        #Extract info related to affmat
        affmat_keys = []
        affmat_vals = []
        for k, v in cfgs[i].items():
            if k.startswith("aff_") or k == "dataset":
                affmat_keys.append(k)
                affmat_vals.append(v)
        affmat_keys, affmat_vals = (list(t) for t in zip(
            *sorted(zip(affmat_keys, affmat_vals))))
        affmat_str = ""
        #Create string identiiiifying this affmat config
        for i in range(len(affmat_keys)):
            affmat_str = affmat_str + affmat_keys[i] + "=" + str(
                affmat_vals[i]) + ";"
        return (affmat_str)

    print("Process Number:{}".format(pid))
    count = 0
    for i in range(len(cfgs)):

        # disable output
        nullwrite = open(os.devnull, 'w')
        oldstdout = sys.stdout
        if not DEBUG_MODE:
            sys.stdout = nullwrite

        #Get affmat string to index into affmat dict
        affmat_str = pack_affmat_str(i)

        #Update dataframe
        for k, v in cfgs[i].items():
            df.loc[i % WRITE_FREQ, k] = v
        #Create GSSL object
        gssl_obj = GraphSSL(cfgs[i])

        #Get Affinity Matrix
        if DISABLE_MATRIX_DICT:
            W = gssl_obj.getAffMatrix()
        else:
            W = d.get(affmat_str, None)
            if W is None:
                W = gssl_obj.getAffMatrix()
                d[affmat_str] = W
                count += 1

        #Run algorithm
        res = gssl_obj.train(W)
        if orca.status.state == "running":
            orca.shutdown_server()

        del gssl_obj
        df.loc[i % WRITE_FREQ, "acc"] = res["acc"]
        df.loc[i % WRITE_FREQ, "elapsed_time"] = res["elapsed_time"]

        #Update results dict
        if i % WRITE_FREQ == (WRITE_FREQ - 1) or i == (len(cfgs) - 1):
            result_path = './results/' + OUTPUT_NAME + '_pid=' + str(
                pid) + '.csv'
            f_exists = os.path.isfile(result_path)
            f_mode = "a"
            if (f_exists and overwrite
                    and i == WRITE_FREQ - 1) or (not f_exists
                                                 and i == WRITE_FREQ - 1):
                f_mode = "w"
            with open(result_path, f_mode) as f:
                is_header = (f_mode == "w")
                df.iloc[0:((i % WRITE_FREQ) + 1), :].to_csv(f,
                                                            header=is_header)
                df.iloc[0:((i % WRITE_FREQ) + 1), :] = np.nan

        #Update progress list
        prog_list[pid] = i / len(cfgs)

        sys.stdout = oldstdout

        #Enable output
        q.put(1)