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")
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")
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")