Ejemplo n.º 1
0
def detail(run_id: str) -> None:
    click.echo(click.style("Run [{}] detailed information.\n".format(run_id), fg='magenta'))

    glob_query = "{}/**/{}/run.json".format(EXPERIMENTS_DIRECTORY, run_id)
    results = glob.glob(glob_query)

    if len(results) == 0:
        click.echo(click.style("No data for experiment found =(\n"
                               "Check `qiskitflow runs`", fg="yellow"))

    for path in results:
        run = Experiment.load(path)

        ps = "\n".join(str(p) for p in run.parameters)
        ms = "\n".join(str(m) for m in run.metrics)
        cts = "\n".join(str(c) for c in run.counts)

        header = ["", "Values"]
        rows = [
            ["Run ID", run.run_id],
            ["Experiment", run.name],
            ["Date", datetime.fromtimestamp(run.timestamp)],
            ["Parameters", ps],
            ["Metrics", ms],
            ["Counts", cts]
        ]

        click.echo(click.style(tabulate(rows, header, tablefmt='grid'), fg='white'))
Ejemplo n.º 2
0
    def test_experiments_list(self):
        """ Test experiments list. """
        with self.runner.isolated_filesystem():
            for idx in range(5):
                with Experiment("{} experiment".format(idx)) as exp:
                    exp.write_metric("metric", idx * 1.)
                    exp.write_parameter("parameter", "value {}".format(idx))
            result = self.runner.invoke(experiments_list)

            expected_result = """+--------------+----------+
                                 | Experiment   |   # runs |
                                 +==============+==========+
                                 | 4 experiment |        1 |
                                 +--------------+----------+
                                 | 1 experiment |        1 |
                                 +--------------+----------+
                                 | 3 experiment |        1 |
                                 +--------------+----------+
                                 | 0 experiment |        1 |
                                 +--------------+----------+
                                 | 2 experiment |        1 |
                                 +--------------+----------+"""

            self.assertEqual(result.exit_code, 0)
            for idx in range(5):
                self.assertTrue("{} experiment".format(idx) in result.output)
Ejemplo n.º 3
0
def run():

    with Experiment("LEL", entrypoint="test.py") as exp:
        exp.write_metric("lel", 0.1)
        exp.write_metric("lel2", 0.2)
        exp.write_metric("lel3", 0.3)
        exp.write_metric("lel4", 0.4)

        exp.write_parameter("asdasd", "asdasd")
        exp.write_parameter("asdasd123", "asdasd")
        exp.write_parameter("asdasd1232", "asdasd")
        exp.write_parameter("asdasd123123", "asdasd")
Ejemplo n.º 4
0
def _get_runs(search: str,
              experiment_name: str,
              order_by: str,
              order_type: str = "asc"):

    glob_query = "{}/**/**/run.json".format(EXPERIMENTS_DIRECTORY)
    if experiment_name:
        glob_query = "{}/{}/**/run.json".format(EXPERIMENTS_DIRECTORY,
                                                experiment_name)

    runs_paths = glob.glob(glob_query)

    # gather all runs and sort them accordingly
    runs = []
    for path in runs_paths:
        experiment = Experiment.load(path)
        if experiment_name and experiment_name != experiment.name:
            continue
        if search in experiment.run_id:
            ordering = experiment.get_metric(
                order_by) if order_by else os.path.getctime(path)
            runs.append({"order": int(ordering), "run": Experiment.load(path)})
    runs.sort(key=lambda x: x["order"], reverse=order_type == "desc")

    # collect rows to display
    rows = []
    for entry in runs:
        run = entry["run"]
        ps = [str(p) for p in run.parameters]
        ms = [str(m) for m in run.metrics]

        rows.append([
            datetime.fromtimestamp(run.timestamp),
            "{}\n({})".format(run.name,
                              run.run_id), "\n".join(ms), "\n".join(ps)
        ])

    return rows
Ejemplo n.º 5
0
def run():

    with Experiment("LEL") as exp:
        exp.write_metric("lel", 0.1)
        exp.write_metric("lel2", 0.2)
        exp.write_metric("lel3", 0.3)
        exp.write_metric("lel4", 0.4)

        exp.write_parameter("asdasd", "asdasd")
        exp.write_parameter("asdasd123", "asdasd")
        exp.write_parameter("asdasd1232", "asdasd")
        exp.write_parameter("asdasd123123", "asdasd")

        exp.write_counts("measure 1", {"01": 123123})
Ejemplo n.º 6
0
    def test_experiment_info(self):
        """ Test experiments list. """
        with self.runner.isolated_filesystem():
            with Experiment("experiment") as exp:
                exp.write_metric("metric", 1.)
                exp.write_metric("other metric", 2.)
                exp.write_parameter("parameter", "value")
                exp.write_parameter("other parameter", "other value")

            result = self.runner.invoke(experiment_info, ["experiment"])

            self.assertEqual(result.exit_code, 0)
            for metric in exp.metrics:
                self.assertTrue(str(metric) in result.output)
            for param in exp.parameters:
                self.assertTrue(str(param) in result.output)
Ejemplo n.º 7
0
    def test_metrics_and_parameters_options(self):
        """ Tests metrics and parameters command options. """
        with self.runner.isolated_filesystem():
            with Experiment("experiment") as exp:
                exp.write_metric("metric", 1.)
                exp.write_metric("other metric", 2.)
                exp.write_parameter("parameter", "value")
                exp.write_parameter("other parameter", "other value")

            result = self.runner.invoke(experiment_info, [
                "experiment", "--metrics=metric",
                "--parameters=parameter,other parameter"
            ])

            self.assertEqual(result.exit_code, 0)
            self.assertTrue("M[metric]" in result.output)
            self.assertFalse("other metric" in result.output)
