def main(backend_specs):
    # Define registers and circuit
    q = QuantumRegister(2)
    c = ClassicalRegister(2)
    circuit = QuantumCircuit(q, c)

    # Quantum circuit starts here
    circuit.h(q[0])
    circuit.cnot(q[0], q[1])
    # Note we have to remove the Measurement to convert to Zapata's circuit format
    # End quantum circuit

    # After this point we use the power of Orquestra to use different backends!
    # Use Zapata's representation of quantum circuits
    zap_circuit = Circuit(circuit)

    # Build a backend from the specs we passed to the step
    if isinstance(backend_specs, str):
        backend_specs_dict = yaml.load(backend_specs, Loader=yaml.SafeLoader)
    else:
        backend_specs_dict = backend_specs
    backend = create_object(backend_specs_dict)

    # We can use this backend to get the bitstring distribution
    distribution = backend.get_bitstring_distribution(zap_circuit)

    # Finally, we can save the output!
    save_bitstring_distribution(distribution, "output-distribution.json")
Beispiel #2
0
def get_bars_and_stripes_target_distribution(nrows,
                                             ncols,
                                             fraction=1.,
                                             method="zigzag"):
    ''' Generates bars and stripes (BAS) data in zigzag pattern
    Args:
        nrows (int): number of rows in BAS dataset
        ncols (int): number of columns in BAS dataset
        fraction (float): maximum fraction of patterns to include (at least one pattern will always be included)
        method (string): the method to use to label the qubits
    Returns:
        Array of list of BAS pattern.
    '''
    if method == "zigzag":
        data = bars_and_stripes_zigzag(nrows, ncols)
    else:
        raise RuntimeError(
            "Method: {} is not supported for generated a target distribution for bars and stripes"
            .format(method))

    # Remove patterns until left with a subset that has cardinality less than or equal to the percentage * total number of patterns
    num_desired_patterns = int(len(data) * fraction)
    num_desired_patterns = max(num_desired_patterns, 1)
    data = random.sample(list(data), num_desired_patterns)

    distribution_dict = {}
    for pattern in data:
        bitstring = ""
        for qubit in pattern:
            bitstring += str(qubit)

        distribution_dict[bitstring] = 1.

    save_bitstring_distribution(BitstringDistribution(distribution_dict),
                                "distribution.json")
Beispiel #3
0
def get_bitstring_distribution(
    backend_specs: Dict,
    circuit: str,
    noise_model: str = "None",
    device_connectivity: str = "None",
):
    backend_specs = json.loads(backend_specs)
    if noise_model != "None":
        backend_specs["noise_model"] = load_noise_model(noise_model)
    if device_connectivity != "None":
        backend_specs["device_connectivity"] = load_circuit_connectivity(
            device_connectivity)

    backend = create_object(backend_specs)
    circuit = load_circuit(circuit)

    bitstring_distribution = backend.get_bitstring_distribution(circuit)
    save_bitstring_distribution(bitstring_distribution,
                                "bitstring-distribution.json")
def get_bitstring_distribution(
    backend_specs: Specs,
    circuit: str,
    noise_model: Optional[str] = None,
    device_connectivity: Optional[str] = None,
):
    if isinstance(backend_specs, str):
        backend_specs = json.loads(backend_specs)
    if noise_model is not None:
        backend_specs["noise_model"] = load_noise_model(noise_model)
    if device_connectivity is not None:
        backend_specs["device_connectivity"] = layouts.load_circuit_connectivity(
            device_connectivity
        )

    backend = create_object(backend_specs)
    circuit = circuits.load_circuit(circuit)

    bitstring_distribution = backend.get_bitstring_distribution(circuit)
    save_bitstring_distribution(bitstring_distribution, "bitstring-distribution.json")
def get_bars_and_stripes_target_distribution(nrows, ncols, fraction, method):
    distribution = _get_bars_and_stripes_target_distribution(
        nrows, ncols, fraction, method)

    save_bitstring_distribution(distribution, "distribution.json")