Ejemplo n.º 8
0
def _get_runs(name: str, metrics: str, parameters: str):
    """ Get run list.

    Args:
        name (str): name of experiment
        metrics (str): csv list of metrics to display
        parameters (str): csv list of parameters to display
        sort (str): sort by metric

    Returns:
        rows (list): list of rows for rendered table
    """

    runs = []
    for idx, path in enumerate(
            glob.glob("{}/{}/**/run.json".format(EXPERIMENTS_DIRECTORY,
                                                 name))):
        _, _, run_id, _ = path.split("/")
        experiment = Experiment.load(path)

        if not metrics and not parameters:
            ms = [str(m) for m in experiment.metrics]
            ps = [str(p) for p in experiment.parameters]

            runs.append([run_id, "\n".join(ps), "\n".join(ms)])
        else:
            run = [run_id]

            for parameter in parameters.split(","):
                params_dict = {p.name: p.value for p in experiment.parameters}
                run.append(params_dict.get(parameter, ""))

            for metric in metrics.split(","):
                metrics_dict = {m.name: m.value for m in experiment.metrics}
                run.append(metrics_dict.get(metric, ""))

            runs.append(run)

    return runs
Ejemplo n.º 9
0
def quantum_teleporation_experiment():

    experiment = Experiment("quantum_teleportation")

    qc = QuantumCircuit(1)  # Create a quantum circuit with one qubit
    psi = [1 / sqrt(2),
           1 / sqrt(2)]  # Define initial_state in a superposition state
    initial_state = Initialize(psi)
    qc.append(initial_state,
              [0])  # Apply initialisation operation to the 0th qubit
    result = execute(qc, Aer.get_backend('statevector_simulator')).result(
    )  # Do the simulation, returning the result
    exp_state = result.get_statevector(qc)

    qr = QuantumRegister(3)
    cr = ClassicalRegister(1)
    circuit = QuantumCircuit(qr, cr)

    circuit.append(initial_state, [0])
    circuit.barrier()

    circuit.h(qr[1])
    circuit.cx(qr[1], qr[2])
    circuit.barrier()

    circuit.cx(qr[0], qr[1])
    circuit.h(qr[0])
    circuit.barrier()

    circuit.cz(qr[0], qr[2])
    circuit.cx(qr[1], qr[2])

    circuit.measure(qr[2], cr)

    t = time.time()

    backend = Aer.get_backend('qasm_simulator')
    job_circuit = execute(circuit, backend=backend, shots=4096)
    device_counts = job_circuit.result().get_counts(circuit)

    experiment.write_measurement(device_counts)

    qc = QuantumRegister(3)
    circuit = QuantumCircuit(qc)

    circuit.append(initial_state, [0])
    circuit.barrier()

    circuit.h(qc[1])
    circuit.cx(qc[1], qc[2])
    circuit.barrier()

    circuit.cx(qc[0], qc[1])
    circuit.h(qc[0])
    circuit.barrier()

    circuit.cz(qc[0], qc[2])
    circuit.cx(qc[1], qc[2])

    t = time.time()

    qst_circuit = state_tomography_circuits(circuit, qc[2])
    job_circuit = execute(qst_circuit, backend=backend, shots=4096)

    tomo_circuit = StateTomographyFitter(job_circuit.result(), qst_circuit)
    tomo_circuit.data

    rho_circuit = tomo_circuit.fit()

    F_state = state_fidelity(exp_state, rho_circuit)

    pur = purity(rho_circuit)

    experiment.write_metric("purity", float(pur))
    experiment.write_metric("fit_fidelity_state", float(F_state))
    experiment.write_metric("execution time", int(time.time() - t))

    experiment.write_parameter("backend", "qasm_simulator")
    experiment.write_parameter("number of shots", 4096)
    experiment.write_parameter("job id", str(job_circuit.job_id()))

    experiment.save_exoeriment()

    print("WOOHOO!")  # that exact feeling when your code is working
Ejemplo n.º 10
0
from qiskitflow.lib.experiment import Experiment
import random
import os


for name in ["entanglement", "simple_circuit_experiment", "qml_experiment", "quantum_ensembling"]:
    for i in range(5):
        experiment = Experiment(name)

        experiment.write_measurement({
            "0000": random.randint(0, 1024),
            "0001": random.randint(0, 1024),
            "0010": random.randint(0, 1024),
            "0011": random.randint(0, 1024)
        })
        experiment.write_measurement({
            "0000": random.randint(0, 1024),
            "0001": random.randint(0, 1024),
            "0010": random.randint(0, 1024),
            "0011": random.randint(0, 1024)
        })
        experiment.write_measurement({
            "0000": random.randint(0, 1024),
            "0001": random.randint(0, 1024),
            "0010": random.randint(0, 1024),
            "0011": random.randint(0, 1024)
        })

        experiment.write_metric("t0", 0.1)
        experiment.write_metric("execution time", 10)
Ejemplo n.º 11
0
from qiskitflow.lib.experiment import Experiment

experiment = Experiment("some name")

experiment.write_measurement({"00": 1024})
experiment.write_measurement({"01": 1024})

experiment.write_metric("t0", 0.1)

experiment.write_parameter("backend", "Tashkent")

experiment.save_exoeriment()