diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/01_original_full_circuit.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/01_original_full_circuit.png new file mode 100644 index 0000000..c8bda18 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/01_original_full_circuit.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/02_cut_circuit_with_ancilla.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/02_cut_circuit_with_ancilla.png new file mode 100644 index 0000000..8ecaeb3 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/02_cut_circuit_with_ancilla.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_0_no_dd.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_0_no_dd.png new file mode 100644 index 0000000..d81f29f Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_0_no_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_1_no_dd.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_1_no_dd.png new file mode 100644 index 0000000..91761ca Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_1_no_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_2_no_dd.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_2_no_dd.png new file mode 100644 index 0000000..be6f15d Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_2_no_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_3_no_dd.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_3_no_dd.png new file mode 100644 index 0000000..adb0057 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/03_subcircuit_3_no_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_0_with_dd_after.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_0_with_dd_after.png new file mode 100644 index 0000000..e1dd6f2 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_0_with_dd_after.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_1_with_dd_after.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_1_with_dd_after.png new file mode 100644 index 0000000..32919c9 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_1_with_dd_after.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_2_with_dd_after.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_2_with_dd_after.png new file mode 100644 index 0000000..250a2f8 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_2_with_dd_after.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_3_with_dd_after.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_3_with_dd_after.png new file mode 100644 index 0000000..db5422d Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/04_subcircuit_3_with_dd_after.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/05_full_circuit_with_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/05_full_circuit_with_dd_before_cut.png new file mode 100644 index 0000000..0c675fd Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/05_full_circuit_with_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/06_cut_circuit_with_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/06_cut_circuit_with_dd_before_cut.png new file mode 100644 index 0000000..bebe7be Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/06_cut_circuit_with_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_0_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_0_dd_before_cut.png new file mode 100644 index 0000000..6400168 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_0_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_1_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_1_dd_before_cut.png new file mode 100644 index 0000000..225bffe Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_1_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_2_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_2_dd_before_cut.png new file mode 100644 index 0000000..0e2ca79 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_2_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_3_dd_before_cut.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_3_dd_before_cut.png new file mode 100644 index 0000000..f4eaf27 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/Circuit_visualizations/07_subcircuit_3_dd_before_cut.png differ diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/cc-dd.py b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/cc-dd.py new file mode 100644 index 0000000..6f8108a --- /dev/null +++ b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/cc-dd.py @@ -0,0 +1,939 @@ +import collections +import os +import time +from time import sleep +import copy +import csv + +import numpy as np +from qiskit.circuit.library import EfficientSU2 +from qiskit.circuit.library import XGate, YGate, ZGate, HGate +from qiskit import QuantumCircuit +from qiskit.quantum_info import SparsePauliOp +from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager +from qiskit_addon_cutting import (cut_wires, expand_observables, + generate_cutting_experiments, + partition_problem, + reconstruct_expectation_values) +from qiskit_addon_cutting.automated_cut_finding import (DeviceConstraints, + OptimizationParameters, + find_cuts) +from qiskit_aer import AerSimulator +from qiskit_aer.primitives import EstimatorV2 +from qiskit_ibm_runtime import Batch, SamplerV2 +from qiskit.primitives import ( + SamplerResult, + PrimitiveResult, +) +from qiskit.primitives.containers import ( + DataBin, + BitArray, + SamplerPubResult +) +from qiskit.visualization import circuit_drawer +from qiskit_aer.noise import NoiseModel, phase_damping_error +from pilot.pilot_compute_service import ExecutionEngine, PilotComputeService + +# Constants and settings +RESOURCE_URL_HPC = "ssh://localhost" +WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + +pilot_compute_description_ray = { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] +} + +DD_SEQUENCES = { + "XY4": [XGate(), YGate(), XGate(), YGate()] +} + +def start_pilot(pilot_compute_description_ray): + pcs = PilotComputeService(execution_engine=ExecutionEngine.RAY, working_directory=WORKING_DIRECTORY) + pcd = pcs.create_pilot(pilot_compute_description=pilot_compute_description_ray) + pcd.wait() + time.sleep(60) + return pcs + +def pre_processing(logger, num_qubits=7, qps=2, num_samples=10): + circuit = EfficientSU2(num_qubits, entanglement="linear", reps=2).decompose() + # Debug: Print all gate names used + print("Unique gate names in circuit:", set(instr.operation.name for instr in circuit.data)) + circuit.assign_parameters([0.4] * len(circuit.parameters), inplace=True) + + # Create an observable based on the number of qubits + pauli_strings = [] + for i in range(min(3, num_qubits)): # Use at most 3 observables + pauli_str = ['I'] * num_qubits + pauli_str[i] = 'Z' + pauli_strings.append(''.join(pauli_str)) + + observable = SparsePauliOp(pauli_strings) + print(f"Created observable: {pauli_strings}") + + # Specify settings for the cut-finding optimizer + optimization_settings = OptimizationParameters(seed=111) + + # Specify the size of the QPUs available + device_constraints = DeviceConstraints(qubits_per_subcircuit=qps) + + cut_circuit, metadata = find_cuts(circuit, optimization_settings, device_constraints) + print( + f'Found solution using {len(metadata["cuts"])} cuts with a sampling ' + f'overhead of {metadata["sampling_overhead"]}.\n' + f'Lowest cost solution found: {metadata["minimum_reached"]}.' + ) + for cut in metadata["cuts"]: + print(f"{cut[0]} at circuit instruction index {cut[1]}") + + qc_w_ancilla = cut_wires(cut_circuit) + + print("\n--- Cut circuit before observable expansion ---") + try: + circuit_drawer(qc_w_ancilla, output='mpl').show() + except: + pass # Ignore if running headless + print(qc_w_ancilla.draw()) + + observables_expanded = expand_observables(observable.paulis, circuit, qc_w_ancilla) + + partitioned_problem = partition_problem( + circuit=qc_w_ancilla, observables=observables_expanded + ) + subcircuits = partitioned_problem.subcircuits + subobservables = partitioned_problem.subobservables + print( + f"Sampling overhead: {np.prod([basis.overhead for basis in partitioned_problem.bases])}" + ) + + print(f"Number of subcircuits: {len(subcircuits)}") + # The subcircuits from partition_problem are stored in a dictionary with integer keys + if isinstance(subcircuits, dict): + for i, subcirc in subcircuits.items(): + print(f"\n--- Subcircuit {i} ---") + print(f"Number of qubits: {subcirc.num_qubits}") + print(f"Circuit depth: {subcirc.depth()}") + print(subcirc.draw()) + else: + # If subcircuits is already a list, iterate directly + for i, subcirc in enumerate(subcircuits): + print(f"\n--- Subcircuit {i} ---") + print(f"Number of qubits: {subcirc.num_qubits}") + print(f"Circuit depth: {subcirc.depth()}") + print(subcirc.draw()) + + # Return both the partitioned problem components and the circuit/observable for experiment generation + return subcircuits, subobservables, partitioned_problem, observable, circuit, metadata + +def apply_dd_to_subcircuits(subcircuits, dd_sequence_type="XY4", logger=None): + if dd_sequence_type not in DD_SEQUENCES: + raise ValueError(f"Unknown DD sequence type: {dd_sequence_type}. Choose from {list(DD_SEQUENCES.keys())}") + + dd_subcircuits = {} + for i, subcircuit in subcircuits.items(): + print(f"\n--- Applying DD ({dd_sequence_type}) to subcircuit {i} ---") + print(f"Original depth: {subcircuit.depth()}") + dd_subcircuit = apply_dd(subcircuit, dd_sequence_type, logger) + print(f"Depth after DD: {dd_subcircuit.depth()}") + dd_subcircuits[i] = dd_subcircuit + + return dd_subcircuits + +def get_dd_noise_model(noise_strength=0.05): + noise_model = NoiseModel() + phase_error = phase_damping_error(noise_strength) + + # Apply to all common 1-qubit gates + noisy_gates = ['x', 'y', 'z', 'h', 'sx', 'rz', 'u1', 'u2', 'u3'] + noise_model.add_all_qubit_quantum_error(phase_error, noisy_gates) + + return noise_model + +def apply_dd(circuit, dd_sequence_type="XY4", logger=None): + if dd_sequence_type not in DD_SEQUENCES: + raise ValueError(f"Unknown DD sequence type: {dd_sequence_type}. Choose from {list(DD_SEQUENCES.keys())}") + + dd_sequence = DD_SEQUENCES[dd_sequence_type] + + num_qubits = circuit.num_qubits + new_circuit = QuantumCircuit(circuit.qubits) + + last_gate_layer = [-1] * num_qubits + current_layer = 0 + + for instr_tuple in circuit.data: + instr = instr_tuple.operation + qargs = instr_tuple.qubits + cargs = instr_tuple.clbits + + involved_qubits = [circuit.find_bit(q).index for q in qargs] + + for q in range(num_qubits): + if q in involved_qubits: + idle_time = current_layer - last_gate_layer[q] + if last_gate_layer[q] != -1 and idle_time > 1: #aanpassen naar 2 + print(f"[DD] Inserting {dd_sequence_type} on qubit {q} at layer {current_layer} (idle for {idle_time} layers)") + for gate in dd_sequence: + new_circuit.append(gate, [q]) + new_circuit.barrier(q) + last_gate_layer[q] = current_layer + + new_circuit.append(instr, qargs, cargs) + current_layer += 1 + + # Optional final DD + for q in range(num_qubits): + idle_time = current_layer - last_gate_layer[q] + if last_gate_layer[q] != -1 and idle_time > 1: + print(f"[DD] Final DD on qubit {q} at end (idle for {idle_time} layers)") + for gate in dd_sequence: + new_circuit.append(gate, [q]) + new_circuit.barrier(q) + + return new_circuit + +def run_noiseless_circuit(observable, backend_options, circuit): + backend_opts = backend_options.copy() + # Create a backend without noise model + backend = AerSimulator(**backend_opts["backend_options"]) + estimator = EstimatorV2(options={"backend_options": backend.options}) + result = estimator.run([(circuit, observable)]).result() + return result[0].data.evs + +def run_noisy_circuit(observable, backend_options, circuit, noise_model): + backend_opts = backend_options.copy() + backend = AerSimulator(noise_model=noise_model, **backend_opts["backend_options"]) + estimator = EstimatorV2(options={"backend_options": backend.options}) + result = estimator.run([(circuit, observable)]).result() + return result[0].data.evs + +def analyze_noise_model(noise_model): + print("\nNOISE MODEL ANALYSIS") + print(f"Basis gates: {noise_model.basis_gates}") + print(f"Instructions with noise: {noise_model.noise_instructions}") + + # Describe the noise model based on how it was created + print("\nNoise model description (based on creation function):") + print("- Phase damping error on idle gates (probability 0.05)") + +# Define a custom DataBin class to fix the serialization issues +class CustomDataBin(DataBin): + def __setattr__(self, name, value): + # Override __setattr__ to avoid the NotImplementedError + self.__dict__[name] = value + + +def execute_sampler(sampler, label, subsystem_subexpts, shots): + print(sampler, label, subsystem_subexpts, shots) + try: + submit_start = time.time() + job = sampler.run(subsystem_subexpts, shots=shots) + submit_end = time.time() + result_start = time.time() + result = job.result() + result_end = time.time() + print(f"Job {label} completed with job id {job.job_id()}, submit_time: {submit_end-submit_start} and execution_time: {result_end - result_start}, type: {type(result)}") + + total_submit_time = submit_end - submit_start + total_exec_time = result_end - result_start + + # FIX: Reconstruct the PrimitiveResult object to fix serialization issues + new_results = [] + for pub_result in result._pub_results: + # Deep copy the metadata + new_metadata = copy.deepcopy(pub_result.metadata) + + # Access the DataBin object + data_bin = pub_result.data + + # Reconstruct DataBin + new_data_bin_dict = {} + + # Explicitly copy 'observable_measurements' + if hasattr(data_bin, "observable_measurements") and data_bin.observable_measurements is not None: + observable_measurements = data_bin.observable_measurements + new_observable_array = np.copy(observable_measurements.array) + new_observable_bitarray = BitArray( + new_observable_array, observable_measurements.num_bits + ) + new_data_bin_dict["observable_measurements"] = new_observable_bitarray + + # Explicitly copy 'qpd_measurements' + if hasattr(data_bin, "qpd_measurements") and data_bin.qpd_measurements is not None: + qpd_measurements = data_bin.qpd_measurements + new_qpd_array = np.copy(qpd_measurements.array) + new_qpd_bitarray = BitArray(new_qpd_array, qpd_measurements.num_bits) + new_data_bin_dict["qpd_measurements"] = new_qpd_bitarray + + # Copy other attributes of DataBin (e.g., 'shape') + if hasattr(data_bin, "shape"): + new_data_bin_dict["shape"] = copy.deepcopy(data_bin.shape) + + # Create a new DataBin instance using our custom class + new_data_bin = CustomDataBin(**new_data_bin_dict) + + # Create a new SamplerPubResult + new_pub_result = SamplerPubResult(data=new_data_bin, metadata=new_metadata) + new_results.append(new_pub_result) + + # Create a new PrimitiveResult + new_result = PrimitiveResult( + new_results, metadata=copy.deepcopy(result.metadata) + ) + + return (label, new_result, total_submit_time, total_exec_time) + except Exception as e: + print(f"Error in execute_sampler: {e}") + raise + +def pre_process_dd_first(circuit, observable, optimization_settings, device_constraints, dd_sequence_type="XY4", logger=None): + print("\n--- Applying DD to full circuit first before cutting ---") + print(f"Original circuit depth: {circuit.depth()}") + full_dd_circuit = apply_dd(circuit, dd_sequence_type, logger) + print(f"Circuit depth after DD: {full_dd_circuit.depth()}") + + # Now find cuts for the DD-applied circuit + cut_circuit, metadata = find_cuts(full_dd_circuit, optimization_settings, device_constraints) + print( + f'Found solution using {len(metadata["cuts"])} cuts with a sampling ' + f'overhead of {metadata["sampling_overhead"]}.\n' + f'Lowest cost solution found: {metadata["minimum_reached"]}.' + ) + for cut in metadata["cuts"]: + print(f"{cut[0]} at circuit instruction index {cut[1]}") + + qc_w_ancilla = cut_wires(cut_circuit) + + print("\n--- Cut circuit (with DD already applied) before observable expansion ---") + try: + circuit_drawer(qc_w_ancilla, output='mpl').show() + except: + pass # Ignore if running headless + print(qc_w_ancilla.draw()) + + # Need to expand observables from the original circuit + observables_expanded = expand_observables(observable.paulis, circuit, qc_w_ancilla) + + partitioned_problem = partition_problem( + circuit=qc_w_ancilla, observables=observables_expanded + ) + subcircuits = partitioned_problem.subcircuits + subobservables = partitioned_problem.subobservables + print( + f"Sampling overhead: {np.prod([basis.overhead for basis in partitioned_problem.bases])}" + ) + + print(f"Number of subcircuits: {len(subcircuits)}") + if isinstance(subcircuits, dict): + for i, subcirc in subcircuits.items(): + print(f"\n--- Subcircuit {i} (DD applied before cutting) ---") + print(f"Number of qubits: {subcirc.num_qubits}") + print(f"Circuit depth: {subcirc.depth()}") + print(subcirc.draw()) + else: + for i, subcirc in enumerate(subcircuits): + print(f"\n--- Subcircuit {i} (DD applied before cutting) ---") + print(f"Number of qubits: {subcirc.num_qubits}") + print(f"Circuit depth: {subcirc.depth()}") + print(subcirc.draw()) + + # Return the partitioned components + return subcircuits, subobservables, partitioned_problem, metadata + +def write_results_to_csv(results_dict, filename="circuit_cutting_dd_results.csv"): + fieldnames = ["method", "expectation value", "description", "num_qubits", "depth", "sampling_overhead", "num_cuts"] + with open(filename, mode='w', newline='') as file: + writer = csv.DictWriter(file, fieldnames=fieldnames) + writer.writeheader() + for row in results_dict: + writer.writerow(row) + print(f"Circuit cutting and DD results written to: {filename}") + + +def write_timing_to_csv(timing_data, filename="cutting_execution_timing.csv"): + fieldnames = ["method", "label", "submit_time", "exec_time"] + with open(filename, mode='w', newline='') as f: + writer = csv.DictWriter(f, fieldnames=fieldnames) + writer.writeheader() + for row in timing_data: + writer.writerow(row) + print(f"Execution timing data written to {filename}") + +if __name__ == "__main__": + pcs = None + num_nodes = [1] + for nodes in num_nodes: + start_time = time.time() + try: + # Start Pilot + pilot_compute_description_ray["number_of_nodes"] = nodes + pcs = start_pilot(pilot_compute_description_ray) + logger = pcs.get_logger() + + # Define backend options + backend_options = { + "backend_options": { + "shots": 32768, + "device": "CPU", + "method": "density_matrix", + "blocking_enable": True, + "batched_shots_gpu": True, + "blocking_qubits": 25 + } + } + + # Add realistic noise model relevant to DD + noise_model = get_dd_noise_model() + backend = AerSimulator(noise_model=noise_model, **backend_options["backend_options"]) + print("\nUsing the following noise model:\n") + print(noise_model) + analyze_noise_model(noise_model) + + # 1. Run pre-processing for circuit cutting (without applying DD yet) + print("\n*********************************** PREPROCESSING CIRCUIT ***********************************") + subcircuits, subobservables, partitioned_problem, observable, original_circuit, metadata_no_dd = \ + pre_processing(logger, num_qubits=7, qps=2, num_samples=10) + + # 2. Apply DD to the individual subcircuits (Type I) + print("\n*********************************** APPLYING DD TO SUBCIRCUITS ***********************************") + dd_subcircuits = apply_dd_to_subcircuits(subcircuits, dd_sequence_type="XY4", logger=logger) + + # 3. Apply DD to the full circuit first, then cut it (Type II) + print("\n*********************************** APPLYING DD TO FULL CIRCUIT THEN CUTTING ***********************************") + # Reuse the optimization settings and device constraints from pre_processing + optimization_settings = OptimizationParameters(seed=111) + device_constraints = DeviceConstraints(qubits_per_subcircuit=2) + dd_first_subcircuits, dd_first_subobservables, dd_first_partitioned_problem, metadata_dd_first = \ + pre_process_dd_first(original_circuit, observable, optimization_settings, device_constraints, "XY4", logger) + + # 4. Generate the cutting experiments (regular subcircuits - no DD) + print("\n*********************************** GENERATING CUTTING EXPERIMENTS WITHOUT DD ***********************************") + subexperiments_no_dd, coefficients_no_dd = generate_cutting_experiments( + circuits=subcircuits, + observables=subobservables, + num_samples=10 + ) + + # 5. Generate the cutting experiments (subcircuits with DD - DD after cutting) + print("\n*********************************** GENERATING CUTTING EXPERIMENTS WITH DD (APPLIED AFTER CUTTING) ***********************************") + subexperiments_with_dd, coefficients_with_dd = generate_cutting_experiments( + circuits=dd_subcircuits, + observables=subobservables, + num_samples=10 + ) + + # 6. Generate the cutting experiments (DD first, then cut - DD before cutting) + print("\n*********************************** GENERATING CUTTING EXPERIMENTS WITH DD (APPLIED BEFORE CUTTING) ***********************************") + subexperiments_dd_first, coefficients_dd_first = generate_cutting_experiments( + circuits=dd_first_subcircuits, + observables=dd_first_subobservables, + num_samples=10 + ) + + # Count total number of subexperiments for each approach + subexperiment_count_no_dd = 0 + for i in range(len(subexperiments_no_dd)): + subexperiment_count_no_dd += len(subexperiments_no_dd[i]) + print(f"Total subexperiments to run on backend (without DD): {subexperiment_count_no_dd}") + + subexperiment_count_with_dd = 0 + for i in range(len(subexperiments_with_dd)): + subexperiment_count_with_dd += len(subexperiments_with_dd[i]) + print(f"Total subexperiments to run on backend (with DD after cut): {subexperiment_count_with_dd}") + + subexperiment_count_dd_first = 0 + for i in range(len(subexperiments_dd_first)): + subexperiment_count_dd_first += len(subexperiments_dd_first[i]) + print(f"Total subexperiments to run on backend (with DD before cut): {subexperiment_count_dd_first}") + + # Generate pass manager + print("\n*********************************** TRANSPILING CIRCUITS ***********************************") + pass_manager = generate_preset_pass_manager(optimization_level=1, backend=backend) + + # Transpile original circuit + full_circuit_transpiled = pass_manager.run(original_circuit) + + # 7. Run the full circuit with noise (no cutting, no DD) for baseline comparison + print("\n*********************************** RUNNING FULL CIRCUIT WITH NOISE (NO DD) ***********************************") + full_circuit_task = pcs.submit_task( + run_noisy_circuit, + observable, + backend_options, + full_circuit_transpiled, + noise_model, + resources={'num_cpus': 1, 'num_gpus': 2, 'memory': None} + ) + + # NEW: Run the full circuit without noise (ideal reference) + print("\n*********************************** RUNNING FULL CIRCUIT WITHOUT NOISE (NO DD) ***********************************") + full_circuit_ideal_task = pcs.submit_task( + run_noiseless_circuit, + observable, + backend_options, + full_circuit_transpiled, + resources={'num_cpus': 1, 'num_gpus': 2, 'memory': None} + ) + + # 8. Process and run cut circuits without DD + print("\n*********************************** PROCESSING CUT CIRCUITS WITHOUT DD ***********************************") + print("Transpiling cut subcircuits...") + isa_subexperiments_no_dd = { + label: pass_manager.run(partition_subexpts) + for label, partition_subexpts in subexperiments_no_dd.items() + } + + # 9. Process and run cut circuits with DD (applied after cutting) + print("\n*********************************** PROCESSING CUT CIRCUITS WITH DD (APPLIED AFTER CUTTING) ***********************************") + print("Transpiling cut subcircuits with DD...") + isa_subexperiments_with_dd = { + label: pass_manager.run(partition_subexpts) + for label, partition_subexpts in subexperiments_with_dd.items() + } + + # 10. Process and run cut circuits with DD applied before cutting + print("\n*********************************** PROCESSING CUT CIRCUITS WITH DD (APPLIED BEFORE CUTTING) ***********************************") + print("Transpiling cut subcircuits (DD first)...") + isa_subexperiments_dd_first = { + label: pass_manager.run(partition_subexpts) + for label, partition_subexpts in subexperiments_dd_first.items() + } + + # Execute subcircuits for all approaches WITH NOISE + # First without DD + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITHOUT DD ***********************************") + tasks_no_dd = [] + with Batch(backend=backend) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_no_dd.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_no_dd.append(task_future) + + # Then with DD applied after cutting + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITH DD (APPLIED AFTER CUTTING) ***********************************") + tasks_with_dd = [] + with Batch(backend=backend) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_with_dd.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_with_dd.append(task_future) + + # Then with DD applied before cutting + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITH DD (APPLIED BEFORE CUTTING) ***********************************") + tasks_dd_first = [] + with Batch(backend=backend) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_dd_first.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_dd_first.append(task_future) + + # NEW: Execute subcircuits WITHOUT NOISE (ideal case) + # First without DD + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITHOUT NOISE (NO DD) ***********************************") + tasks_no_dd_ideal = [] + with Batch(backend=AerSimulator(**backend_options["backend_options"])) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_no_dd.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_no_dd_ideal.append(task_future) + + # Then with DD applied after cutting (without noise) + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITHOUT NOISE (WITH DD AFTER CUTTING) ***********************************") + tasks_with_dd_ideal = [] + with Batch(backend=AerSimulator(**backend_options["backend_options"])) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_with_dd.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_with_dd_ideal.append(task_future) + + # Then with DD applied before cutting (without noise) + print("\n*********************************** EXECUTING CUT SUBCIRCUITS WITHOUT NOISE (WITH DD BEFORE CUTTING) ***********************************") + tasks_dd_first_ideal = [] + with Batch(backend=AerSimulator(**backend_options["backend_options"])) as batch: + sampler = SamplerV2(mode=batch) + for label, subsystem_subexpts in isa_subexperiments_dd_first.items(): + for ss in subsystem_subexpts: + task_future = pcs.submit_task( + execute_sampler, + sampler, + label, + [ss], + shots=2**14, + resources={'num_cpus': 1, 'num_gpus': 1, 'memory': None} + ) + tasks_dd_first_ideal.append(task_future) + + # Wait for results of noisy circuits + print("\n*********************************** WAITING FOR RESULTS ***********************************") + results_no_dd = pcs.get_results(tasks_no_dd) + results_with_dd = pcs.get_results(tasks_with_dd) + results_dd_first = pcs.get_results(tasks_dd_first) + noisy_expval = pcs.get_results([full_circuit_task])[0] + + # Wait for results of ideal circuits + results_no_dd_ideal = pcs.get_results(tasks_no_dd_ideal) + results_with_dd_ideal = pcs.get_results(tasks_with_dd_ideal) + results_dd_first_ideal = pcs.get_results(tasks_dd_first_ideal) + ideal_expval = pcs.get_results([full_circuit_ideal_task])[0] + + timing_data = [] # List to store timing info + + # Process results for noisy cases + samplePubResults_no_dd = collections.defaultdict(list) + for result in results_no_dd: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_no_dd[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_no_dd", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + samplePubResults_with_dd = collections.defaultdict(list) + for result in results_with_dd: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_with_dd[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_with_dd_after", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + samplePubResults_dd_first = collections.defaultdict(list) + for result in results_dd_first: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_dd_first[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_with_dd_before", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + # Process results for noiseless cases + samplePubResults_no_dd_ideal = collections.defaultdict(list) + for result in results_no_dd_ideal: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_no_dd_ideal[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_no_dd_ideal", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + samplePubResults_with_dd_ideal = collections.defaultdict(list) + for result in results_with_dd_ideal: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_with_dd_ideal[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_with_dd_after_ideal", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + samplePubResults_dd_first_ideal = collections.defaultdict(list) + for result in results_dd_first_ideal: + if result is not None: + label, primitive_result, submit_t, exec_t = result + samplePubResults_dd_first_ideal[label].extend(primitive_result._pub_results) + timing_data.append({ + "method": "cut_with_dd_before_ideal", + "label": label, + "submit_time": submit_t, + "exec_time": exec_t + }) + + # Convert to results dictionary format for noisy cases + results_dict_no_dd = {} + for label, samples in samplePubResults_no_dd.items(): + results_dict_no_dd[label] = PrimitiveResult(samples) + + results_dict_with_dd = {} + for label, samples in samplePubResults_with_dd.items(): + results_dict_with_dd[label] = PrimitiveResult(samples) + + results_dict_dd_first = {} + for label, samples in samplePubResults_dd_first.items(): + results_dict_dd_first[label] = PrimitiveResult(samples) + + # Convert to results dictionary format for noiseless cases + results_dict_no_dd_ideal = {} + for label, samples in samplePubResults_no_dd_ideal.items(): + results_dict_no_dd_ideal[label] = PrimitiveResult(samples) + + results_dict_with_dd_ideal = {} + for label, samples in samplePubResults_with_dd_ideal.items(): + results_dict_with_dd_ideal[label] = PrimitiveResult(samples) + + results_dict_dd_first_ideal = {} + for label, samples in samplePubResults_dd_first_ideal.items(): + results_dict_dd_first_ideal[label] = PrimitiveResult(samples) + + # Reconstruct expectation values for noisy cases + print("\n*********************************** RECONSTRUCTING EXPECTATION VALUES ***********************************") + print("Reconstructing without DD...") + reconstructed_expvals_no_dd = reconstruct_expectation_values( + results_dict_no_dd, + coefficients_no_dd, + subobservables, + ) + + print("Reconstructing with DD (applied after cutting)...") + reconstructed_expvals_with_dd = reconstruct_expectation_values( + results_dict_with_dd, + coefficients_with_dd, + subobservables, + ) + + print("Reconstructing with DD (applied before cutting)...") + reconstructed_expvals_dd_first = reconstruct_expectation_values( + results_dict_dd_first, + coefficients_dd_first, + dd_first_subobservables, + ) + + # Reconstruct expectation values for noiseless cases + print("\n*********************************** RECONSTRUCTING NOISELESS EXPECTATION VALUES ***********************************") + print("Reconstructing without DD (noiseless)...") + reconstructed_expvals_no_dd_ideal = reconstruct_expectation_values( + results_dict_no_dd_ideal, + coefficients_no_dd, + subobservables, + ) + + print("Reconstructing with DD after cutting (noiseless)...") + reconstructed_expvals_with_dd_ideal = reconstruct_expectation_values( + results_dict_with_dd_ideal, + coefficients_with_dd, + subobservables, + ) + + print("Reconstructing with DD before cutting (noiseless)...") + reconstructed_expvals_dd_first_ideal = reconstruct_expectation_values( + results_dict_dd_first_ideal, + coefficients_dd_first, + dd_first_subobservables, + ) + + # Calculate final expectation values for noisy cases + final_expval_no_dd = np.dot(reconstructed_expvals_no_dd, observable.coeffs) + final_expval_with_dd = np.dot(reconstructed_expvals_with_dd, observable.coeffs) + final_expval_dd_first = np.dot(reconstructed_expvals_dd_first, observable.coeffs) + + # Calculate final expectation values for noiseless cases + final_expval_no_dd_ideal = np.dot(reconstructed_expvals_no_dd_ideal, observable.coeffs) + final_expval_with_dd_ideal = np.dot(reconstructed_expvals_with_dd_ideal, observable.coeffs) + final_expval_dd_first_ideal = np.dot(reconstructed_expvals_dd_first_ideal, observable.coeffs) + + # Print results + print("\n*********************************** RESULTS SUMMARY ***********************************") + print(f"Ideal expectation value (full circuit, no noise): {np.round(ideal_expval, 8)}") + #print(f"Noisy expectation value (full circuit, no DD): {np.round(noisy_expval, 8)}") + #print(f"Ideal reconstructed value (cut circuit, no noise): {np.real(np.round(final_expval_no_dd_ideal, 8))}") + print(f"Reconstructed expectation value (cut circuit without DD): {np.real(np.round(final_expval_no_dd, 8))}") + #print(f"Ideal reconstructed value (cut circuit, DD after cutting, no noise): {np.real(np.round(final_expval_with_dd_ideal, 8))}") + print(f"Reconstructed expectation value (cut circuit with DD after cutting): {np.real(np.round(final_expval_with_dd, 8))}") + #print(f"Ideal reconstructed value (cut circuit, DD before cutting, no noise): {np.real(np.round(final_expval_dd_first_ideal, 8))}") + print(f"Reconstructed expectation value (cut circuit with DD before cutting): {np.real(np.round(final_expval_dd_first, 8))}") + + # Create complete results data for CSV + results_data = [ + { + "method": "ideal_full_no_dd", + "expectation value": float(np.real(ideal_expval)), + "description": "Full circuit without noise (ideal reference)", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": 1.0, # No sampling overhead for full circuit + "num_cuts": 0 + }, + { + "method": "noisy_full_no_dd", + "expectation value": float(np.real(noisy_expval)), + "description": "Full circuit with noise only (no DD)", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": 1.0, # No sampling overhead for full circuit + "num_cuts": 0 + }, + { + "method": "ideal_cut_no_dd", + "expectation value": float(np.real(final_expval_no_dd_ideal)), + "description": "Cut circuit without noise (no DD)", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in partitioned_problem.bases]), + "num_cuts": len(metadata_no_dd["cuts"]) + }, + { + "method": "noisy_cut_no_dd", + "expectation value": float(np.real(final_expval_no_dd)), + "description": "Cut circuit with noise (no DD)", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in partitioned_problem.bases]), + "num_cuts": len(metadata_no_dd["cuts"]) + }, + { + "method": "ideal_cut_with_dd_after", + "expectation value": float(np.real(final_expval_with_dd_ideal)), + "description": "Cut circuit without noise and DD applied after cutting", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in partitioned_problem.bases]), + "num_cuts": len(metadata_no_dd["cuts"]) + }, + { + "method": "noisy_cut_with_dd_after", + "expectation value": float(np.real(final_expval_with_dd)), + "description": "Cut circuit with noise and DD applied after cutting", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in partitioned_problem.bases]), + "num_cuts": len(metadata_no_dd["cuts"]) + }, + { + "method": "ideal_cut_with_dd_before", + "expectation value": float(np.real(final_expval_dd_first_ideal)), + "description": "Cut circuit without noise and DD applied before cutting", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in dd_first_partitioned_problem.bases]), + "num_cuts": len(metadata_dd_first["cuts"]) + }, + { + "method": "noisy_cut_with_dd_before", + "expectation value": float(np.real(final_expval_dd_first)), + "description": "Cut circuit with noise and DD applied before cutting", + "num_qubits": original_circuit.num_qubits, + "depth": original_circuit.depth(), + "sampling_overhead": np.prod([b.overhead for b in dd_first_partitioned_problem.bases]), + "num_cuts": len(metadata_dd_first["cuts"]) + } + ] + + # Write timing and results to CSV + write_results_to_csv(results_data, "circuit_cutting_dd_results_with_ideal.csv") + write_timing_to_csv(timing_data, "cutting_execution_timing_with_ideal.csv") + + # Expanded error analysis using the ideal full circuit as reference + print("\n*********************************** EXPANDED ERROR ANALYSIS ***********************************") + # Use the ideal full circuit as the true reference + true_reference = ideal_expval + + # Calculate errors against true reference + error_ideal_cut_no_dd = abs(final_expval_no_dd_ideal - true_reference) + error_ideal_cut_dd_after = abs(final_expval_with_dd_ideal - true_reference) + error_ideal_cut_dd_before = abs(final_expval_dd_first_ideal - true_reference) + + error_full_no_dd = abs(noisy_expval - true_reference) + error_cut_no_dd = abs(final_expval_no_dd - true_reference) + error_cut_dd_after = abs(final_expval_with_dd - true_reference) + error_cut_dd_before = abs(final_expval_dd_first - true_reference) + + print("Errors compared to ideal full circuit:") + #print(f"Error (ideal cut circuit, no DD): {error_ideal_cut_no_dd}") + #print(f"Error (ideal cut circuit, DD after cutting): {error_ideal_cut_dd_after}") + #print(f"Error (ideal cut circuit, DD before cutting): {error_ideal_cut_dd_before}") + #print(f"Error (noisy full circuit): {error_full_no_dd}") + print(f"Error (noisy cut circuit, no DD): {error_cut_no_dd}") + print(f"Error (noisy cut circuit, DD after cutting): {error_cut_dd_after}") + print(f"Error (noisy cut circuit, DD before cutting): {error_cut_dd_before}") + + # Calculate cutting errors (noise-free) + cutting_error = error_ideal_cut_no_dd + print(f"\nCutting error (without noise): {cutting_error}") + + # Calculate noise impact on full circuit + noise_impact_full = error_full_no_dd + print(f"Noise impact on full circuit: {noise_impact_full}") + + # Calculate combined noise and cutting error + combined_error_no_dd = error_cut_no_dd + print(f"Combined noise and cutting error (no DD): {combined_error_no_dd}") + + # Calculate DD effectiveness in noise mitigation for cut circuits + dd_effectiveness_after = (error_cut_no_dd - error_cut_dd_after) / error_cut_no_dd * 100 if error_cut_no_dd != 0 else 0 + dd_effectiveness_before = (error_cut_no_dd - error_cut_dd_before) / error_cut_no_dd * 100 if error_cut_no_dd != 0 else 0 + print(f"\nDD effectiveness (after cutting): {dd_effectiveness_after:.2f}%") + print(f"DD effectiveness (before cutting): {dd_effectiveness_before:.2f}%") + + # Calculate circuit depths and sizes for comparison + print("\n*********************************** CIRCUIT COMPLEXITY COMPARISON ***********************************") + print(f"Full circuit (no DD) depth: {original_circuit.depth()}, size: {len(original_circuit)}") + + avg_depth_no_dd = sum(subcircuits[i].depth() for i in subcircuits) / len(subcircuits) + avg_size_no_dd = sum(len(subcircuits[i]) for i in subcircuits) / len(subcircuits) + print(f"Subcircuits without DD - average depth: {avg_depth_no_dd}, average size: {avg_size_no_dd}") + + avg_depth_dd_after = sum(dd_subcircuits[i].depth() for i in dd_subcircuits) / len(dd_subcircuits) + avg_size_dd_after = sum(len(dd_subcircuits[i]) for i in dd_subcircuits) / len(dd_subcircuits) + print(f"Subcircuits with DD after cutting - average depth: {avg_depth_dd_after}, average size: {avg_size_dd_after}") + + avg_depth_dd_before = sum(dd_first_subcircuits[i].depth() for i in dd_first_subcircuits) / len(dd_first_subcircuits) + avg_size_dd_before = sum(len(dd_first_subcircuits[i]) for i in dd_first_subcircuits) / len(dd_first_subcircuits) + print(f"Subcircuits with DD before cutting - average depth: {avg_depth_dd_before}, average size: {avg_size_dd_before}") + + print(f"Total runtime: {time.time() - start_time} seconds") + + except Exception as e: + print(f"Error: {e}") + import traceback + traceback.print_exc() + finally: + if pcs: + pcs.cancel() \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/notebook/cc_dd.ipynb b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/notebook/cc_dd.ipynb new file mode 100644 index 0000000..2d500d5 --- /dev/null +++ b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/notebook/cc_dd.ipynb @@ -0,0 +1,4120 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methoddd_sequenceexpectation valuereconstructed expectation valuenum_qubitsqpscutssampling_overheaddepthavg_subcircuit_depthmethod, label, submit_time, exec_secs
0ideal_full_no_ddXY40.738421NaN7.01.00.01.000000e+0014.0NaNNaN
1noisy_full_no_ddXY40.765437NaN7.01.00.01.000000e+0014.0NaNNaN
2ideal_cut_no_ddXY4NaN8046.7293427.01.012.02.824295e+11NaN6.0cut_no_dd_ideal,0,0.002459287643432617,0.02956...
3noisy_cut_no_ddXY4NaN8319.0293477.01.012.02.824295e+11NaN6.0cut_no_dd,0,0.002662181854248047,0.02016830444...
4noisy_cut_with_dd_afterXY4NaN-487.4982787.01.012.02.824295e+11NaN6.0cut_with_dd_after,0,0.005754947662353516,0.146...
\n", + "
" + ], + "text/plain": [ + " method dd_sequence expectation value \\\n", + "0 ideal_full_no_dd XY4 0.738421 \n", + "1 noisy_full_no_dd XY4 0.765437 \n", + "2 ideal_cut_no_dd XY4 NaN \n", + "3 noisy_cut_no_dd XY4 NaN \n", + "4 noisy_cut_with_dd_after XY4 NaN \n", + "\n", + " reconstructed expectation value num_qubits qps cuts sampling_overhead \\\n", + "0 NaN 7.0 1.0 0.0 1.000000e+00 \n", + "1 NaN 7.0 1.0 0.0 1.000000e+00 \n", + "2 8046.729342 7.0 1.0 12.0 2.824295e+11 \n", + "3 8319.029347 7.0 1.0 12.0 2.824295e+11 \n", + "4 -487.498278 7.0 1.0 12.0 2.824295e+11 \n", + "\n", + " depth avg_subcircuit_depth \\\n", + "0 14.0 NaN \n", + "1 14.0 NaN \n", + "2 NaN 6.0 \n", + "3 NaN 6.0 \n", + "4 NaN 6.0 \n", + "\n", + " method, label, submit_time, exec_secs \n", + "0 NaN \n", + "1 NaN \n", + "2 cut_no_dd_ideal,0,0.002459287643432617,0.02956... \n", + "3 cut_no_dd,0,0.002662181854248047,0.02016830444... \n", + "4 cut_with_dd_after,0,0.005754947662353516,0.146... " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Quantum Circuit Reconstruction Analysis\n", + "# This notebook visualizes reconstructed expectation values from circuit cutting experiments\n", + "# with and without Dynamical Decoupling (DD).\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the CSV data\n", + "csv_path = \"CC+DD - experiment.csv\" # Make sure this CSV is in the same directory\n", + "df = pd.read_csv(csv_path)\n", + "\n", + "# Preview the data\n", + "df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methoddd_sequenceexpectation valuereconstructed expectation valuenum_qubitsqpscutssampling_overheaddepthavg_subcircuit_depthmethod, label, submit_time, exec_secs
2ideal_cut_no_ddXY4NaN8046.7293427.01.012.02.824295e+11NaN6.000000cut_no_dd_ideal,0,0.002459287643432617,0.02956...
3noisy_cut_no_ddXY4NaN8319.0293477.01.012.02.824295e+11NaN6.000000cut_no_dd,0,0.002662181854248047,0.02016830444...
4noisy_cut_with_dd_afterXY4NaN-487.4982787.01.012.02.824295e+11NaN6.000000cut_with_dd_after,0,0.005754947662353516,0.146...
5noisy_cut_with_dd_beforeXY4NaN2901.9013797.01.012.02.824295e+11NaN17.428571cut_with_dd_before,0,0.002330303192138672,0.21...
9ideal_cut_no_ddXY4NaN5154.0277537.01.012.02.824295e+11NaN6.000000cut_no_dd_ideal,0,0.004676342010498047,0.15889...
....................................
117noisy_cut_with_dd_beforeXY4NaN-3.1864557.06.02.08.100000e+01NaN29.500000cut_with_dd_before,0,0.0026557445526123047,12....
121ideal_cut_no_ddXY4NaN-2.3818577.06.02.08.100000e+01NaN9.500000cut_no_dd_ideal,0,0.0061798095703125,0.0272495...
122noisy_cut_no_ddXY4NaN-2.3275887.06.02.08.100000e+01NaN9.500000cut_no_dd,0,0.002805948257446289,0.02569317817...
123noisy_cut_with_dd_afterXY4NaN-0.7306117.06.02.08.100000e+01NaN23.500000cut_with_dd_after,0,0.002537965774536133,12.02...
124noisy_cut_with_dd_beforeXY4NaN4.7067787.06.02.08.100000e+01NaN29.500000cut_with_dd_before,0,0.0024521350860595703,0.0...
\n", + "

72 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " method dd_sequence expectation value \\\n", + "2 ideal_cut_no_dd XY4 NaN \n", + "3 noisy_cut_no_dd XY4 NaN \n", + "4 noisy_cut_with_dd_after XY4 NaN \n", + "5 noisy_cut_with_dd_before XY4 NaN \n", + "9 ideal_cut_no_dd XY4 NaN \n", + ".. ... ... ... \n", + "117 noisy_cut_with_dd_before XY4 NaN \n", + "121 ideal_cut_no_dd XY4 NaN \n", + "122 noisy_cut_no_dd XY4 NaN \n", + "123 noisy_cut_with_dd_after XY4 NaN \n", + "124 noisy_cut_with_dd_before XY4 NaN \n", + "\n", + " reconstructed expectation value num_qubits qps cuts \\\n", + "2 8046.729342 7.0 1.0 12.0 \n", + "3 8319.029347 7.0 1.0 12.0 \n", + "4 -487.498278 7.0 1.0 12.0 \n", + "5 2901.901379 7.0 1.0 12.0 \n", + "9 5154.027753 7.0 1.0 12.0 \n", + ".. ... ... ... ... \n", + "117 -3.186455 7.0 6.0 2.0 \n", + "121 -2.381857 7.0 6.0 2.0 \n", + "122 -2.327588 7.0 6.0 2.0 \n", + "123 -0.730611 7.0 6.0 2.0 \n", + "124 4.706778 7.0 6.0 2.0 \n", + "\n", + " sampling_overhead depth avg_subcircuit_depth \\\n", + "2 2.824295e+11 NaN 6.000000 \n", + "3 2.824295e+11 NaN 6.000000 \n", + "4 2.824295e+11 NaN 6.000000 \n", + "5 2.824295e+11 NaN 17.428571 \n", + "9 2.824295e+11 NaN 6.000000 \n", + ".. ... ... ... \n", + "117 8.100000e+01 NaN 29.500000 \n", + "121 8.100000e+01 NaN 9.500000 \n", + "122 8.100000e+01 NaN 9.500000 \n", + "123 8.100000e+01 NaN 23.500000 \n", + "124 8.100000e+01 NaN 29.500000 \n", + "\n", + " method, label, submit_time, exec_secs \n", + "2 cut_no_dd_ideal,0,0.002459287643432617,0.02956... \n", + "3 cut_no_dd,0,0.002662181854248047,0.02016830444... \n", + "4 cut_with_dd_after,0,0.005754947662353516,0.146... \n", + "5 cut_with_dd_before,0,0.002330303192138672,0.21... \n", + "9 cut_no_dd_ideal,0,0.004676342010498047,0.15889... \n", + ".. ... \n", + "117 cut_with_dd_before,0,0.0026557445526123047,12.... \n", + "121 cut_no_dd_ideal,0,0.0061798095703125,0.0272495... \n", + "122 cut_no_dd,0,0.002805948257446289,0.02569317817... \n", + "123 cut_with_dd_after,0,0.002537965774536133,12.02... \n", + "124 cut_with_dd_before,0,0.0024521350860595703,0.0... \n", + "\n", + "[72 rows x 11 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filter out rows with missing reconstructed expectation values\n", + "filtered_df = df.dropna(subset=[\"reconstructed expectation value\", \"method\"])\n", + "filtered_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Set up the figure\n", + "plt.figure(figsize=(12, 6))\n", + "\n", + "# Create the bar plot\n", + "bars = plt.bar(\n", + " filtered_df[\"method\"],\n", + " filtered_df[\"reconstructed expectation value\"]\n", + ")\n", + "\n", + "# Use a symmetrical log scale to show both large positive and negative values\n", + "plt.yscale(\"symlog\")\n", + "\n", + "# Add titles and labels\n", + "plt.title(\"Reconstructed Expectation Value by Method (Log Scale)\")\n", + "plt.xlabel(\"Method\")\n", + "plt.ylabel(\"Reconstructed Expectation Value (log scale)\")\n", + "plt.xticks(rotation=45, ha=\"right\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.7)\n", + "\n", + "# Annotate each bar with the exact value\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(\n", + " bar.get_x() + bar.get_width() / 2,\n", + " height,\n", + " f'{height:.1f}',\n", + " ha='center',\n", + " va='bottom' if height > 0 else 'top',\n", + " fontsize=9\n", + " )\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Drop rows with missing reconstructed values or method\n", + "filtered_df = df.dropna(subset=[\"reconstructed expectation value\", \"method\"])\n", + "\n", + "# Exclude rows where qps == 1 (these often have unrealistically high values)\n", + "filtered_df = filtered_df[filtered_df[\"qps\"] != 1]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MethodDD SequenceReconstructed ⟨H⟩#Qubits#CutsAvg Subcircuit DepthSampling Overhead
23ideal_cut_no_ddXY421.187.06.07.55.31e+05
24noisy_cut_no_ddXY422.877.06.07.55.31e+05
25noisy_cut_with_dd_afterXY472.037.06.016.55.31e+05
26noisy_cut_with_dd_beforeXY4-18.647.06.021.55.31e+05
30ideal_cut_no_ddNaN4.407.06.07.55.31e+05
31noisy_cut_no_ddNaN5.937.06.07.55.31e+05
32noisy_cut_with_dd_afterNaN43.447.06.016.55.31e+05
33noisy_cut_with_dd_beforeNaN-75.537.06.021.55.31e+05
37ideal_cut_no_ddXY4-22.197.06.07.55.31e+05
38noisy_cut_no_ddXY4-22.587.06.07.55.31e+05
39noisy_cut_with_dd_afterXY4-7.217.06.016.55.31e+05
40noisy_cut_with_dd_beforeXY4-21.147.06.021.55.31e+05
44ideal_cut_no_ddXY4-23.967.04.08.76.56e+03
45noisy_cut_no_ddXY4-23.067.04.08.76.56e+03
46noisy_cut_with_dd_afterXY4-14.407.04.019.36.56e+03
47noisy_cut_with_dd_beforeXY46.927.04.024.76.56e+03
51ideal_cut_no_ddXY4-29.267.04.08.76.56e+03
52noisy_cut_no_ddXY4-29.497.04.08.76.56e+03
53noisy_cut_with_dd_afterXY410.057.04.019.36.56e+03
54noisy_cut_with_dd_beforeXY4-0.547.04.024.76.56e+03
58ideal_cut_no_ddXY4-1.037.04.08.76.56e+03
59noisy_cut_no_ddXY4-0.787.04.08.76.56e+03
60noisy_cut_with_dd_afterXY4-0.497.04.019.36.56e+03
61noisy_cut_with_dd_beforeXY42.527.04.024.76.56e+03
65ideal_cut_no_ddXY4-0.457.02.010.58.10e+01
66noisy_cut_no_ddXY4-0.297.02.010.58.10e+01
67noisy_cut_with_dd_afterXY40.547.02.028.58.10e+01
68noisy_cut_with_dd_beforeXY41.507.02.030.58.10e+01
72ideal_cut_no_ddXY4-1.227.02.010.58.10e+01
73noisy_cut_no_ddXY4-1.207.02.010.58.10e+01
74noisy_cut_with_dd_afterXY41.237.02.028.58.10e+01
75noisy_cut_with_dd_beforeXY41.287.02.030.58.10e+01
79ideal_cut_no_ddXY40.747.02.010.58.10e+01
80noisy_cut_no_ddXY40.707.02.010.58.10e+01
81noisy_cut_with_dd_afterXY43.557.02.028.58.10e+01
82noisy_cut_with_dd_beforeXY42.297.02.030.58.10e+01
86ideal_cut_no_ddXY41.847.02.010.08.10e+01
87noisy_cut_no_ddXY41.797.02.010.08.10e+01
88noisy_cut_with_dd_afterXY40.667.02.028.08.10e+01
89noisy_cut_with_dd_beforeXY4-0.017.02.030.08.10e+01
93ideal_cut_no_ddXY41.307.02.010.08.10e+01
94noisy_cut_no_ddXY41.407.02.010.08.10e+01
95noisy_cut_with_dd_afterXY40.107.02.028.08.10e+01
96noisy_cut_with_dd_beforeXY41.237.02.030.08.10e+01
100ideal_cut_no_ddXY41.197.02.010.08.10e+01
101noisy_cut_no_ddXY41.237.02.010.08.10e+01
102noisy_cut_with_dd_afterXY40.947.02.028.08.10e+01
103noisy_cut_with_dd_beforeXY40.687.02.030.08.10e+01
107ideal_cut_no_ddXY41.077.02.09.58.10e+01
108noisy_cut_no_ddXY41.087.02.09.58.10e+01
109noisy_cut_with_dd_afterXY41.927.02.023.58.10e+01
110noisy_cut_with_dd_beforeXY41.167.02.029.58.10e+01
114ideal_cut_no_ddXY4-3.317.02.09.58.10e+01
115noisy_cut_no_ddXY4-3.417.02.09.58.10e+01
116noisy_cut_with_dd_afterXY4-0.867.02.023.58.10e+01
117noisy_cut_with_dd_beforeXY4-3.197.02.029.58.10e+01
121ideal_cut_no_ddXY4-2.387.02.09.58.10e+01
122noisy_cut_no_ddXY4-2.337.02.09.58.10e+01
123noisy_cut_with_dd_afterXY4-0.737.02.023.58.10e+01
124noisy_cut_with_dd_beforeXY44.717.02.029.58.10e+01
\n", + "
" + ], + "text/plain": [ + " Method DD Sequence Reconstructed ⟨H⟩ #Qubits #Cuts \\\n", + "23 ideal_cut_no_dd XY4 21.18 7.0 6.0 \n", + "24 noisy_cut_no_dd XY4 22.87 7.0 6.0 \n", + "25 noisy_cut_with_dd_after XY4 72.03 7.0 6.0 \n", + "26 noisy_cut_with_dd_before XY4 -18.64 7.0 6.0 \n", + "30 ideal_cut_no_dd NaN 4.40 7.0 6.0 \n", + "31 noisy_cut_no_dd NaN 5.93 7.0 6.0 \n", + "32 noisy_cut_with_dd_after NaN 43.44 7.0 6.0 \n", + "33 noisy_cut_with_dd_before NaN -75.53 7.0 6.0 \n", + "37 ideal_cut_no_dd XY4 -22.19 7.0 6.0 \n", + "38 noisy_cut_no_dd XY4 -22.58 7.0 6.0 \n", + "39 noisy_cut_with_dd_after XY4 -7.21 7.0 6.0 \n", + "40 noisy_cut_with_dd_before XY4 -21.14 7.0 6.0 \n", + "44 ideal_cut_no_dd XY4 -23.96 7.0 4.0 \n", + "45 noisy_cut_no_dd XY4 -23.06 7.0 4.0 \n", + "46 noisy_cut_with_dd_after XY4 -14.40 7.0 4.0 \n", + "47 noisy_cut_with_dd_before XY4 6.92 7.0 4.0 \n", + "51 ideal_cut_no_dd XY4 -29.26 7.0 4.0 \n", + "52 noisy_cut_no_dd XY4 -29.49 7.0 4.0 \n", + "53 noisy_cut_with_dd_after XY4 10.05 7.0 4.0 \n", + "54 noisy_cut_with_dd_before XY4 -0.54 7.0 4.0 \n", + "58 ideal_cut_no_dd XY4 -1.03 7.0 4.0 \n", + "59 noisy_cut_no_dd XY4 -0.78 7.0 4.0 \n", + "60 noisy_cut_with_dd_after XY4 -0.49 7.0 4.0 \n", + "61 noisy_cut_with_dd_before XY4 2.52 7.0 4.0 \n", + "65 ideal_cut_no_dd XY4 -0.45 7.0 2.0 \n", + "66 noisy_cut_no_dd XY4 -0.29 7.0 2.0 \n", + "67 noisy_cut_with_dd_after XY4 0.54 7.0 2.0 \n", + "68 noisy_cut_with_dd_before XY4 1.50 7.0 2.0 \n", + "72 ideal_cut_no_dd XY4 -1.22 7.0 2.0 \n", + "73 noisy_cut_no_dd XY4 -1.20 7.0 2.0 \n", + "74 noisy_cut_with_dd_after XY4 1.23 7.0 2.0 \n", + "75 noisy_cut_with_dd_before XY4 1.28 7.0 2.0 \n", + "79 ideal_cut_no_dd XY4 0.74 7.0 2.0 \n", + "80 noisy_cut_no_dd XY4 0.70 7.0 2.0 \n", + "81 noisy_cut_with_dd_after XY4 3.55 7.0 2.0 \n", + "82 noisy_cut_with_dd_before XY4 2.29 7.0 2.0 \n", + "86 ideal_cut_no_dd XY4 1.84 7.0 2.0 \n", + "87 noisy_cut_no_dd XY4 1.79 7.0 2.0 \n", + "88 noisy_cut_with_dd_after XY4 0.66 7.0 2.0 \n", + "89 noisy_cut_with_dd_before XY4 -0.01 7.0 2.0 \n", + "93 ideal_cut_no_dd XY4 1.30 7.0 2.0 \n", + "94 noisy_cut_no_dd XY4 1.40 7.0 2.0 \n", + "95 noisy_cut_with_dd_after XY4 0.10 7.0 2.0 \n", + "96 noisy_cut_with_dd_before XY4 1.23 7.0 2.0 \n", + "100 ideal_cut_no_dd XY4 1.19 7.0 2.0 \n", + "101 noisy_cut_no_dd XY4 1.23 7.0 2.0 \n", + "102 noisy_cut_with_dd_after XY4 0.94 7.0 2.0 \n", + "103 noisy_cut_with_dd_before XY4 0.68 7.0 2.0 \n", + "107 ideal_cut_no_dd XY4 1.07 7.0 2.0 \n", + "108 noisy_cut_no_dd XY4 1.08 7.0 2.0 \n", + "109 noisy_cut_with_dd_after XY4 1.92 7.0 2.0 \n", + "110 noisy_cut_with_dd_before XY4 1.16 7.0 2.0 \n", + "114 ideal_cut_no_dd XY4 -3.31 7.0 2.0 \n", + "115 noisy_cut_no_dd XY4 -3.41 7.0 2.0 \n", + "116 noisy_cut_with_dd_after XY4 -0.86 7.0 2.0 \n", + "117 noisy_cut_with_dd_before XY4 -3.19 7.0 2.0 \n", + "121 ideal_cut_no_dd XY4 -2.38 7.0 2.0 \n", + "122 noisy_cut_no_dd XY4 -2.33 7.0 2.0 \n", + "123 noisy_cut_with_dd_after XY4 -0.73 7.0 2.0 \n", + "124 noisy_cut_with_dd_before XY4 4.71 7.0 2.0 \n", + "\n", + " Avg Subcircuit Depth Sampling Overhead \n", + "23 7.5 5.31e+05 \n", + "24 7.5 5.31e+05 \n", + "25 16.5 5.31e+05 \n", + "26 21.5 5.31e+05 \n", + "30 7.5 5.31e+05 \n", + "31 7.5 5.31e+05 \n", + "32 16.5 5.31e+05 \n", + "33 21.5 5.31e+05 \n", + "37 7.5 5.31e+05 \n", + "38 7.5 5.31e+05 \n", + "39 16.5 5.31e+05 \n", + "40 21.5 5.31e+05 \n", + "44 8.7 6.56e+03 \n", + "45 8.7 6.56e+03 \n", + "46 19.3 6.56e+03 \n", + "47 24.7 6.56e+03 \n", + "51 8.7 6.56e+03 \n", + "52 8.7 6.56e+03 \n", + "53 19.3 6.56e+03 \n", + "54 24.7 6.56e+03 \n", + "58 8.7 6.56e+03 \n", + "59 8.7 6.56e+03 \n", + "60 19.3 6.56e+03 \n", + "61 24.7 6.56e+03 \n", + "65 10.5 8.10e+01 \n", + "66 10.5 8.10e+01 \n", + "67 28.5 8.10e+01 \n", + "68 30.5 8.10e+01 \n", + "72 10.5 8.10e+01 \n", + "73 10.5 8.10e+01 \n", + "74 28.5 8.10e+01 \n", + "75 30.5 8.10e+01 \n", + "79 10.5 8.10e+01 \n", + "80 10.5 8.10e+01 \n", + "81 28.5 8.10e+01 \n", + "82 30.5 8.10e+01 \n", + "86 10.0 8.10e+01 \n", + "87 10.0 8.10e+01 \n", + "88 28.0 8.10e+01 \n", + "89 30.0 8.10e+01 \n", + "93 10.0 8.10e+01 \n", + "94 10.0 8.10e+01 \n", + "95 28.0 8.10e+01 \n", + "96 30.0 8.10e+01 \n", + "100 10.0 8.10e+01 \n", + "101 10.0 8.10e+01 \n", + "102 28.0 8.10e+01 \n", + "103 30.0 8.10e+01 \n", + "107 9.5 8.10e+01 \n", + "108 9.5 8.10e+01 \n", + "109 23.5 8.10e+01 \n", + "110 29.5 8.10e+01 \n", + "114 9.5 8.10e+01 \n", + "115 9.5 8.10e+01 \n", + "116 23.5 8.10e+01 \n", + "117 29.5 8.10e+01 \n", + "121 9.5 8.10e+01 \n", + "122 9.5 8.10e+01 \n", + "123 23.5 8.10e+01 \n", + "124 29.5 8.10e+01 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Select relevant columns\n", + "summary_df = filtered_df[[\n", + " \"method\", \"dd_sequence\", \"reconstructed expectation value\",\n", + " \"num_qubits\", \"cuts\", \"avg_subcircuit_depth\", \"sampling_overhead\"\n", + "]].copy()\n", + "\n", + "# Rename columns for display\n", + "summary_df.columns = [\n", + " \"Method\", \"DD Sequence\", \"Reconstructed ⟨H⟩\",\n", + " \"#Qubits\", \"#Cuts\", \"Avg Subcircuit Depth\", \"Sampling Overhead\"\n", + "]\n", + "\n", + "# Round and format for clarity\n", + "summary_df[\"Reconstructed ⟨H⟩\"] = summary_df[\"Reconstructed ⟨H⟩\"].round(2)\n", + "summary_df[\"Sampling Overhead\"] = summary_df[\"Sampling Overhead\"].apply(lambda x: f\"{x:.2e}\")\n", + "summary_df[\"Avg Subcircuit Depth\"] = summary_df[\"Avg Subcircuit Depth\"].round(1)\n", + "\n", + "# Show the summary\n", + "summary_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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t7srTBGRTqEES0RERLpUyafPk/CN8/cYVrl5MV8+/l+ULZtLr4zRe81Tseo9YkYeg4VH7DVORORgpgRLREREukzl5sVEpo0gLDphj+Exw6bS78o/kHT8bHZ/+MQe41x9LRVr5xM3/pTuDFVEpFPoGSwRERHpMnV5WVRvX0Vezjrqdm2lrjCbPmf/lPDEvgAEomKxiF57zFO/O49gTQX5L95JsLqMhvJiyla8RfyEb4ViFURE9osSLBEREekyicdeROKxFwFQMPd+4iacStXWZVSs+QDMsEA4KaddB0D5qncJi0shesjR9LvyDwBUb19JxZr5Sq5EpMdQgiUiIiLdIvWMHwEQ1X9sqwlT3FEn7zUsauB4ogaO7/LYREQ6i57BEhERERER6SRKsERERERERDqJEiwREREREZFOogRLRERERESkkyjBEhERERER6SRKsEREusmyZcs47rjjmDFjBjNnziQrK4snnniCzMxMZsyYwcUXX0xNTc1e83366acce+yxzJgxg9/85jchiFxEREQ6SgmWiEg36devH2+++SYfffQRN998M7fffjvTp09nwYIFfPTRRwwcOJCnnnpqr/muv/56nnvuOT766CPmz5/Pxo0bQxC9iIiIdIQSLAmJ1u7kb968mcmTJxMXF8fHH3/c6nwXXnghxx57LJmZmTz22GPdG7TIAUpLSyM+Ph6AyMhIwsPDGTp0KGFhYXsMa6mkpISBAwcCMGXKFObPn99tMYuIiMj+0YuGJSQa7+THx8czb948br/9dh5++GHeeecdbrzxxjbnu+uuuxgxYgTV1dWMGzeOiy++mKioqG6MXOTAVVRUcNttt/H3v/+9adi6deuYN28eCxYs2Gv61NRUVqxYwZFHHsm7777LmWee2Z3hioiIyH5QgiUhkZaW1vS58a59TEwMMTEx7c43YsQIACIiIggEAphZl8Yp0tnq6uq46KKL+NnPfsaYMWMAyM7OZs6cObzwwgut3jB45JFHuOmmm3DOMXToUNLT07s7bBEREekgJVgSUq3dye+Iu+++m0suuYRevXp1UWQinS8YDHL55ZdzzjnncM455wBQUFDAeeedx0MPPcSwYcNanW/s2LG8+eab1NbW8p3vfIfTTz+9O8MWERGR/aAES0KmtTv5HfHEE0+wevVqnn322S6MTqTzvfTSS8ydO5e8vDyeeuopjjrqKJxz5OTkNDWNnT17NldffTWPPfYYGRkZnHLKKfz+97/n9ddfB+DHP/4xffr0CeVqiIiISDvMORfqGLrMlClT3JIlS0IdhrQiGAxyySWXcMopp3DNNdfsMW7OnDlcc801TJ8+fa/5Xn31VR566CFee+01IiMjuytcEZH9NviWuaEOQQ5hW+89I9QhiBz2zGypc25Ky+GqwZKQaO1O/l133cW5557L2rVrWbNmDbNmzeLOO+/c407+ZZddxujRozn11FMBePrpp8nIyAjx2si+6EJTupIuNEVE5GCiBEtC4vzzz+f888/fa/i7776717A5c+Y0fS4vL+/KsEREREREDogSrG6mO/nSlXQnX0RERCS09KJhERERERGRTqIES0REREREpJMowRIREREREekkSrBEREREREQ6iRIsERERERGRTqIES0REREREpJOom3YRERHpMnnP/4LavM3ETzmLpGMvxjlH8bsPU5ufRaBXLCln3EhYdPwe85R9PpfSJa+Cc2R8/5EQRS4i8vWoBktERES6TMrpN9D7xKuavldv+ZxgXQ1pl91HzOjplC78517zxIw6lvSr/687wxQR6TRKsERERKTLhCek7vG9evsqYoZPBSB6eCY1O1bvNU9YbG8sTI1sRKRnUoIlIiIi3SZYXUYgKg6AQK9YGqrLQxyRiEjnUoIlIiIi3SYQFU+wugIAV1NBICo2xBGJiHSuHpVgmdlQM3vUzF4MdSwiIiKy/6IGjKMqawkAVVlLiBpwVIgjEhHpXCFPsMzsb2aWb2arWww/zcw2mNkmM7sFwDmX5Zy7OjSRioiIyP4qfOMBShe+RMWq98h/6VdEDZ0EgXByn/4JFWvmk5B5LgDlq96lassyACrWf0zec7fRUF5E3nO3UZ29LpSrICKyXw6GJ0gfA/4EPNE4wMzCgAeBU4BsYLGZveacWxuSCEVERORrSTn9+r2Hnfqfew2LO+rkps+xo6cTO3p6l8Yl0p2WLl3Kz372M+rq6pg6dSr33Xdf07i8vDyuvPJKampqGDhwIH/5y1/o1atXCKOVAxXyBMs595GZDW4xeBqwyTmXBWBmzwFnA/tMsMzsWuBagIyMDD777DMAJk2axIYNG6ioqCA2NpbRo0ezdOlSGqeLiopi8+bNAIwdO5bc3FwKCwsJDw9nypQpLF68mIaGBlJTU+nbty9r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fdexnucEW5uofPZu0md/E19iaqTDlR7UnVkES4FZZpZIKCFrBr4EbO3l2OQkt38WQeccLtCO+WIwf2znv640XbWcLD75eILMy79PsL2F3U/ewYBTzyE245TOsno8gYhI33Us5znB9lYqn/kpKZ/5Z+KGjI1SxNJTDptgmVkyobtXucBzwJLw8neBNcDCSAQo/UAwwO4//QgAF2gncdy5xKTmAGi6ajnpHMsPrh5PICJyEujGeU79+y/QtmcLtcsWUbtsEQkjppJy5peiGbV8Cke6g/U4UAO8B3wN+B4QC1zunFsdgdiknzCfn5x59xzyNU1XLSetbvzgpl/0jc7iFU/eQcal31FyJSLSx3TnPCel8ApSCq+IZFjSi46UYI10zk0CMLOHgL3AKc65+ohEJiJyEuvOD25XhysrIiIiJ5YjTXLRvv8P51wAKFNyJSIiIiIicnhHuoM1xczqwn8bkBBeNsA55/R4aRERERERkS4Om2A55/SEMxERERERkWPQnedgiYiIiIiISDcowRIREREREekhSrBERERERER6iBIsERERERGRHnKkWQRFREREetTuP/0IFwg9CaZt10ZyrvsFsZkjOl9vLi1i39tPYv4YLCaOjM9/B1+CJi4Wkb5DCZaIiIhETPaX7gIg0FDD7j/deUByBRCTMYycefdg/hjq33+B+hXPkXrutVGIVETk+CjBEhERkYhrXPcGA04996D1/uSsjxd8fvD01BgR6Vv61BgsMxtpZg+b2aJoxyIiIiLHr3HdGySOn3nY1wONNdQXLWbg1EsiF5SISA+IaoJlZo+Y2R4z+/AT62ebWbGZlZjZHfvXO+dKnXM3Rj5SEREROV51RYupePIOqv52PwDte7dj/jhiUnMOWT7Y2kTls3eTPvub+BJTIxmqiMinFu0ugo8CC4DH9q8wMx/wG+BzQDmwwsyed86ti0qEIiIi8qkkT59D8vQ5ncsNH71O4oSZhywbbG+l8pmfkvKZfyZuyNgIRSgi0nOimmA5594ysxGfWH06UOKcKwUws6eAy4BuJVhmdhNwE0Bubi5Lly4FYNq0aRQXF9PY2EhiYiLjxo2jqKiI/eXi4+PZvHkzABMmTKCiooKqqir8fj8FBQWsWLGCQCBARkYGWVlZrFsXCic/P5+mpiZ27twJQEFBAevWraOpqYmBAweSn5/PqlWrABg2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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Bar plot of reconstructed values (filtered set)\n", + "plt.figure(figsize=(12, 6))\n", + "bars = plt.bar(\n", + " summary_df[\"Method\"],\n", + " summary_df[\"Reconstructed ⟨H⟩\"]\n", + ")\n", + "\n", + "plt.yscale(\"symlog\") # Show large negative/positive values clearly\n", + "plt.title(\"Filtered Reconstructed Expectation Values (Log Scale)\")\n", + "plt.xlabel(\"Method\")\n", + "plt.ylabel(\"Reconstructed ⟨H⟩ (log scale)\")\n", + "plt.xticks(rotation=45, ha=\"right\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.7)\n", + "\n", + "# Annotate bars with values\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(\n", + " bar.get_x() + bar.get_width() / 2,\n", + " height,\n", + " f'{height:.1f}',\n", + " ha='center',\n", + " va='bottom' if height > 0 else 'top',\n", + " fontsize=9\n", + " )\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
MethodDD SequenceReconstructed ⟨H⟩#Qubits#CutsAvg Subcircuit DepthSampling OverheadAbs Error from Ideal
23ideal_cut_no_ddXY421.187.06.07.55.31e+050.00
24noisy_cut_no_ddXY422.877.06.07.55.31e+051.69
53noisy_cut_with_dd_afterXY410.057.04.019.36.56e+0311.13
47noisy_cut_with_dd_beforeXY46.927.04.024.76.56e+0314.26
31noisy_cut_no_ddNaN5.937.06.07.55.31e+0515.25
124noisy_cut_with_dd_beforeXY44.717.02.029.58.10e+0116.47
30ideal_cut_no_ddNaN4.407.06.07.55.31e+0516.78
81noisy_cut_with_dd_afterXY43.557.02.028.58.10e+0117.63
61noisy_cut_with_dd_beforeXY42.527.04.024.76.56e+0318.66
82noisy_cut_with_dd_beforeXY42.297.02.030.58.10e+0118.89
109noisy_cut_with_dd_afterXY41.927.02.023.58.10e+0119.26
86ideal_cut_no_ddXY41.847.02.010.08.10e+0119.34
87noisy_cut_no_ddXY41.797.02.010.08.10e+0119.39
68noisy_cut_with_dd_beforeXY41.507.02.030.58.10e+0119.68
94noisy_cut_no_ddXY41.407.02.010.08.10e+0119.78
93ideal_cut_no_ddXY41.307.02.010.08.10e+0119.88
75noisy_cut_with_dd_beforeXY41.287.02.030.58.10e+0119.90
74noisy_cut_with_dd_afterXY41.237.02.028.58.10e+0119.95
96noisy_cut_with_dd_beforeXY41.237.02.030.08.10e+0119.95
101noisy_cut_no_ddXY41.237.02.010.08.10e+0119.95
100ideal_cut_no_ddXY41.197.02.010.08.10e+0119.99
110noisy_cut_with_dd_beforeXY41.167.02.029.58.10e+0120.02
108noisy_cut_no_ddXY41.087.02.09.58.10e+0120.10
107ideal_cut_no_ddXY41.077.02.09.58.10e+0120.11
102noisy_cut_with_dd_afterXY40.947.02.028.08.10e+0120.24
79ideal_cut_no_ddXY40.747.02.010.58.10e+0120.44
80noisy_cut_no_ddXY40.707.02.010.58.10e+0120.48
103noisy_cut_with_dd_beforeXY40.687.02.030.08.10e+0120.50
88noisy_cut_with_dd_afterXY40.667.02.028.08.10e+0120.52
67noisy_cut_with_dd_afterXY40.547.02.028.58.10e+0120.64
95noisy_cut_with_dd_afterXY40.107.02.028.08.10e+0121.08
89noisy_cut_with_dd_beforeXY4-0.017.02.030.08.10e+0121.19
66noisy_cut_no_ddXY4-0.297.02.010.58.10e+0121.47
65ideal_cut_no_ddXY4-0.457.02.010.58.10e+0121.63
60noisy_cut_with_dd_afterXY4-0.497.04.019.36.56e+0321.67
54noisy_cut_with_dd_beforeXY4-0.547.04.024.76.56e+0321.72
123noisy_cut_with_dd_afterXY4-0.737.02.023.58.10e+0121.91
59noisy_cut_no_ddXY4-0.787.04.08.76.56e+0321.96
116noisy_cut_with_dd_afterXY4-0.867.02.023.58.10e+0122.04
58ideal_cut_no_ddXY4-1.037.04.08.76.56e+0322.21
32noisy_cut_with_dd_afterNaN43.447.06.016.55.31e+0522.26
73noisy_cut_no_ddXY4-1.207.02.010.58.10e+0122.38
72ideal_cut_no_ddXY4-1.227.02.010.58.10e+0122.40
122noisy_cut_no_ddXY4-2.337.02.09.58.10e+0123.51
121ideal_cut_no_ddXY4-2.387.02.09.58.10e+0123.56
117noisy_cut_with_dd_beforeXY4-3.197.02.029.58.10e+0124.37
114ideal_cut_no_ddXY4-3.317.02.09.58.10e+0124.49
115noisy_cut_no_ddXY4-3.417.02.09.58.10e+0124.59
39noisy_cut_with_dd_afterXY4-7.217.06.016.55.31e+0528.39
46noisy_cut_with_dd_afterXY4-14.407.04.019.36.56e+0335.58
26noisy_cut_with_dd_beforeXY4-18.647.06.021.55.31e+0539.82
40noisy_cut_with_dd_beforeXY4-21.147.06.021.55.31e+0542.32
37ideal_cut_no_ddXY4-22.197.06.07.55.31e+0543.37
38noisy_cut_no_ddXY4-22.587.06.07.55.31e+0543.76
45noisy_cut_no_ddXY4-23.067.04.08.76.56e+0344.24
44ideal_cut_no_ddXY4-23.967.04.08.76.56e+0345.14
51ideal_cut_no_ddXY4-29.267.04.08.76.56e+0350.44
52noisy_cut_no_ddXY4-29.497.04.08.76.56e+0350.67
25noisy_cut_with_dd_afterXY472.037.06.016.55.31e+0550.85
33noisy_cut_with_dd_beforeNaN-75.537.06.021.55.31e+0596.71
\n", + "
" + ], + "text/plain": [ + " Method DD Sequence Reconstructed ⟨H⟩ #Qubits #Cuts \\\n", + "23 ideal_cut_no_dd XY4 21.18 7.0 6.0 \n", + "24 noisy_cut_no_dd XY4 22.87 7.0 6.0 \n", + "53 noisy_cut_with_dd_after XY4 10.05 7.0 4.0 \n", + "47 noisy_cut_with_dd_before XY4 6.92 7.0 4.0 \n", + "31 noisy_cut_no_dd NaN 5.93 7.0 6.0 \n", + "124 noisy_cut_with_dd_before XY4 4.71 7.0 2.0 \n", + "30 ideal_cut_no_dd NaN 4.40 7.0 6.0 \n", + "81 noisy_cut_with_dd_after XY4 3.55 7.0 2.0 \n", + "61 noisy_cut_with_dd_before XY4 2.52 7.0 4.0 \n", + "82 noisy_cut_with_dd_before XY4 2.29 7.0 2.0 \n", + "109 noisy_cut_with_dd_after XY4 1.92 7.0 2.0 \n", + "86 ideal_cut_no_dd XY4 1.84 7.0 2.0 \n", + "87 noisy_cut_no_dd XY4 1.79 7.0 2.0 \n", + "68 noisy_cut_with_dd_before XY4 1.50 7.0 2.0 \n", + "94 noisy_cut_no_dd XY4 1.40 7.0 2.0 \n", + "93 ideal_cut_no_dd XY4 1.30 7.0 2.0 \n", + "75 noisy_cut_with_dd_before XY4 1.28 7.0 2.0 \n", + "74 noisy_cut_with_dd_after XY4 1.23 7.0 2.0 \n", + "96 noisy_cut_with_dd_before XY4 1.23 7.0 2.0 \n", + "101 noisy_cut_no_dd XY4 1.23 7.0 2.0 \n", + "100 ideal_cut_no_dd XY4 1.19 7.0 2.0 \n", + "110 noisy_cut_with_dd_before XY4 1.16 7.0 2.0 \n", + "108 noisy_cut_no_dd XY4 1.08 7.0 2.0 \n", + "107 ideal_cut_no_dd XY4 1.07 7.0 2.0 \n", + "102 noisy_cut_with_dd_after XY4 0.94 7.0 2.0 \n", + "79 ideal_cut_no_dd XY4 0.74 7.0 2.0 \n", + "80 noisy_cut_no_dd XY4 0.70 7.0 2.0 \n", + "103 noisy_cut_with_dd_before XY4 0.68 7.0 2.0 \n", + "88 noisy_cut_with_dd_after XY4 0.66 7.0 2.0 \n", + "67 noisy_cut_with_dd_after XY4 0.54 7.0 2.0 \n", + "95 noisy_cut_with_dd_after XY4 0.10 7.0 2.0 \n", + "89 noisy_cut_with_dd_before XY4 -0.01 7.0 2.0 \n", + "66 noisy_cut_no_dd XY4 -0.29 7.0 2.0 \n", + "65 ideal_cut_no_dd XY4 -0.45 7.0 2.0 \n", + "60 noisy_cut_with_dd_after XY4 -0.49 7.0 4.0 \n", + "54 noisy_cut_with_dd_before XY4 -0.54 7.0 4.0 \n", + "123 noisy_cut_with_dd_after XY4 -0.73 7.0 2.0 \n", + "59 noisy_cut_no_dd XY4 -0.78 7.0 4.0 \n", + "116 noisy_cut_with_dd_after XY4 -0.86 7.0 2.0 \n", + "58 ideal_cut_no_dd XY4 -1.03 7.0 4.0 \n", + "32 noisy_cut_with_dd_after NaN 43.44 7.0 6.0 \n", + "73 noisy_cut_no_dd XY4 -1.20 7.0 2.0 \n", + "72 ideal_cut_no_dd XY4 -1.22 7.0 2.0 \n", + "122 noisy_cut_no_dd XY4 -2.33 7.0 2.0 \n", + "121 ideal_cut_no_dd XY4 -2.38 7.0 2.0 \n", + "117 noisy_cut_with_dd_before XY4 -3.19 7.0 2.0 \n", + "114 ideal_cut_no_dd XY4 -3.31 7.0 2.0 \n", + "115 noisy_cut_no_dd XY4 -3.41 7.0 2.0 \n", + "39 noisy_cut_with_dd_after XY4 -7.21 7.0 6.0 \n", + "46 noisy_cut_with_dd_after XY4 -14.40 7.0 4.0 \n", + "26 noisy_cut_with_dd_before XY4 -18.64 7.0 6.0 \n", + "40 noisy_cut_with_dd_before XY4 -21.14 7.0 6.0 \n", + "37 ideal_cut_no_dd XY4 -22.19 7.0 6.0 \n", + "38 noisy_cut_no_dd XY4 -22.58 7.0 6.0 \n", + "45 noisy_cut_no_dd XY4 -23.06 7.0 4.0 \n", + "44 ideal_cut_no_dd XY4 -23.96 7.0 4.0 \n", + "51 ideal_cut_no_dd XY4 -29.26 7.0 4.0 \n", + "52 noisy_cut_no_dd XY4 -29.49 7.0 4.0 \n", + "25 noisy_cut_with_dd_after XY4 72.03 7.0 6.0 \n", + "33 noisy_cut_with_dd_before NaN -75.53 7.0 6.0 \n", + "\n", + " Avg Subcircuit Depth Sampling Overhead Abs Error from Ideal \n", + "23 7.5 5.31e+05 0.00 \n", + "24 7.5 5.31e+05 1.69 \n", + "53 19.3 6.56e+03 11.13 \n", + "47 24.7 6.56e+03 14.26 \n", + "31 7.5 5.31e+05 15.25 \n", + "124 29.5 8.10e+01 16.47 \n", + "30 7.5 5.31e+05 16.78 \n", + "81 28.5 8.10e+01 17.63 \n", + "61 24.7 6.56e+03 18.66 \n", + "82 30.5 8.10e+01 18.89 \n", + "109 23.5 8.10e+01 19.26 \n", + "86 10.0 8.10e+01 19.34 \n", + "87 10.0 8.10e+01 19.39 \n", + "68 30.5 8.10e+01 19.68 \n", + "94 10.0 8.10e+01 19.78 \n", + "93 10.0 8.10e+01 19.88 \n", + "75 30.5 8.10e+01 19.90 \n", + "74 28.5 8.10e+01 19.95 \n", + "96 30.0 8.10e+01 19.95 \n", + "101 10.0 8.10e+01 19.95 \n", + "100 10.0 8.10e+01 19.99 \n", + "110 29.5 8.10e+01 20.02 \n", + "108 9.5 8.10e+01 20.10 \n", + "107 9.5 8.10e+01 20.11 \n", + "102 28.0 8.10e+01 20.24 \n", + "79 10.5 8.10e+01 20.44 \n", + "80 10.5 8.10e+01 20.48 \n", + "103 30.0 8.10e+01 20.50 \n", + "88 28.0 8.10e+01 20.52 \n", + "67 28.5 8.10e+01 20.64 \n", + "95 28.0 8.10e+01 21.08 \n", + "89 30.0 8.10e+01 21.19 \n", + "66 10.5 8.10e+01 21.47 \n", + "65 10.5 8.10e+01 21.63 \n", + "60 19.3 6.56e+03 21.67 \n", + "54 24.7 6.56e+03 21.72 \n", + "123 23.5 8.10e+01 21.91 \n", + "59 8.7 6.56e+03 21.96 \n", + "116 23.5 8.10e+01 22.04 \n", + "58 8.7 6.56e+03 22.21 \n", + "32 16.5 5.31e+05 22.26 \n", + "73 10.5 8.10e+01 22.38 \n", + "72 10.5 8.10e+01 22.40 \n", + "122 9.5 8.10e+01 23.51 \n", + "121 9.5 8.10e+01 23.56 \n", + "117 29.5 8.10e+01 24.37 \n", + "114 9.5 8.10e+01 24.49 \n", + "115 9.5 8.10e+01 24.59 \n", + "39 16.5 5.31e+05 28.39 \n", + "46 19.3 6.56e+03 35.58 \n", + "26 21.5 5.31e+05 39.82 \n", + "40 21.5 5.31e+05 42.32 \n", + "37 7.5 5.31e+05 43.37 \n", + "38 7.5 5.31e+05 43.76 \n", + "45 8.7 6.56e+03 44.24 \n", + "44 8.7 6.56e+03 45.14 \n", + "51 8.7 6.56e+03 50.44 \n", + "52 8.7 6.56e+03 50.67 \n", + "25 16.5 5.31e+05 50.85 \n", + "33 21.5 5.31e+05 96.71 " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pull out ideal and noisy no-DD for reference\n", + "ideal_value = summary_df[summary_df[\"Method\"] == \"ideal_cut_no_dd\"][\"Reconstructed ⟨H⟩\"].values[0]\n", + "baseline_noisy_value = summary_df[summary_df[\"Method\"] == \"noisy_cut_no_dd\"][\"Reconstructed ⟨H⟩\"].values[0]\n", + "\n", + "# Add absolute error column relative to ideal\n", + "summary_df[\"Abs Error from Ideal\"] = (summary_df[\"Reconstructed ⟨H⟩\"] - ideal_value).abs()\n", + "\n", + "# Sort by increasing error (best methods at the top)\n", + "summary_df.sort_values(\"Abs Error from Ideal\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodexec_secs
0cut_no_dd_ideal0.029561
1cut_no_dd_ideal0.018340
2cut_no_dd_ideal0.170028
3cut_no_dd_ideal0.137045
4cut_no_dd_ideal0.019445
\n", + "
" + ], + "text/plain": [ + " method exec_secs\n", + "0 cut_no_dd_ideal 0.029561\n", + "1 cut_no_dd_ideal 0.018340\n", + "2 cut_no_dd_ideal 0.170028\n", + "3 cut_no_dd_ideal 0.137045\n", + "4 cut_no_dd_ideal 0.019445" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load CSV\n", + "df = pd.read_csv(\"CC+DD - experiment.csv\")\n", + "\n", + "# Extract log entries from metadata column\n", + "all_logs = []\n", + "\n", + "for cell in df[\"method, label, submit_time, exec_secs\"].dropna():\n", + " lines = str(cell).split(\"\\n\")\n", + " for line in lines:\n", + " parts = line.split(\",\")\n", + " if len(parts) == 4:\n", + " method, label, submit_time, exec_secs = parts\n", + " all_logs.append({\n", + " \"method\": method.strip(),\n", + " \"exec_secs\": float(exec_secs.strip())\n", + " })\n", + "\n", + "# Create DataFrame from parsed logs\n", + "log_df = pd.DataFrame(all_logs)\n", + "\n", + "# Preview\n", + "log_df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodNMeanStdDevMinMax
0cut_no_dd5750.43801.80240.006514.2269
1cut_no_dd_ideal5760.30931.08710.01647.6865
2cut_with_dd_after5720.51871.97410.003713.4496
3cut_with_dd_before5780.49451.89610.016913.7866
\n", + "
" + ], + "text/plain": [ + " method N Mean StdDev Min Max\n", + "0 cut_no_dd 575 0.4380 1.8024 0.0065 14.2269\n", + "1 cut_no_dd_ideal 576 0.3093 1.0871 0.0164 7.6865\n", + "2 cut_with_dd_after 572 0.5187 1.9741 0.0037 13.4496\n", + "3 cut_with_dd_before 578 0.4945 1.8961 0.0169 13.7866" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Compute execution time stats by method\n", + "exec_summary = log_df.groupby(\"method\")[\"exec_secs\"].agg(\n", + " N=\"count\", \n", + " Mean=\"mean\", \n", + " StdDev=\"std\", \n", + " Min=\"min\", \n", + " Max=\"max\"\n", + ").reset_index()\n", + "\n", + "# Round for readability\n", + "exec_summary[[\"Mean\", \"StdDev\", \"Min\", \"Max\"]] = exec_summary[[\"Mean\", \"StdDev\", \"Min\", \"Max\"]].round(4)\n", + "\n", + "# Display the summary table\n", + "exec_summary\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAGoCAYAAABbtxOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXxeZZ3//9cnlBhKqLGGtrSxRUfcxa0DrmPdBRccV1xwHRlHXEZlFFeC4/odl8FBRZ1xQX/quIyKggouxRW1OCgidUSgoQ1tCSWWkCY1yef3xzkJx5CtS3LSO6/n45FH73Ofc9/nc/U+yf2+r/s614nMRJIkSVKhqe4CJEmSpPnEgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmS5omI+HZEvGCO93l2RLx1Lvd5oImIjIg776fnuiYiHr0/nkvS7DEgS5oVZRDYHRHt4+6/tAwcR85xPesiYiQi+sb9PGgu66jU0xkRn6vel5nHZeZn9vN+vl1p61/K12R0+ezMfFlm/uv+3GcdIuKF5XH1gXH3P6W8/9MzfJ71EfEPs1KkpAOGAVnSbLoaePboQkTcGzikvnLozszWcT8/r7GeWVeG7tbMbAX+P+D/Vdr+srrr2xsRsWiSVX8CnjVu/fOB/5v9qiQ1EgOypNn0WYqAMuoFwDnVDSLiNhHxvojoioht5Vf+h5TrbhcR34qI6yPixvJ2R+Wx6yPiXyPipxFxU0RcML7HeiYiYmlEbI6IJ5XLrRFxZUQ8v1y+W0RcGBE7IuIPEfHMymMPiYj3R8SmiPhzRPykvG9dRGwet59rIuLREfF44E0UYa4vIn5Tac8/lLebIuIt5fNuj4hzIuK25bojy17RF5T/bz0R8eY9bXf5XJ+OiHeUt9eV/w+vL/d5XdkDe3xE/F/Z/jdVHtsUEadFxJ8i4oaI+FJELJ1kP6PP/aay3msi4rmV9VMdB6OPfUNEbAU+NUlztgKXAY8rH7cUeDBw7rhaHhgRP4uI3oj4TUSsK+9/J/Aw4KzydTmr8rBHR8Qfy+PwwxERlf+DCV+ncv1J5bob9vY1kjT3DMiSZtPFwJKIuHtEHAQ8C/jcuG3eC9wFuC9wZ2AV8LZyXRNFGFoDrAZ2AWeNe/xzgBcBy4Bm4NQ9LTIzdwAvBj4REcuADwKXZuY5EXEocCHw+XIfzwY+EhH3LB/+PuABFEFsKfB6YGSa/X0HeBfw32VP7n0m2OyF5c8jgDsBrdy67Q8F7go8CnhbRNx9D5o9mRVAC7e8Dp8AnkfRxoeV+7lTue2rgKcADwdWAjcCH57mudvL534B8PGIuGu5bqrjYPSxSymOhZOn2Mc53PKh7ETgG8Dg6MqIWAWcB7yjfL5Tga9GxOGZ+Wbgx8ArytflFZXnfSLwt8B9gGdShnCmeJ0i4h7AR4GTKP5/bg90IGneMyBLmm2jvciPATYCW0ZXlL1wLwVek5k7MvMmiuB4IkBm3pCZX83M/nLdOynCWNWnMvP/MnMX8CWKgDWZlWWvYfXn0HJfFwBfBr4PPAH4x/IxTwSuycxPZeZQZv4a+Crw9IhoogjWr87MLZk5nJk/y8zBW+96jz0X+EBmXpWZfcAbgRPjr4cPnJGZuzLzN8BvKMLbvvoL8M7M/AvwRYpAe2Zm3pSZlwOXA0eX2/4j8ObM3Fy2uZPi/2WyIRAAb83Mwcy8iCKoPnO646A0ApxePnbXFM//NWBd2Yv7fMZ9Y0ER9s/PzPMzcyQzLwQ2AMdP/d/CezKzNzO7gB9yy3E21ev0dOBbmfmj8v/nrUzz4UnS/DDVHzFJ2h8+C/wIuCO3DiuHA4uBS8pvrAECOAggIhZT9OY+Hrhduf6wiDgoM4fL5a2V5+un6MGbTHdmTtWD93HgFcC7MvOG8r41wLER0VvZblHZrnaK3tY/TfGce2slsKmyvKnc7/LKfXvS9pm6ofJ/OxpEt1XW76rsZw3wtYiohr7hssYt3NqNmXlzZXkTRTunPA5K12fmwHTFZ+auiDgPeAvQnpk/jYjjKpusAZ4R5XCa0sEUoXcqk/1fT/U6rQSurdR2c0TcgKR5z4AsaVZl5qaIuJqih+4l41b3UASue2bmRIHqdRRDCI7NzK0RcV/gfynC035VDgH5GEWI/6eI+FRmXkkRcC7KzMdM8JgmYAD4G4oe3KqbKUJf9fkPr6zPaUrqpghzo1YDQxRhdb58TX8t8OLM/OkMt79dRBxaCcmrgd8x/XEA0/9/VZ0D/AA4Y5KaP5uZL90P+4GpX6frgLFhL+UHvtvv4fNLqoFDLCTNhZcAjxzXe0hmjlCMcf1gOfaXiFgVEaPjOw+jCE695QlXp89ijaMnn72YYlzxOWWo/RZwl/Jkq4PLn7+NiLuX9X8S+EBErIyIgyLiQRFxG4qZE1oi4gkRcTBFj+ZtKvvbBhxZhuyJfAF4TUTcMSJauWXM8tB+b/neOxt4Z0SsAYiIwyPihGkec0ZENEfEwyiGr3x5BsfBnrqIYkjPf0yw7nPAkyLiceXr1VKeBDj6oWMbxVjimZrqdfoK8MSIeGhENANvx/dd6YDgL6qkWZeZf8rMDZOsfgNwJXBxROwEvkfRawzw7xTTwvVQnPD3nX0sZWXceh7kp0XEA4DXAs8vhxe8l6In8bRyPOxjKcbDdlN81f5ebgm7p1LMnPArYEe5rikz/wy8HPhPiuEGNwPVWS2+XP57Q0T8eoJaP8ktw1OupuipfuU+tn9/O5NihogLIuImitfo2Cm230pxIl83xZRzL8vMjeW6qY6DPZKF75cnX45fdy1wAsUHouspepT/hVveD8+kGEd9Y0R8aAa7m/R1Ksdsn0Jxgud1FG3fPPHTSJpPInNPv02SJGnPlFOpfW6aMeCSNC/YgyxJkiRVGJAlSZKkCodYSJIkSRX2IEuSJEkVDTkPcnt7ex555JF1lyFJkqR57JJLLunJzMPH39+QAfnII49kw4bJZpSSJEmSICI2TXS/QywkSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmSJEmqMCBLkiRJFQZkSZIkqcKALEmSJFXUFpAj4g4R8cOIuCIiLo+IV0+wzbqI+HNEXFr+vK2OWiVJkrRw1HklvSHgdZn564g4DLgkIi7MzN+P2+7HmfnEGuqTJEnSAlRbD3JmXpeZvy5v3wRcAayqqx5JkiQJ6u1BHhMRRwL3A34xweoHRcRvgG7g1My8fJLnOBk4GaCjo4ONGzeycuVKenp62L17N2vWrGHTpk0sWbKERYsWsWPHDlatWsW2bdsYGRmho6ODrq4u2traAOjt7WX16tVs3ryZpqYmli9fzpYtW1i6dClDQ0Ps3Llz7Dmbm5tpb2+nu7ub9vZ2BgYG6OvrG1vf0tJCW1sbW7duZdmyZfT19dHf3z+2fvHixbS2trJ9+3ZWrFhBb28vAwMDY+tbW1tpaWmhp6fHNtkm22SbbJNtsk22yTbtpzZNmk0zc8oNZltEtAIXAe/MzP8Zt24JMJKZfRFxPHBmZh413XOuXbs2N2zYMDsFS5IaUmdnJ2eccca0251++ul0dnbOfkGSZl1EXJKZa291f50BOSIOBr4FfDczPzCD7a8B1mZmz1TbGZAlSftq3bp1AKxfv77WOiTNnskCcp2zWATwX8AVk4XjiFhRbkdEHENR7w1zV6UkSZIWmjrHID8EOAm4LCIuLe97E7AaIDPPBp4O/FNEDAG7gBOz7jEhkiRJami1BeTM/AkQ02xzFnDW3FQkSZIkeSU9SZIk6a8YkCVJkqQKA7IkSdIc6+zsJCKm/XFKwXrMiwuFSJIkLSSdnZ1/FX6dVnB+sQdZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVl7xCv/SJKkRueV9LRHvPKPJElqdPYgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmSJEmqMCBLkiRJFQZkSZIkqcKALEmSJFXUFpAj4g4R8cOIuCIiLo+IV0+wTUTEhyLiyoj4bUTcv45aJUmStHAsqnHfQ8DrMvPXEXEYcElEXJiZv69scxxwVPlzLPDR8l9JkiRpVtTWg5yZ12Xmr8vbNwFXAKvGbXYCcE4WLgbaIuKIOS5VkiRJC8i8GIMcEUcC9wN+MW7VKuDayvJmbh2iJUmSpP2mziEWAEREK/BV4J8zc+f41RM8JCd5npOBkwE6OjrYuHEjK1eupKenh927d7NmzRo2bdrEkiVLWLRoETt27GDVqlVs27aNkZEROjo66Orqoq2tDYDe3l5Wr17N5s2baWpqYvny5WzZsoWlS5cyNDTEzp07x56zubmZ9vZ2uru7aW9vZ2BggL6+vrH1LS0ttLW1sXXrVpYtW0ZfXx/9/f1j6xcvXkxrayvbt29nxYoV9Pb2MjAwMLa+tbWVlpYWenp65l2b+vv7aW5upqurq2Ha1Iivk22yTbZpz9s0ODjI8PAwu3btapg2NeLr1ChtGh4eZnBwkJ6enoZp04HwOk2aTzMnzJtzIiIOBr4FfDczPzDB+o8B6zPzC+XyH4B1mXndVM+7du3a3LBhw2yUrHHWrVsHwPr162utQ5L2N/++aS55vNUjIi7JzLXj769zFosA/gu4YqJwXDoXeH45m8UDgT9PF44lSZKkfVHnEIuHACcBl0XEpeV9bwJWA2Tm2cD5wPHAlUA/8KIa6pQkSdICUltAzsyfMPEY4+o2CZwyNxVJkiRJ82QWC0mSJGm+MCBLkiRJFQZkSZIkqcKALEmSJFUYkCVJkqQKA7IkSZJUYUCWJEmSKgzIkiRJUoUBWZIkSaowIEuSJEkVBmRJkiSpwoAsSZIkVRiQJUmSpAoDsiRJklRhQJYkSZIqDMiSJElShQFZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmSJEmqMCBLkiRJFbUG5Ij4ZERsj4jfTbJ+XUT8OSIuLX/eNtc1SpIkaWFZVPP+Pw2cBZwzxTY/zswnzk05kiRJWuhq7UHOzB8BO+qsQZIkSaqquwd5Jh4UEb8BuoFTM/PyiTaKiJOBkwE6OjrYuHEjK1eupKenh927d7NmzRo2bdrEkiVLWLRoETt27GDVqlVs27aNkZEROjo66Orqoq2tDYDe3l5Wr17N5s2baWpqYvny5WzZsoWlS5cyNDTEzp07x56zubmZ9vZ2uru7aW9vZ2BggL6+vrH1LS0ttLW1sXXrVpYtW0ZfXx/9/f1j6xcvXkxrayvbt29nxYoV9Pb2MjAwMLa+tbWVlpYWenp65l2b+vv7aW5upqurq2Ha1Iivk22yTbZpz9s0ODjI8PAwu3btapg2NeLr1ChtGh4eZnBwkJ6enoZp04HwOk0mMnNPwup+FxFHAt/KzHtNsG4JMJKZfRFxPHBmZh413XOuXbs2N2zYsN9r1a2tW7cOgPXr19dahyTtb/5901zyeKtHRFySmWvH3z+vZ7HIzJ2Z2VfePh84OCLaay5LkiRJDWxeB+SIWBERUd4+hqLeG+qtSpIkSY2s1jHIEfEFYB3QHhGbgdOBgwEy82zg6cA/RcQQsAs4MeseEyJJkqSGVmtAzsxnT7P+LIpp4CRJkqQ5Ma+HWEiSJElzzYAsad7q7OwkIqb96ezsrLtUSVIDORDmQZa0QHV2dv5V+HUaJEnSXLAHWZIkSaowIEuSJEkVBmRJkiSpwoAsSZIkVRiQJUmSpAoDsiRJklRhQJYkSZIqDMiSJElShQFZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVLFoug0iogM4EXgYsBLYBfwOOA/4dmaOzGqFkiRJ0hyaMiBHxKeAVcC3gPcC24EW4C7A44E3R8Rpmfmj2S5UkiRJmgvT9SC/PzN/N8H9vwP+JyKagdX7vyxJkiSpHlOOQZ4oHEfE7SLi6HL97sy8craKkyRJkubajE7Si4j1EbEkIpYCvwE+FREfmN3SJEmSpLk301ksbpuZO4GnAp/KzAcAj569siRJkqR6zDQgL4qII4BnUpywJ0mSJDWkmQbktwPfBa7MzF9FxJ2AP85eWZIkSVI9ZhSQM/PLmXl0Zr68XL4qM5+2rzuPiE9GxPaImGimDKLwoYi4MiJ+GxH339d9SpIkSVOZMiBHxFvKE/MmW//IiHjiPuz/0xTzKU/mOOCo8udk4KP7sC9JkiRpWtPNg3wZ8M2IGAB+DVxPcaGQo4D7At8D3rW3O8/MH0XEkVNscgJwTmYmcHFEtEXEEZl53d7uU5IkSZrKlAE5M78BfCMijgIeAhwB7AQ+B5ycmbtmub5VwLWV5c3lfbcKyBFxMkUvMx0dHWzcuJGVK1fS09PD7t27WbNmDZs2bWLJkiUsWrSIHTt2sGrVKrZt28bIyAgdHR10dXXR1tYGQG9vL6tXr2bz5s00NTWxfPlytmzZwtKlSxkaGmLnzp1jz9nc3Ex7ezvd3d20t7czMDBAX1/f2PqWlhba2trYunUry5Yto6+vj/7+/rH1ixcvprW1le3bt7NixQp6e3sZGBgYW9/a2kpLSws9PT3zrk39/f00NzfT1dXVMG1qxNepUdrU399PU1MTvb29DdOmRnydGqVNg4ODDA8Ps2vXroZpUyO+To3SpuHhYQYHB+np6WmYNh0Ir9NkouicrU/Zg/ytzLzXBOvOA96dmT8pl78PvD4zL5nqOdeuXZsbNmyYhWo13rp16wBYv359rXVoYfB401zyeNNc8nirR0Rckplrx98/01ks6rIZuENluQPorqkWSZIkLQDzPSCfCzy/nM3igcCfHX8sSZKk2TTdSXqzKiK+AKwD2iNiM3A6cDBAZp4NnA8cD1wJ9AMvqqdSSZIkLRQzCsgRcReKKdaWZ+a9IuJo4MmZ+Y592XlmPnua9Qmcsi/7kCRJkvbETIdYfAJ4I/AXgMz8LXDibBUlSZIk1WWmAXlxZv5y3H1D+7sYSZIkqW4zDcg9EfE3QAJExNOZYC5iSZIk6UA305P0TgE+DtwtIrYAVwPPm7WqJEmSpJrMKCBn5lXAoyPiUKApM2+a3bIkSZKkesx0Fos24PnAkcCiiAAgM181a5VJkiRJNZjpEIvzgYuBy4CR2StHkiRJqtdMA3JLZr52ViuRJEmS5oGZzmLx2Yh4aUQcERFLR39mtTJJkiSpBjPtQd4N/BvwZsqp3sp/7zQbRUmSJEl1mWlAfi1w58zsmc1iJEmSpLrNdIjF5UD/bBYiSZIkzQcz7UEeBi6NiB8Cg6N3Os2bJEmSGs1MA/LXyx9JkiSpoc30Snqfme1CJEmSpPlgyoAcEV/KzGdGxGXcMnvFmMw8etYqkyRJkmowXQ/yB8t/nzjbhUiSJEnzwXQB+cPA/TNz01wUI0mSJNVtumneYk6qkCRJkuaJ6XqQV0XEhyZb6TRvkiRJajTTBeRdwCVzUYgkSZI0H0wXkG9wijdJkiQtJNONQd49J1VIkiRJ88SUATkzHzhXhUiSJEnzwXQ9yJIkSdKCUmtAjojHR8QfIuLKiDhtgvXrIuLPEXFp+fO2OuqUJEnSwjHdSXpjIuIgYHn1MZnZtbc7Lp/vw8BjgM3AryLi3Mz8/bhNf5yZXslPkiRJc2JGATkiXgmcDmwDRsq7Ezh6H/Z9DHBlZl5V7uOLwAnA+IAsSarZkaedV3cJc27rVTcAC7PtANe85wl1lyDVZqY9yK8G7pqZN+zHfa8Crq0sbwaOnWC7B0XEb4Bu4NTMvHyiJ4uIk4GTATo6Oti4cSMrV66kp6eH3bt3s2bNGjZt2sSSJUtYtGgRO3bsYNWqVWzbto2RkRE6Ojro6uqira0NgN7eXlavXs3mzZtpampi+fLlbNmyhaVLlzI0NMTOnTvHnrO5uZn29na6u7tpb29nYGCAvr6+sfUtLS20tbWxdetWli1bRl9fH/39/WPrFy9eTGtrK9u3b2fFihX09vYyMDAwtr61tZWWlhZ6enrmXZv6+/tpbm6mq6urYdrUiK9To7Spv7+fpqYment7G6ZNB8rrdJ+lIxyxOPnZtiYevHyEm4eCK3cG91k6wpU7g9s2w+Ett6zfuTvoujm41+1G2NjbxLJDkqW3uWX9jsFg+67gbm0j/O7GJlYfmixpvmX99QPBn3fDnZckv9nRxJ2XJIcuumX9df3B4DAceVjy654m7nm7ZFETXNITHHP4CNfeXFwI9g6HJr+8vokHtCdDI3D5jcH920e45qbgNgcxZZtuPhgOboIlB2fDtGlPXqeNGzfOi2OvEX+fJmrT8PAwg4OD9PT0NEybDoTXaTKRmVNuUIbPHwKPycyhaTeeoYh4BvC4zPyHcvkk4JjMfGVlmyXASGb2RcTxwJmZedR0z7127drcsGHD/ipVU1i3bh0A69evr7UOLQweb/VZiL2oWz9fnBqz4jnvqbmSetTZg+zxtvDUdbxFxCWZuXb8/TPtQb4KWB8R5wGDo3dm5gf2oabNwB0qyx0UvcRjMnNn5fb5EfGRiGjPzJ592K8kSZI0qZkG5K7yp7n82R9+BRwVEXcEtgAnAs+pbhARK4BtmZkRcQzFrBv7c5iHJEmS9FdmFJAz8wyAiDisWMy+fd1xZg5FxCuA7wIHAZ/MzMsj4mXl+rOBpwP/FBFDwC7gxJzJmBBJkiRpL810Fot7AZ8FlpbLPcDzJzthbqYy83zg/HH3nV25fRZw1r7sY64sxPFSsLDP8vYMb0mSGtNMLxTyceC1mbkmM9cArwM+MXtlSZIkSfWYaUA+NDN/OLqQmeuBQ2elIkmSJKlGM57FIiLeSjHMAuB5wNWzU5IkSZJUn5n2IL8YOBz4H+Br5e0XzVZRkiRJUl1mOovFjcCrZrkWSZIkqXZTBuSI+PfM/OeI+CZwq+nVMvPJs1aZJEmSVIPpepBHxxy/b7YLkSRJkuaDKQNyZl5S3rxvZp5ZXRcRrwYumq3CJE1uIc47Dc67LUmaGzM9Se8FE9z3wv1YhyRJkjQvTDcG+dnAc4A7RsS5lVWHATfMZmGSJElSHaYbg/wz4DqgHXh/5f6bgN/OVlGSJElSXaYbg7wJ2AQ8aG7KkSRJkuo1o3mQI+ImbpnmrRk4GLg5M5fMVmGSJElSHWZ6oZDDqssR8RTgmFmpSJIkSarRTGex+CuZ+XXgkfu5FkmSJKl2Mx1i8dTKYhOwlgmurCdJkiQd6GYUkIEnVW4PAdcAJ+z3aiRJkqSazXQM8otmuxBJkiRpPpjRGOSI+ExEtFWWbxcRn5y9siRJkqR6zPQkvaMzs3d0ITNvBO43OyVJkiRJ9ZlpQG6KiNuNLkTEUmY+flmSJEk6YMw05L4f+FlEfIVi9opnAu+ctaokSZKkmsz0JL1zImIDxdzHATw1M38/q5VJkiRJNdiTC4Uspbi89H8A10fEHWepJkmSJKk2M53F4nTgDcAby7sOBj43W0VJkiRJdZlpD/LfA08GbgbIzG7gsH3deUQ8PiL+EBFXRsRpE6yPiPhQuf63EXH/fd2nJEmSNJWZBuTdmZmUl5eOiEP3dccRcRDwYeA44B7AsyPiHuM2Ow44qvw5Gfjovu5XkiRJmspMA/KXIuJjQFtEvBT4HvCf+7jvY4ArM/OqzNwNfJFbX776BOCcLFxc7v+IfdyvJEmSNKmZzmLxvoh4DLATuCvwtsy8cB/3vQq4trK8GTh2BtusAq7bx31LkiRJE5pRQI6Il2TmfwEXlssHRcTpmXnGPuw7Jrgv92Kb0RpPphiGQUdHBxs3bmTlypX09PSwe/du1qxZw6ZNm1iyZAmLFi1ix44drFq1im3btjEyMkJHRwddXV20tRVX1O7t7WX16tVs3ryZpqYmli9fzpYtW1i6dClDQ0Ps3Llz7Dmbm5v57ZseRnd3N+3t7QwMDNDX1ze2vqWlhba2NrZu3cqyZcvo6+ujv79/bP3ixYtpbW1l+/btrFixgt7eXgYGBsbWt7a20tLSQk9Pz5y2qb29fdo2PfYHh9Dc3MznX37vhmnTTF+na665prY2XXH6I2elTfP9dXr4Dw6hqamJ75z2kIZp00xfpx07dtTapp+96n6z+vs0H1+nJ13UyvDwMBeVv2+N0KY9eZ02btxYW5sue/Pfzdnf8vnyOr3gp20MDg5y/qnHNkyb9uR16urqqqVNk4liaPHUIuLzQBvwEuD2wKeAizLz1GkfPPlzPgjozMzHlctvBMjMd1e2+RiwPjO/UC7/AViXmVP2IK9duzY3bNiwt6VpD6xbtw6A9evX11qHFgaPN80ljzfNJY+3ekTEJZm5dvz9Mx1i8ZyIeBZwGdAPPDszf7qPNf0KOKqcT3kLcCLwnHHbnAu8IiK+SDH84s/ThWNJkiRpX8x0iMVRwKuBrwJ3B06KiP/NzP693XFmDkXEK4DvAgcBn8zMyyPiZeX6s4HzgeOBKymC+Yv2dn+SJEnSTMwoIAPfBE7JzO9HRACvpegBvue+7Dwzz6cIwdX7zq7cTuCUfdmHJEmStCdmGpCPycydMBZa3x8R585eWZIkSVI9ppwHOSJeD5CZOyPiGeNWO9xBkiRJDWe6C4WcWLn9xnHrHr+fa5EkSZJqN11AjkluT7QsSZIkHfCmC8g5ye2JliVJkqQD3nQn6d0nInZS9BYfUt6mXG6Z1cokSZKkGkwZkDPzoLkqRJIkSZoPphtiIUmSJC0oBmRJkiSpwoAsSZIkVRiQJUmSpAoDsiRJklRhQJYkSZIqDMiSJElShQFZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmSJEmqMCBLkiRJFQZkSZIkqcKALEmSJFUsqmOnEbEU+G/gSOAa4JmZeeME210D3AQMA0OZuXbuqpQkSdJCVFcP8mnA9zPzKOD75fJkHpGZ9zUcS5IkaS7UFZBPAD5T3v4M8JSa6pAkSZL+Si1DLIDlmXkdQGZeFxHLJtkugQsiIoGPZebHJ3vCiDgZOBmgo6ODjRs3snLlSnp6eti9ezdr1qxh06ZNLFmyhFonrNQAACAASURBVEWLFrFjxw5WrVrFtm3bGBkZoaOjg66uLtra2gDo7e1l9erVbN68maamJpYvX86WLVtYunQpQ0ND7Ny5c+w5m5ubaW9vp7u7m/b2dgYGBujr6xtb39LSQltbG1u3bmXZsmX09fXR398/tn7x4sW0trayfft2VqxYQW9vLwMDA2PrW1tbaWlpoaenZ961qb+/n+bmZrq6uhqmTY34OjVKm/r7+2lqaqK3t7dh2tSIr1OjtGlwcJDh4WF27drVMG1qxNepUdo0PDzM4OAgPT09DdOmA+F1mjRXZuaUG+ytiPgesGKCVW8GPpOZbZVtb8zM203wHCszs7sM0BcCr8zMH02377Vr1+aGDRv2oXrN1Lp16wBYv359rXVoYfB401zyeNNc8nirR0RcMtEw3lnrQc7MR09RzLaIOKLsPT4C2D7Jc3SX/26PiK8BxwDTBmRJkiRpb9U1Bvlc4AXl7RcA3xi/QUQcGhGHjd4GHgv8bs4qlCRJ0oJUV0B+D/CYiPgj8JhymYhYGRHnl9ssB34SEb8Bfgmcl5nfqaVaSZIkLRi1nKSXmTcAj5rg/m7g+PL2VcB95rg0SZIkLXBeSU+SJEmqMCBLkiRJFQZkSZIkqcKALEmSJFUYkCVJkqQKA7IkSZJUYUCWJEmSKgzIkiRJUoUBWZIkSaowIEuSJEkVBmRJkiSpwoAsSZIkVRiQJUmSpAoDsqR5q7Ozk4gY+7nooou46KKL/uq+iKCzs7PuUiVJDWRR3QVI0mQ6OzsNv5KkOWcPsiRJklRhQJYkSZIqDMiSJElShQFZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkipqCcgR8YyIuDwiRiJi7RTbPT4i/hARV0bEaXNZoyRJkhamunqQfwc8FfjRZBtExEHAh4HjgHsAz46Ie8xNeZIkSVqoFtWx08y8AiAiptrsGODKzLyq3PaLwAnA72e9QEmSJC1YtQTkGVoFXFtZ3gwcO9nGEXEycDJAR0cHGzduZOXKlfT09LB7927WrFnDpk2bWLJkCYsWLWLHjh2sWrWKbdu2MTIyQkdHB11dXbS1tQHQ29vL6tWr2bx5M01NTSxfvpwtW7awdOlShoaG2Llz59hzNjc3097eTnd3N+3t7QwMDNDX1ze2vqWlhba2NrZu3cqyZcvo6+ujv79/bP3ixYtpbW1l+/btrFixgt7eXgYGBsbWt7a20tLSQk9Pz7xrU39/P83NzXR1dTVMmxrxdbJNtsk27XmbBgcHGR4eZteuXQ3TpkZ8nRqlTcPDwwwODtLT09MwbToQXqdJc2VmTpNT905EfA9YMcGqN2fmN8pt1gOnZuaGCR7/DOBxmfkP5fJJwDGZ+crp9r127drcsOFWT6lZsG7dOgDWr19fax2StL/5901zyeOtHhFxSWbe6ny4WetBzsxH7+NTbAbuUFnuALr38TklSZKkKc3nad5+BRwVEXeMiGbgRODcmmuSJElSg6trmre/j4jNwIOA8yLiu+X9KyPifIDMHAJeAXwXuAL4UmZeXke9kiRJWjjqmsXia8DXJri/Gzi+snw+cP4cliZJkqQFbj4PsZAkSZLmnAFZkiRJqjAgS5IkSRUGZEmSJKnCgCxJkiRVGJAlSZKkCgOyJEmSVGFAliRJkioMyJIkSVKFAVmSJEmqMCBLkiRJFQZkSZIkqcKALEmSJFUYkCVJkqQKA7IkSZJUYUCWJEmSKgzIkiRJUoUBWZIkSaowIEuSJEkVBmTtkc7OTiJi7Oeiiy7ioosu+qv7IoLOzs66S5UkSdori+ouQAeWzs5Ow68kSWpo9iBLkiTNMb+Rnd/sQZYkSZpjfiM7v9mDLEmSJFUYkCVJkqSKWgJyRDwjIi6PiJGIWDvFdtdExGURcWlEbJjLGiVJC4tjQiWNisyc+51G3B0YAT4GnJqZE4bfiLgGWJuZPXvy/GvXrs0NG8zTkiRJmlxEXJKZt+qsreUkvcy8AiAi6ti9JEmSNKn5PotFAhdERAIfy8yPT7ZhRJwMnAzQ0dHBxo0bWblyJT09PezevZs1a9awadMmlixZwqJFi9ixYwerVq1i27ZtjIyM0NHRQVdXF21tbQD09vayevVqNm/eTFNTE8uXL2fLli0sXbqUoaEhdu7cOfaczc3NtLe3093dTXt7OwMDA/T19Y2tb2lpoa2tja1bt7Js2TL6+vro7+8fW7948WJaW1vZvn07K1asoLe3l4GBgbH1ra2ttLS00NPTY5tsk22yTbbJNtkm22Sb9lObJs2VszXEIiK+B6yYYNWbM/Mb5TbrmXqIxcrM7I6IZcCFwCsz80fT7dshFpIkSZrOnA+xyMxH74fn6C7/3R4RXwOOAaYNyJIkSdLemrfTvEXEoRFx2Oht4LHA7+qtSpIkSY2urmne/j4iNgMPAs6LiO+W96+MiPPLzZYDP4mI3wC/BM7LzO/UUa8kSZIWjrpmsfga8LUJ7u8Gji9vXwXcZ45LkyRJ0gI3b4dYSJIkSXUwIEuSJEkVBmRJkiSpwoAsSZIkVRiQJUmSpIpZu5JenSLiemBT3XUsIO1AT91FaMHweNNc8njTXPJ4m3trMvPw8Xc2ZEDW3IqIDRNdplGaDR5vmkseb5pLHm/zh0MsJEmSpAoDsiRJklRhQNb+8PG6C9CC4vGmueTxprnk8TZPOAZZkiRJqrAHWZIkSaowIEuSJEkVBmRNKyI8TiRJ0oJh8NGkImI1QGaOGJI1FyKiNSIOq7sOLUwREXXXIGl+MPRoKp0RcRUYkjX7ImIJ8B7gyeVtaU5ExB0jojk9a11SycCjWxntRcnMFwOXR8QPy2VDsmZNZu4ErgAeCTzWkKy5EBEPBf4NuNWlZqX9afS9NSIOqrsWTc+wo4mM/hI/ENgA3DUifgyGZM2O0WMqMz8M/AJ4EoZkzbKIuD9wPPDJzNziEAvNloiIzMyIeBLwvoj4RETcqe66NDmDjsZExG1gLATfF/hv4AKKHr3tEfGrynqPHe0X5RvHSES0A2Tmx4ELgRMwJGsWVP5+PQt4JtAREQc5xEKzpQzHjwA6gQ8BDwDeHhEH11qYJmXIEQARsRR4R0QcW941CFyQmT/PzI2Z+TRgJCJ+AUVIrqtWNZbyjeMJwKcj4p0RcVxmfg44D3gicHxE3LbeKtUIKj3EKwAy8w3AR4DHAXepqy41rnHfStwdeCvFsTYIvCkz/2KH0/zki6JR7UAfcFJE3A/YCfxdOT5v1CeB25ZDL6T9IiLWAe8G/gU4GviXiDg5M78I/BB4MnBIfRWqUZQfxo4DvhIR746Ij2XmB4CrgbdExL1rLlENZrQDICLeAewC/gF4M/C8zOyKiJMo/v5pnjEgC4DM/D/gf4HFwCspfpFfB5wbES+MiOdSBJXjM/Pi+ipVo4iIpohopviq8SRgNbAS+Abw9xHx0sz8DPC6zNxaY6lqEOWY43cDL6b4G3d0ObTiVOB64IyIOLTOGtVYyg9dLwU+B6wH7kQxfHFbRBxD0TGwvq76NLlwyJUAyq+4Twe+B6yl7FEB7gU8BVgGfDEzv1FbkWoIlZNVFmXmUHnfoRRvIP+UmVsjYj1wDfC2zOyqr1odyConf46Uyw8A7gFsoZhS8FmZeXVE3DMzL4+Iu2bmH+qrWI0kIm5P8T76eGBtZt4cEY8FXk4xxGI58P7M/Obo38Uay9U4BmRRniTwEeBLmXlheYLek4EO4J2ZuakSavwl1l6rHEePAZ4NXErxYew8im8w3gdcDJwFnJqZl9VWrA5o5QVn7g5cAhwHHApcRjFsZydwdGbuKof4/CNwSmbuqKlcNYjx75HlkMQ3UExh+Z7M3BkRyymGNLaNzp7i++r84xALkZl/oRjj+aRy+VKKN5UHU4zLa6Oc+s1fYu2LSjh+H/Al4BHA08sevlOB1wJfAM42HGtvRcTdKELJc4EfAO8HejLz9xQnSfUADy2n3DqT4tsxw7H2SfmtWEbEYyPitIh4J0Uw/gjQDPxzRByWmdsy8+bM3AK+r85X9iAvcJUevXtTjD3+VWZ+IiLuQfEG847M/GO9VepAVvaW3GZ0qEREnAL8GFgCfBB4amZeGxGHULyJHJqZ3faqaG+U0wJ+i2LcZw/FVJXdwDOAvwAHA0+jGPd+HfCVzDzP4017KyIOz8zry9sPBz4OvA14PrCdokOgDXghxTHX6UxQ858BWcDY15GPBl4BDAB3BV6dmefVWpgOeBHxIYpptV6fmdeUAfmVwJ+BJ2fmtoh4PHBn4KOZOVxjuTrAlVNWXkDxIawFeC/F+RV/Ad6dmVdP8BjDsfZKRNyV4gPZEzPzDxFxBjCYme8q178fOCoznxwRjwK6M/OKGkvWDDnEYoGZ7EpRmXlTZn6NYpjFuyiCi+FYe230WMvMV1GEk9dFxBHAlynGgv68DMcPBf4d+KPhWPuqHCrxGYoP+8OZeQ3wMooZek6NiJdGxNURcWTlGDUca4+VJ4EeD/wnkGUAvhpYGhG3A8jM1wEtEbEiM79vOD5wGJAXiEowPmjc/U3VbTKzPzN/Wo7VmzRQSzMVEQ+mOO7+HvgUxdCKDwPtUVzC/H3Av2Tmd+urUg1mE3AK8JyIeGVmDlJM7XYDcD/gNZl5jcFY+6IcJnEV8HTgXIohPZdQfAP7qIi4Uzl8cQWwqLZCtVccYrEAVMYZP5Ji7N21wK8z84Lq+vL2oswcKoNz+gaiPRURzZm5u7x9N4oe42dRTK11NnAzcHp59vZyiuNsu19za29V/sbdFxgGestx7Q+l+Pr7jZn50fID/20yc8DjTfuicswdAXyHYl7tE8thZE+keK+9LXAE8N7M/HqN5Wov2IO8AJS/xA+luBLexRSfZp8UES8fXQ9QTpg/VH419HHgsLpq1oGpHP/5qcrFFoYp5jO+PjP/nJnPBu4NfD4i7liezb0d/Jpbe6/8G3cc8EWKYWI/iYh7Z+ZPKKZ4OysiTsnCwOhjaixZB7BKOG6juMDM4yiG9Xw0Iv42M79FMSvPyyiumPd1v4098BiQF467A2dm5meBTuBC4D4R0Q5jPcfD5S/8l4DPZ+bO2qrVAakc/3kasLLszbuSYs7Z+5ezCwB8gGI86MH1VKlGExH3pLjwxxMoptVqAX4eEWsz8+fA3wHOxqP9ovKB7HMUFwJ5XGZ+FPgZ8OaIOJbiW4ztmfmn0cfUV7H2hgG5QU3waXUAOCki1mRmL8VZ3nem+PqHsud4NBy/PTN/MKcFq2Fk5rXAE4GvUFw++hyKWSv+OSJeSdGrckoWlzeX9octFNO4rQLekpnLgY8Cv4yI+5XnVVxgL572hyguEf1vFL3E9waeHBFNmfmvwG8oZk3xkuUHOAeNN6jyE+6xwNEUY/C+CqwBXhsRZ5WbHQaMjhU9iCIcvyszf1xDyWogmfnBiBihOO6eQtHL8gjgPhTj8X5ZZ31qLOWH/t6IeBzwzfLunwBrgaWV7ezF016rjFu/A8U3Fm3l7Wdm5khEdGTm6RFxZ7+BPfB5kl6DiohHUPSg/J6il/hNFCcRPIZiNoGbgA9l5lcrj7ldZt5YQ7k6gJVj1yecni0iXgs8E3hJZl4+uq0nSGlflL11t7rQQkScBDySYmjPkymOu995vGlfjP8bV/Ygf7pcfHhmXl+emPcY4A2j49x1YDMgN6By4vL3A2/LzF+XIeVY4GOZ+YOIuD1AZt5QfuUYE73ZSFOJiNV5y9XxFmXm0CTbvQF4HvAQ4GbnOtbeiIjVwDMy8/3l8q1CcnmC8TOAuwAXZeY3b/1M0syUx9PO8kP9wym+kfgtxdXwTgQOAb5AcT7F2RTDezzmGoQBucFExMEUYeQNwDl5y9V8Xk0xofn7R6d3k/ZFRHwSWJeZdyqXpwrJazJz05wWqIYSEfegmDLws5n5nvK+sZA8SWC251h7pZyJ520Uc2f/AjgL+DbFPNrrgV5gCHgBRWA+JzO/4THXOAzIDag82e7JwMMoelE+V97/GuBHmXlJnfXpwDZu3uxvAq2Z+Yhy+VYhufr15GRfjUtTqUyr9RjgTIpvw84s1/3VMTX+GDSwaG9ERDPF++iDgLsBH87M88vZeZ5IMUvFWRFxGDCSmTd7rDUWZ7FoQOUJK+dRnKTykIh4cXn/Bw3H2g8CICIeCGwA7hrFFfFGZ0MZO/m3Mua4LSIeZDjWnioDcJZjPF9AcaWyl0XEW6G4mlmUVwStzOXeFhHvi4iDDSzaG1lc7OibwEUUJ7Q/vzy+LqV4b31eRNw+M2/KzJvLx3isNRAD8gFquumKMvMGitkrfk0RklfOSWFqWBFxGxgLJPcF/ptiusBHAtsj4lfl+qGIWFQJx7el+MDmrDmasYi4bUS0lsfbUor52z8GvAh4NnBcRLwOxo7J6lzuXwXOzcy/1FW/DnxZXKL828C7KIZUvL5ctRkYAZprKk1zwIB8AIqIFopQQkTco5yx4lbKkPw1ipP1uuewRDWYMqC8o5w6EGAQuCAzf56ZGzPzacBIRPwCipBcCcdfpTiz2+kDNSPlRWXeALy4vH0jsB24uhw+8VuKk6PeEBGnwdgHs9tRTFfZmZk/qqd6HchGv40YVX7I+iHFh/xHRMQlwAeB92TmdTWUqDliQD4wLaa4Ct73KC6tOunJT5nZk5lbRpedKF97qR3oo7jYzP0oro73d1FcwnzUJ4HblkMviIhW4PvAGVlc8leakXIO2cspLjTzzPKr68uB/y6HTYwAfwL+k+Lr7tExo5/Dudy1hyJi9bhvI8aH5EHgO8B/ABcDb83Mc30/bWwG5ANQFpfz3URx8sDVmXkVFCenjG4ThYPK27ctT9BzjJT2ShZXvftfig9nr6SYU/t1wLkR8cKIeC7FCS3HZ+bF5cM6gJcaVrQnRv9uUXyNfSTFeOPnAm+lmE3gfyPiVOBDwNcrH74OA16WmevntmI1gFaKbytGv42YKCT/hWJI2dvLcci+nzY4Z7E4AEXE3TJzY0Q8EngCxRvDazOzLyLaM7Onctb36Hi8ToOK9lZEPIHi8qnfo5gL9GqKq+Pdi+JKecuAL2bmN2orUg2j/GbiE8ArgBMo5pn9ZWZ+KiJOLJe7M/P7NZapBrCHM6SMbvtX/9ZVu2aXAfkAUvmlvBTYlJknRMQaiqvkjQBfobhqWWdmXleG4y8B/2o41t6KYm7tjwBfyswLyxP0nkzRQ/zOzNzkG4b2p4g4BfibzHxt+TX2i4DnA5+hOA5vrrVANYTRAFzOkHIikBQdAJ/PzH8dt83YjDwUnQNv9CTQxuYQiwPL6CwC9wUOj4gvZ3HxhTOAYYqJzM8tw/EhwDcoAozhWHutfBM4BHhSuXwpxVRbDwbeUr5hRLnOcKz94TLg6Ii4fxY+CfwFeCBw+3pL04HOGVI0EwbkA0RE3B14dkQcCZCZDwbuFBFfyszuzHwF8KjMPK98yOHASzLzoloKVkOonITyXqAlIl5aLl9NEZL/X2b2Or+x9rONwE+BJ0XEYyPiLpSdAFle3lzaG86QopkyIM9jo+EkIh4MvBF4HPCoiLhDucnTgadHxBfK5bEpZzKzKzOvnMt61XgqPcLXUMwHemJEnAecS/FV9x/rqk2NKzO3U3wD1kNxud9PAGdn5mW1FqYDnjOkaKYcgzzPRcSTKL7+OZliqq3nUczJ+HXgiHL5e56sov1hujHEEbEYuB9wY2b+fu4qUyOb6riL4lK+h2Tmdse4a19UxhE/nGI2niMp5jT+KsXFQB4LfBp4GfCczPxl+bjbA4sz89o66lY9DMjzWDmP7GeBf8vMn5X3HQ88lWJamodS/BL/yDcO7YvKSXaLyq8ZR+8fO4t7omPM4077ohzTOVTOwDPt8TV+VgFpTzlDimbKS7/Ob0nRa3wojL05nB8Rf6H4yrstM0cv72tI0V6phONHAk+LiGuBX2fmBeUJKlGeKDUWoMs5QtPjTnsiIg4HHpiZ34yI4ygu3XtYRPxzTnwxmSZgOCIOycxdhmPtB/cBvp2Z34+IH1CcmPeCckSjM6RojGOQ57HyF/VLwEMi4u5lWHkwxQUado6GY2lflMH3oRRXwrsYWEFxctTLR9fD2NeToyerfJxi/m1pRspzKp4GnBARLwNOBV5DcSydFRGPHbd9dVqtn0TEnee8aDUiZ0jRjNiDPP/9D8V4qI9FxE8p5jl+VWZuq7csNZi7A2dm5mcj4pvA3wFPiFsuPDPaczw6t/a7y5NdpGlV5pL9NNBCcYGZnnLKwEsjYhB4V3mcnV8Jx7cFvgy8xpOOtZ9UZ0hpp/g21hlSdCv2IM9zmbkFeA/FmdyXUow5Pm/qR0lTq0zfNmoAOCki1mRmL8UlVe9McSIo48Lx2zPzB3NasA5YEdECPKz8dwWwiSKkLImIZ5ZDeD4DnA38W/mhbLj8puIbwBlOq6X9xRlSNFOepCctUBFxLHA0/3979x0raVXGcfz706WsgIKuEsGCsVBiDIQgSrGDiiKCggtoFMT2hw39w4gFIUoUGzZiNzZYAVeJiMgqCHGNdEtUoijYiAUsuChBfPzjnMHXpexy7947d+Z+P8nNzrzzzuyZZJJ55rzP+R34GvA34GhafvaH+ilfAF5QVVcmuTst5u0dVXX+GIarCdR/iG0EHE6LpdyJtsHMn2mLpB4IrK6q0/v52/ZJgdFuej/1x5hmw4QUzZQFsrQIJXkicDLwE9os8RuBfwL7AAcCNwAfqKozBs/Zqqr+MobhagIl2Zq2qcIrkhwEnN7/XlxVN/QZ4hcAOwAXVtUpplRoQzEhRbNlgSwtMkm2B94DvKWqLktyNLA78NGq+nbP/KSqruszgPGLQ3dVkiW0Np01wPW0qxWPA7YBTq6qnyV5KHAwsLKqrhzbYDXx7ighBbjdhJRBn/vSqvrnfI9XC589yNIikmQj2iXuhwFPA6iq9wKraVur7ltV11XVdf2xsjjWTPQ87auAVwOraFv4rgBuBF6a5Ij+2OctjjUbJqRoLphiIS0iVXVzkpW0Vdt7J3l+VX2+qk7q2cbXjXmImhJJHgHsSlsIdQKwkta+czJwGPAa2lWM345tkJp4JqRorthiIS1CvY3imbTsz4t7Fqg0K8O+ziQHA8+uqsP7/Q8DDwGWV9Xfk9y7qq53cZRmqiej7A58n5aQsguwLfAM4NPAaT3n/SjajPLje2zlVrQfbG+6gw1qJAtkaRqtT9HRi+SDaEXym6vq9/MyOE21JLsCD6iqryY5GbjnoEj+OLA98CTgP7bvaKZMSNFcs0CWpkyfVdmzb6W6E7B1VZ13B+cuAzYZfXFIM9ULliW02MDdgE/QWis+ApxeVWf0HviHV9VPxjdSTToTUjQfLJClKZPk3sCLgP2A+9Euc/9yPZ/r5W7NSJL7V9W1Se5Hiw3ckRYjuB0tQvCFVXXzGIeoKWFCiuaDBbI0hZI8B/gssKqqDujHlvRkgdFs390Gi1WOrKr3jW/EmlT9s3Qv4IvA92hF8Y3AzbQ87afTFuo9wsVQ2lD61YgTgD2Bp9A2OXoZsAnwI1o/8rtcBKqZMuZNmjJJdugbfOwP/CLJx5Js3reLXjY6bxBz9GXgknGNV5OtRwH+lRat9XPaAqnjgRcC11bVscD9LY61ofSElOfSfnhdRFtw9ydaQsofaQkp37I41mw4gyxNiVF7RJIrgGuq6oAkD6Zd7v4PrUfvEFrv3rW9OP4ScHxVXTi+kWta9C3JNwVOon3WVgMH0HY0u8UWHs2UCSmabxbI0pRIsmlV/avfXg38rqoOTrINrUh+MvD6qjoryVLgG7Qc2u+Mb9SaJOsqOIYLoZIsB35eVZfO2wA11UxI0XyyQJamQJIdaXFt51XV1f3YpcBVVXVIv7/NKMotyYOAjb3srfW1vukoa6cFOIun2TIhReNggSxNqEFLxR7Ay4GNgXOBb1bVb5I8hLbV74qqOtRCRbNxV9JRhgtC+30/e5oxE1I0Di7SkyZUL473Bz5I6/n8NPAEYJ9ezNwDeCdttgULFM1GVV0PXAM8FvjVqDjukVv02+lb+f47yZZJXtuf62dPd1n/PG0JfDLJm4G9gXOAE4FTgR8Ay4EHj2+UmlbOIEsTKsnmwOeAE6tqdT+2H213vM2BvYDDquoCZ/A0Wz0d5WdJnkRLqtgCOLqq/pFkWd/Cd3RVY0vgDNqCUBeAalZ6S8+jgH37vz8FjqmqXyfZuqr+MNYBaipZIEsTKslmtIV2x1XVuaPezyT7AFcDW1bVxWMdpCae6ShaCExI0XyzxUKaUFW1hlaI7Jlkx14c7wG8Dvi7xbE2kE0Aqmpn4L5JTquqa4C3AbcAHwLO7MXxUuCrwNstjnVX9IV4d6aqak1VHQW8lDaDfFNV3TJ6cM4HqUXFGWRpgiXZlrZA7/HAd2kzK6+qqrPGOjBNBdNRNB9MSNFCZIEsTbjearEbsDVwdVV9f8xD0gQzHUXzzYQULURL1n2KpIWst1qcP+5xaDoM0lGOpV3KXgY8H6gkX+F/6SirRuePaaiaEn3Xu1FCyqphQsqoGO4tGHcbJaQAR1TV+/z8aa7YgyxJulVPRzkSeGVVXVpV5wCnAHvQNmY4Bzi7Xw5fV9+otE49IeUMYH/gF0k+lmTzXgwvG53XF+ONElIuGdd4tTg4gyxJGirarPFmcGvf59eT3Mxa6SjO3mk2Bu0RpyYZJaRcRUtIOTHJ6cAhSdZOSDE+UHPOGWRJ0q1MR9E8MiFFC5aL9CRJ/8d0FM01E1K00FkgS5Juw3QUbWgmpGiS2IMsSboN01G0oZmQokligSxJkubc2gkp/djdgYOAfYG9gMOq6gJnjzVuFsiSJGk+mJCiiWGKhSRJmnMmpGiSuEhPkiTNCxNSNCkskCVJ0rwxIUWTwAJZkiRJGrAHWZIkSRqwQJYkSZIGLJAlSZKkAQtkSZIkacACWZIkSRqwQJakBSxJJfncwEH0sAAAAflJREFU4P6SJH9K8rV1PG/nJPsN7h+b5PWzGMesni9Jk8QCWZIWtjXAI5Ms7ff3AX63Hs/bGdhvnWdJkm7DAlmSFr6zgWf024cCp4weSLJZkk8luTjJ5UkOSLIxcBzwvCRXJHleP32nJOcn+WWSVw1e4+gkP+5/rxkcPybJlUlWAdvP+buUpAXCAlmSFr5TgeVJNgUeBQx3HjsG+HZV7QY8ETgR2Ah4C7CiqnauqhX93B2ApwKPBt6aZKMkuwJHALsDjwFekmSXfnw5sAtwEG3nM0laFJaMewCSpDtXVT9Msh1t9vjraz28L/CsQX/wpsCD7uClzqqqm4CbkvyRttXvXsDKqloDkOTLwN60CZSVVXVjP37mhntHkrSwWSBL0mQ4E3g38ATgPoPjAZ5TVVcOT06y++28xk2D27fQvgNyJ/9nzWikkjThbLGQpMnwKeC4qvrRWsfPAV6ZJABJdunHbwC2WI/XvQB4dpJ7JNkMOBC4sB8/MMnSJFsA+2+INyFJk8AZZEmaAFX1W+Ck23noeOD9wA97kXw18EzgPOANSa4ATriT170syWeAi/qhT1TV5QBJVgBXANfQimZJWhRS5RU0SZIkacQWC0mSJGnAAlmSJEkasECWJEmSBiyQJUmSpAELZEmSJGnAAlmSJEkasECWJEmSBv4Lm252D24MgBEAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Plot mean execution time with standard deviation as error bars\n", + "plt.figure(figsize=(10, 6))\n", + "plt.bar(exec_summary[\"method\"], exec_summary[\"Mean\"], yerr=exec_summary[\"StdDev\"], capsize=5)\n", + "\n", + "plt.title(\"Mean Execution Time per Method\")\n", + "plt.xlabel(\"Method\")\n", + "plt.ylabel(\"Execution Time (s)\")\n", + "plt.xticks(rotation=45, ha=\"right\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodqpsexec_secs
0cut_no_dd_ideal1.00.029561
1cut_no_dd_ideal1.00.018340
2cut_no_dd_ideal1.00.170028
3cut_no_dd_ideal1.00.137045
4cut_no_dd_ideal1.00.019445
\n", + "
" + ], + "text/plain": [ + " method qps exec_secs\n", + "0 cut_no_dd_ideal 1.0 0.029561\n", + "1 cut_no_dd_ideal 1.0 0.018340\n", + "2 cut_no_dd_ideal 1.0 0.170028\n", + "3 cut_no_dd_ideal 1.0 0.137045\n", + "4 cut_no_dd_ideal 1.0 0.019445" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load data\n", + "df = pd.read_csv(\"CC+DD - experiment.csv\")\n", + "\n", + "# Prepare for extraction\n", + "log_entries = []\n", + "\n", + "# Iterate and extract logs with QPS value\n", + "for _, row in df[[\"method\", \"qps\", \"method, label, submit_time, exec_secs\"]].dropna().iterrows():\n", + " qps = row[\"qps\"]\n", + " lines = str(row[\"method, label, submit_time, exec_secs\"]).split(\"\\n\")\n", + " for line in lines:\n", + " parts = line.split(\",\")\n", + " if len(parts) == 4:\n", + " method, label, submit_time, exec_secs = parts\n", + " log_entries.append({\n", + " \"method\": method.strip(),\n", + " \"qps\": qps,\n", + " \"exec_secs\": float(exec_secs.strip())\n", + " })\n", + "\n", + "# Create DataFrame\n", + "log_df = pd.DataFrame(log_entries)\n", + "\n", + "# Preview\n", + "log_df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
qpsmethodNMeanStdDevMinMax
01.0cut_no_dd2100.12510.07360.00780.3301
11.0cut_no_dd_ideal2100.12020.07010.01670.3612
21.0cut_with_dd_after2100.13600.06550.01680.2465
31.0cut_with_dd_before2100.13310.07400.01730.2534
42.0cut_no_dd1200.12500.09920.01670.2916
52.0cut_no_dd_ideal1200.11180.08750.01650.2459
62.0cut_with_dd_after1200.13650.10200.01660.3201
72.0cut_with_dd_before1200.13820.09620.01710.2809
83.0cut_no_dd900.13550.13710.01700.4000
93.0cut_no_dd_ideal900.11520.10970.01640.3205
103.0cut_with_dd_after900.14080.14600.01680.4349
113.0cut_with_dd_before900.14690.14310.01690.3984
124.0cut_no_dd540.12430.17390.01790.7190
134.0cut_no_dd_ideal540.10190.13400.01740.4874
144.0cut_with_dd_after500.15220.20890.01770.7295
154.0cut_with_dd_before540.19510.24050.01780.7205
165.0cut_no_dd530.62370.97410.01802.5759
175.0cut_no_dd_ideal540.42150.59520.01751.5783
185.0cut_with_dd_after520.61700.97390.00712.5584
195.0cut_with_dd_before500.73091.03250.01802.5684
206.0cut_no_dd483.30455.39460.006514.2269
216.0cut_no_dd_ideal482.10103.20940.01647.6865
226.0cut_with_dd_after503.98775.53390.003713.4496
236.0cut_with_dd_before543.35185.34280.017113.7866
\n", + "
" + ], + "text/plain": [ + " qps method N Mean StdDev Min Max\n", + "0 1.0 cut_no_dd 210 0.1251 0.0736 0.0078 0.3301\n", + "1 1.0 cut_no_dd_ideal 210 0.1202 0.0701 0.0167 0.3612\n", + "2 1.0 cut_with_dd_after 210 0.1360 0.0655 0.0168 0.2465\n", + "3 1.0 cut_with_dd_before 210 0.1331 0.0740 0.0173 0.2534\n", + "4 2.0 cut_no_dd 120 0.1250 0.0992 0.0167 0.2916\n", + "5 2.0 cut_no_dd_ideal 120 0.1118 0.0875 0.0165 0.2459\n", + "6 2.0 cut_with_dd_after 120 0.1365 0.1020 0.0166 0.3201\n", + "7 2.0 cut_with_dd_before 120 0.1382 0.0962 0.0171 0.2809\n", + "8 3.0 cut_no_dd 90 0.1355 0.1371 0.0170 0.4000\n", + "9 3.0 cut_no_dd_ideal 90 0.1152 0.1097 0.0164 0.3205\n", + "10 3.0 cut_with_dd_after 90 0.1408 0.1460 0.0168 0.4349\n", + "11 3.0 cut_with_dd_before 90 0.1469 0.1431 0.0169 0.3984\n", + "12 4.0 cut_no_dd 54 0.1243 0.1739 0.0179 0.7190\n", + "13 4.0 cut_no_dd_ideal 54 0.1019 0.1340 0.0174 0.4874\n", + "14 4.0 cut_with_dd_after 50 0.1522 0.2089 0.0177 0.7295\n", + "15 4.0 cut_with_dd_before 54 0.1951 0.2405 0.0178 0.7205\n", + "16 5.0 cut_no_dd 53 0.6237 0.9741 0.0180 2.5759\n", + "17 5.0 cut_no_dd_ideal 54 0.4215 0.5952 0.0175 1.5783\n", + "18 5.0 cut_with_dd_after 52 0.6170 0.9739 0.0071 2.5584\n", + "19 5.0 cut_with_dd_before 50 0.7309 1.0325 0.0180 2.5684\n", + "20 6.0 cut_no_dd 48 3.3045 5.3946 0.0065 14.2269\n", + "21 6.0 cut_no_dd_ideal 48 2.1010 3.2094 0.0164 7.6865\n", + "22 6.0 cut_with_dd_after 50 3.9877 5.5339 0.0037 13.4496\n", + "23 6.0 cut_with_dd_before 54 3.3518 5.3428 0.0171 13.7866" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Group and aggregate statistics\n", + "qps_summary = log_df.groupby([\"qps\", \"method\"])[\"exec_secs\"].agg(\n", + " N=\"count\",\n", + " Mean=\"mean\",\n", + " StdDev=\"std\",\n", + " Min=\"min\",\n", + " Max=\"max\"\n", + ").reset_index()\n", + "\n", + "# Round for display\n", + "qps_summary[[\"Mean\", \"StdDev\", \"Min\", \"Max\"]] = qps_summary[[\"Mean\", \"StdDev\", \"Min\", \"Max\"]].round(4)\n", + "\n", + "# Display summary\n", + "qps_summary\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZxcZZXw8d9JYghJCE0MJCRtAiouqOCSAUVU0JFFBGZUHBZxl+EdxXGbER2XuOsryqujgjqDozAuuKA44AiouAFKUATRZsxAEpJAQhNiCCGEpM/7x3MrXNpOdyXp6kpX/76fT39Sd6s6t+t26tRzn+c8kZlIkiRJKsa1OwBJkiRpZ2KCLEmSJNWYIEuSJEk1JsiSJElSjQmyJEmSVGOCLEmSJNWYIEsaNSLilIi4bIRf81kRcfNIvuZoExH/EREfHKbnWhARFwyyfZeI+ENEzBqO1xuNIuLXEfGEdschdTITZElbRMTiiLgvItbVfj7Tplj2iYiMiAmNdZn5n5l5xDC/zim1c70vIvrq55+ZP8/Mxw7na7ZL9ftcWf+dRsSEiFgVEU0VxY+IV0bEL1oX5ZBOA36WmXfUYjokIn4cEfdExJ8j4uKIeFxt+2G19/WeiLg5Il5V2/6aiOiptq2MiEsiYrfhCrhK6v89IpZUr/HbiDh6iGPeHBF3VOdzXkTsUtt8FvD+4YpP0l8yQZbU37GZObX284Z2B9RKVdI9NTOnAkcDK+rn3+74tkc9AR7AGsp5NrwAuLu1EQ2rvwfObyxExDOAy4DvAbOBfYEbgF9GxD6141ZU7+c04O3AFyNi/4h4DvBh4KTM3A14PHDhMMc8AbgNeA6wO/Bu4MJ+8W0REUcCZwLPA/YBHgm8r7bLxcDhEbH3MMcpqWKCLKkpEXFORHyrtvyxiPhRFLtExFkRsbRqgTs3Inat7Xt8RFwfEWsj4n8j4qhq/eKI+OvafvXb6z+r/l1Ttfw9o3/rZdVyeG3VynZtRBxS23ZlRHwgIn5ZtdpdFhEztuO8D4uIZbXlxRHxTxFxQ0TcW7UMzoyIH1Svc0VE7FHb/+kRcVVErImI30XEYYO81uKIeEfVheDuiPhSREyqbX9h9XtcUz3nAf2OfXtE3ADcO0iSfD7w8tryy4Gv9Itj9+q8bo+I5RHxwYgYHxGPB84FnlG9J2tqh+1RtbzeExG/iohH1Z5vsPdp34j4aXXc5cBW36OImAs8CvhVbfX/Bb6SmZ/KzHsyc3Vmvgv4NfDe/s+RxXcpXwr2B/4KuDozf1ttX52ZX87Me7YWx7bKzHszc0FmLs7Mvsz8L+BW4GlbOeQVwL9n5k2ZeTfwAeCVtefbAFwHDOvdFEkPMkGW1Ky3AgdUSeqzgNcAr8gyX/3HgMcATwYeDcwB3gMQEQdRErB/ArqAZwOLm3i9Z1f/dlWtuVfXN0bEdOAS4NPAw4FPApdExMNru50MvArYC5gIvG0bz3lrXgw8n3LOxwI/AN5JSe7GAW+sYpxTxfhBYHr1+t+OiD0Hee5TgCMpieBjgHdVz/VU4DxKC+rDgc8DF/e79X4ScAzld7ZpK8//XeDZEdEVEV3Asyitr3VfBjZR3sunUBKx12bmH4HTKQnl1Mzs6vfa7wP2ABYBH6riHup9+iol2ZtBSQRfMcjv5knALY1zi4jJwCHANwfY90IGSCAjYlxE/C3lWryRkmwfGRHvi4hn9vt9/oWI+Fz1BWWgnxsGO7b2HDMp7+1NW9nlCcDvasu/A2b2u7b/CBzYzOtJ2nYmyJL6+26/D/3XAWTmeuBllATnAuCMzFwWEQG8Dnhz1fp2D+WW9YnV870GOC8zL69az5ZnZs8wxHkM8KfMPD8zN2Xm14AeSsLa8KXM/J/MvI+SMD15GF4X4F8zc2VmLgd+DvwqM3+bmfcDF1GSSii/r0sz89Lq3C8HFlK6NWzNZzLztsxcTUkyT6rWvw74fGb+KjM3Z+aXgfuBp9eO/XR17H2DPP8G4PvA31Heo4urdcCW5O1o4E1Vy+cq4GwefD+35juZ+esqef1PHvxdb/V9qlqE/wp4d2ben5k/q2Lbmi6g3rI7nfI5dvsA+94O1L+IzK5avHspLcunZubNmflz4EXAUymJ/F0R8cmIGD9QAJn5D5nZtZWfAwY6pi4iHkb5/Xx5kL+DqcCfa8uNx/V+0fdQfh+SWmCwfmqSxqa/ycwrBtqQmb+OiFsoLbKNfpp7ApOB60quDEAAjQTjEcClLYhzNrCk37ollNbrhjtqj9dTEo/hsLL2+L4BlhuvMw84ISLqSfvDgJ8M8ty31R4voZxn47leERFn1LZPrG3vf+xgvgJ8hPI+vb3ftnlVjLfX3s9xTTz31n7Xg71Ps4G7M/PeftsesZXXuJuHJol3A33A3pSku25v4M7a8orM7B7oSTPzB8APImIccDilRfpmSiv9sKme/3xgIzBY3/51lL7SDY3H9S8Hu1H6k0tqAVuQJTUtIl4P7AKsAP65Wt1LSQqfUGtJ2702wO02SneBgdxLSa4b6qW7hqqqsIKSzNXNBZYPcdxIug04v18r45TM/Oggx9STw7mU82w814f6PdfkqkW2oalKFJRW772BmUD/ihS3UVqmZ9ReZ1pmNsqKNfsaDYO9T7dT+i5P6bdta24AHtnoX10l1lcDJwyw70uBn25LoFUr/4+AHwNPHGifKP3r123lZ2tdJqjutPw75Xf+4sx8YJBQbuKh3ScOBFZm5l21dY/nod0wJA0jE2RJTYmIx1D60r4MOBX454h4cmb2AV8Ezo6Ivap950QZiQ8lKXhVRDyv6v85Jx4swXU9cGJEPCwi5gMvqb3knZTWwUduJaRLgcdExMlRSpX9HWXQ1X8N31nvsAsoXQmOrAa5TYoy6G/AlszK6yOiu+q7+07gG9X6LwKnR8TBUUyJiGNiO8qRVf3GjwWOqx7Xt91OqQrxiYiYVr1nj4pS7QFKa3l3RExs8uW2+j5l5hJKl5P3RcTEiDiUh3aR6R/3MuBPwEG11WdSWtbfGBG7RcQeUWoyP5vSSj6oKANIT6yOi6rP/HOAa7YSw+n9qrzUfwarTXwOJak9doguMFBa+F8TpcrGHpR+6P9Ri3kXygC/y4c6P0nbxwRZUn/f79cqdlHVYncB8LHM/F1m/omSvJ1ffVi/nTIw65qIWAtcATwWSrcMykC5syl9KX/Kgy2K76a0Lt9NGeD11UYQVZ/nD1HKda2JiHpfW6rWtBdSBg/eRWnRfmFm9g7/r2T7ZOZtwPGU39WdlNbZf2Lw/3u/SklQb6l+Plg910JKP+TPUH5fi6hVNtiO2G7KzK21eL6c0n3jD9VrfYvS4gyldfUm4I6IGPJ33cT7dDJwMLCa0jf4KwM9T83nKV/QGs//C8qgxhdRWqRXUwb6PTczbxwqvur8XkdJvNdSrvOPZ+Z/NnFsUyJiHmVw5ZMpv7fG39Yp1fa51fLc6pz+m1Kd4yeULidLeGhFjuOAKzNzBZJaIvo1HkiS2iQiFlOqRQzYB1xbWk9/Czyvau3uv/1AShJ/cmb+cKTjGwkR8SvgNZn5+3bHInUqW5AlSaNGVe1i/4GS42r774C/AZ4Ug0+YMmpl5sEmx1JrdeR/HpKksasq3fbzdschafRqaQtyRBwVZc77RRFx5gDbT4kyG9UNUWaFOrC2bXFE3Bhl1qiFrYxTknYGmbmP3Sskqf1a1ge5KrL+P5TZppYB11Lmuv9DbZ9DgD9m5t0RcTSwIDMPrrYtBubvTANuJEmS1Pla2cXiIGBRZt4CEBFfp4zm3pIgZ+ZVtf2vAQYrfTSkGTNm5D777LMjTyFJkqQx4rrrruvNzD37r29lgjyHh868tIxSymdrXgP8oLacwGURkZTpVb8w0EERcRpwGkB3dzcXXHABs2fPpre3l40bNzJv3jyWLFnCtGnTmDBhAqtXr2bOnDmsXLmSvr4+uru7Wbp0KV1dZcbONWvWMHfuXJYtW8a4ceOYOXMmy5cvZ/r06WzatIm1a9duec6JEycyY8YMVqxYwYwZM9iwYQPr1q3bsn3SpEl0dXVxxx13sNdee7Fu3TrWr1+/ZfvkyZOZOnUqq1atYtasWaxZs4YNGzZs2T516lQmTZpEb2+v5+Q5eU6ek+fkOXlOnpPnNMznNGXKlP4zfZb8soVdLE4AjszM11bLpwIHZeYZA+x7OPA54NDGTEERMTszV1QTD1wOnJGZPxvsNefPn58LF9pdWZIkSUOLiOsyc37/9a0cpLeMh06Z2s2DU6bWAzsA+Dfg+Po0mo0C6Jm5CriIh86cJEmSJLVEKxPka4H9ImLfakrSE4GL6ztUswZ9Bzg1M/+ntn5KY/rUiJgCHAFY81GSJEkt17I+yJm5KSLeAPwQGA+cl5k3RcTp1fZzgfcADwc+FxEAm6pm7pnARdW6CcBXq6k3JUmSpJbqqKmm7YMsSZKkZrWjD7IkSZI06pggS5IkSTUmyJIkSVKNCbIkSZJUY4IsSRrzFixYQEQM+bNgwYJ2hyppBFjFQpKkfg477DAArrzyyrbGIam1rGIhSZIkNcEEWZIkSaoxQZYkSRph9nvfubVsqmlJkiQNbMGCBQ9Jfu33vnOxBVmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZDXFguaSJGmscKIQNcWC5pIkaaywBVmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqaWmCHBFHRcTNEbEoIs4cYPspEXFD9XNVRBzY7LGSJElSK7QsQY6I8cBngaOB/YGTImL/frvdCjwnMw8APgB8YRuOlSRJkoZdK1uQDwIWZeYtmbkR+DpwfH2HzLwqM++uFq8Bups9VpIkSWqFCS187jnAbbXlZcDBg+z/GuAH23psRJwGnAbQ3d1NT08Ps2fPpre3l40bNzJv3jyWLFnCtGnTmDBhAqtXr2bOnDmsXLmSvr4+uru7Wbp0KV1dXQCsWbOGuXPnsmzZMsaNG8fMmTNZvnw506dPZ9OmTaxdu3bLc06cOJEZM2awYsUKZsyYwYYNG1i3bt2W7ZMmTaKrq4s77riDvfbai3Xr1rF+/fot2ydPnszUqVNZtWoVs2bNYs2aNWzYsGHL9qlTpzJp0iR6e3t3unNav349EydOZOnSpR1zTp34Po3mc/rwhz/M2WefPeR/NO985zs59dRTR8U5deL71KnntH79eiZNmkRPT0/HnFMnvk+ddE4PPPAAfX199PT0dMw5jYb3aWsiM4f8ANoeEXECcGRmvrZaPhU4KDPPGGDfw4HPAYdm5l3bcmzd/Pnzc+HChcN9KhrAYYcdBsCVV17Z1jg0dnjNaSR5vWmkec21R0Rcl5nz+69vZQvyMuARteVuYMUAgR0A/BtwdGbetS3HSpIkScOtlX2QrwX2i4h9I2IicCJwcX2HiJgLfAc4NTP/Z1uOlSRJklqhZS3ImbkpIt4A/BAYD5yXmTdFxOnV9nOB9wAPBz4XEQCbMnP+1o5tVaySJElSQyu7WJCZlwKX9lt3bu3xa4HXNnusJEmS1GrOpCdJkiTVmCBLkiRJNSbIkiRJUo0JsiRJklRjgixJkiTVmCBLkiRJNSbIkiRJUo0JsiRJklRjgixJkiTVmCBLkiRJNSbIkiRJUo0JsiRJklRjgixJkiTVmCBLkiRJNSbIkiRJUo0JsiRJklRjgixJkiTVTBhqh4joBk4EngXMBu4Dfg9cAvwgM/taGqEkSZI0ggZNkCPiS8Ac4L+AjwGrgEnAY4CjgH+JiDMz82etDlSSJEkaCUO1IH8iM38/wPrfA9+JiInA3OEPS5IkSWqPQfsgD5QcR8QeEXFAtX1jZi5qVXCSJEnSSGtqkF5EXBkR0yJiOvA74EsR8cnWhiZJkiSNvGarWOyemWuBFwFfysynAX/durAkSZKk9mg2QZ4QEXsDL6UM2JMkSZI6UrMJ8vuBHwKLMvPaiHgk8KfWhSVJkiS1x5B1kAEy85vAN2vLtwAvblVQkiRJUrsM2oIcEe+qBuZtbftzI+KFwx+WJEmS1B5DtSDfCHw/IjYAvwHupEwUsh/wZOAK4MMtjVCSJEkaQYMmyJn5PeB7EbEf8Exgb2AtcAFwWmbe1/oQJUmSpJHTbB/kP+GgPEmSJI0BzVaxkCRJksYEE2RJkiSpxgRZkiRJqmkqQY6Ix0TEjyLi99XyARHxrtaGJkmSJI28ZluQvwi8A3gAIDNvAE5sVVCSJElSuzSbIE/OzF/3W7dpuIORJEmS2q3ZBLk3Ih4FJEBEvAS4faiDIuKoiLg5IhZFxJkDbH9cRFwdEfdHxNv6bVscETdGxPURsbDJOCVJkqQd0lQdZOD1wBeAx0XEcuBW4GWDHRAR44HPAs8HlgHXRsTFmfmH2m6rgTcCf7OVpzk8M3ubjFGSJEnaYc1OFHIL8NcRMQUYl5n3NHHYQcCi6lgi4uvA8cCWBDkzVwGrIuKYbY5ckiRJaoGmEuSI6AJeDuwDTIgIADLzjYMcNge4rba8DDh4G2JL4LKISODzmfmFrcR2GnAaQHd3Nz09PcyePZve3l42btzIvHnzWLJkCdOmTWPChAmsXr2aOXPmsHLlSvr6+uju7mbp0qV0dXUBsGbNGubOncuyZcsYN24cM2fOZPny5UyfPp1Nmzaxdu3aLc85ceJEZsyYwYoVK5gxYwYbNmxg3bp1W7ZPmjSJrq4u7rjjDvbaay/WrVvH+vXrt2yfPHkyU6dOZdWqVcyaNYs1a9awYcOGLdunTp3KpEmT6O3t3enOaf369UycOJGlS5d2zDl14vvUSee0YcMGJkyYQE9PT8ecUye+T51yTuvXr2fSpEn09PR0zDl14vvUSef0wAMP0NfXR09PT8ec02h4n7YmMnPITDUirgKuAW4E+rZksJlfHuSYE4AjM/O11fKpwEGZecYA+y4A1mXmWbV1szNzRUTsBVwOnJGZPxsszvnz5+fChXZXHgmHHXYYAFdeeWVb49DY4TWnkeT1ppHmNdceEXFdZs7vv77ZPsiTMvMt2/iay4BH1Ja7gRXNHpyZK6p/V0XERZQuG4MmyJIkSdKOaraKxfkR8bqI2Dsipjd+hjjmWmC/iNg3IiZS6iZf3MyLRcSUiNit8Rg4Avh9k7FKkiRJ263ZFuSNwMeBf6Eq9Vb9+8itHZCZmyLiDcAPgfHAeZl5U0ScXm0/NyJmAQuBaUBfRLwJ2B+YAVxU9XWeAHw1M/97W09OkiRJ2lbNJshvAR69rSXXMvNS4NJ+686tPb6D0vWiv7XAgdvyWpIkSdJwaLaLxU3A+lYGIkmSJO0Mmm1B3gxcHxE/Ae5vrByizJskSZI06jSbIH+3+pEkSZI6WrMz6W213rEkSZLUSQZNkCPiwsx8aUTcyIPVK7bIzANaFpkkSRpz9jnzknaH0BZ33HIXMHbPf/FHj2l3CA8xVAvy2dW/L2x1IJIkSdLOYKgE+bPAUzNzyUgEI0na+YzFFi1b83au1jxppA1V5i1GJApJkiRpJzFUC/KciPj01jZa5k2SJEmdZqgE+T7gupEIRJIkSdoZDJUg32WJN0mSJI0lQ/VB3jgiUUiSJEk7iUET5Mx8+kgFIkmSJO0MhmpBliRJksYUE2RJkiSpZqhBeltExHhgZv2YzFzaiqAkSZKkdmkqQY6IM4D3AiuBvmp1Age0KK5RY6zOsuQsU84yJUlSp2q2Bfkfgcdm5l2tDEaSJElqt2b7IN8G/LmVgUiSJEk7g2ZbkG8BroyIS4D7Gysz85MtiUqSJElqk2YT5KXVz8TqR5IkSepITSXImfk+gIjYrSzmupZGJUmSJLVJU32QI+KJEfFb4PfATRFxXUQ8obWhSZIkSSOv2UF6XwDekpnzMnMe8Fbgi60LS5IkSWqPZhPkKZn5k8ZCZl4JTGlJRJIkSVIbNV3FIiLeDZxfLb8MuLU1IUmSJEnt02wL8quBPYHvABdVj1/VqqAkSZKkdmm2isXdwBtbHIskSZLUdoMmyBHx/zLzTRHxfSD7b8/M41oWmaQB7XPmJe0OoS3uuKXMdD8Wz3/xR49pdwiSNKYM1YLc6HN8VqsDkSRJknYGgybImXld9fDJmfmp+raI+Efgp60KTJIkSWqHZgfpvWKAda8cxjgkSZKkncJQfZBPAk4G9o2Ii2ubdgPuamVgkiRJUjsM1Qf5KuB2YAbwidr6e4AbWhWUJEmS1C5D9UFeAiwBnjEy4UiSJEnt1VQd5Ii4hwfLvE0EHgbcm5nTWhWYJEmS1A5NDdLLzN0yc1r1Mwl4MfCZoY6LiKMi4uaIWBQRZw6w/XERcXVE3B8Rb9uWYyVJkqRWaLaKxUNk5neB5w62T0SMBz4LHA3sD5wUEfv32201ZYa+s7bjWEmSJGnYNdvF4kW1xXHAfAaYWa+fg4BFmXlL9RxfB44H/tDYITNXAasiov80UUMeK0mSJLVCUwkycGzt8SZgMSVhHcwc4Lba8jLg4CZfr+ljI+I04DSA7u5uenp6mD17Nr29vWzcuJF58+axZMkSpk2bxoQJE1i9ejVz5sxh5cqV9PX10d3dzdKlS+nq6gJgzZo1zJ07l2XLljFu3DhmzpzJ8uXLmT59Ops2bWLt2rVbnnPixInsPTk5cHofi9YGu0+EPSclV60cxyEz+1i7MVh6b/DEPfroWTOOvXZNpu/y4PbV9wer7gse19XH7+8ex9wpybSJD26/c0Pw543w6GnJ71aP49HTkikTHtx++/rg/s2wz27Jb3rH8YQ9kgnj4Lre4KA9+7jt3gDgEVOSX985jqfNSDb1wU13B0+d0cfie4JdxsPekx98zns3BYvWxpDntHEXWL8JDtqzr2POaVvep56eni3XwdSpU5k0aRK9vb0jcu0d1b25Jee0s79PF02EDZvhqO7NHXNOzb5PPT09zJo1izVr1rBhw4YRv/aO6t7c0r+nnfF9unoXWLuxXG+dck7b8j4tXbqUqVOnsmrVqhG/9o7q3jxi/5fvTO/TNybAhOAhf2+j/Zy25X267777WLJkCZMnTx7Ra29rInOohuDtExEnAEdm5mur5VOBgzLzjAH2XQCsy8yztvXYuvnz5+fChQuH90SGsM+Zl4zo6+0s7vhq6RY+6+SPtjmS9lj80f43PUaO19zYu+baeb3B2LzmxvL1Bv4f1w5ec+255iLiusyc3399U32QI+LLEdFVW94jIs4b4rBlwCNqy93AimZebwePlSRJkrZbs4P0DsjMNY2FzLwbeMoQx1wL7BcR+0bEROBE4OIhjhmOYyVJkqTt1mwf5HERsUeVGBMR04c6NjM3RcQbgB8C44HzMvOmiDi92n5uRMwCFgLTgL6IeBOwf2auHejY7TlBSZIkaVs0myB/ArgqIr5FqV7xUuBDQx2UmZcCl/Zbd27t8R2U7hNNHStJkiS1WlMJcmZ+JSIWUmofB/CizLTkmiRJkjrOtkwUMp0yvfS/AndGxL4tikmSJElqm2arWLwXeDvwjmrVw4ALWhWUJEmS1C7NtiD/LXAccC9AZq4AdmtVUJIkSVK7NJsgb8wyo0gCRMSU1oUkSZIktU+zCfKFEfF5oCsiXgdcAfxb68KSJEmS2qPZKhZnRcTzgbXAY4H3ZOblLY1MkiRJaoOmEuSIeE1m/jtwebU8PiLem5nva2l0kiRJ0ghrtovF8yLi0ojYOyKeCFyDg/QkSZLUgZrtYnFyRPwdcCOwHjgpM3/Z0sgkSZKkNmi2DvJ+wD8C3wYWA6dGxOQWxiVJkiS1RbNdLL4PvDsz/x54DvAn4NqWRSVJkiS1SVNdLICDMnMtQFUP+RMRcXHrwpIkSZLaY9AW5Ij4Z4DMXBsRJ/Tb/KqWRSVJkiS1yVBdLE6sPX5Hv21HDXMskiRJUtsNlSDHVh4PtCxJkiSNekMlyLmVxwMtS5IkSaPeUIP0DoyItZTW4l2rx1TLk1oamSRJktQGgybImTl+pAKRJEmSdgbN1kGWJEmSxgQTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSakyQJUmSpBoTZEmSJKnGBFmSJEmqMUGWJEmSalqaIEfEURFxc0QsiogzB9geEfHpavsNEfHU2rbFEXFjRFwfEQtbGackSZLUMKFVTxwR44HPAs8HlgHXRsTFmfmH2m5HA/tVPwcD51T/Nhyemb2tilGSJEnqr5UtyAcBizLzlszcCHwdOL7fPscDX8niGqArIvZuYUySJEnSoFqZIM8BbqstL6vWNbtPApdFxHURcVrLopQkSZJqWtbFAogB1uU27PPMzFwREXsBl0dET2b+7C9epCTPpwF0d3fT09PD7Nmz6e3tZePGjcybN48lS5Ywbdo0JkyYwOrVq5kzZw4rV66kr6+P7u5uli5dSldXFwBr1qxh7ty5LFu2jHHjxjFz5kyWL1/O9OnT2bRpE2vXrt3ynBMnTmTvycmB0/tYtDbYfSLsOSm5auU4DpnZx9qNwdJ7gyfu0UfPmnHstWsyfZcHt6++P1h1X/C4rj5+f/c45k5Jpk18cPudG4I/b4RHT0t+t3ocj56WTJnw4Pbb1wf3b4Z9dkt+0zuOJ+yRTBgH1/UGB+3Zx233ll/vI6Ykv75zHE+bkWzqg5vuDp46o4/F9wS7jIe9Jz/4nPduChatjSHPaeMusH4THLRnX8ec07a8Tz09PVuug6lTpzJp0iR6e3tH5No7qntzS85pZ3+fLpoIGzbDUd2bO+acmn2fenp6mDVrFmvWrGHDhg0jfu0d1b25pX9PO+P7dPUusHZjud465Zy25X1aunQpU6dOZdWqVSN+7R3VvXnE/i/fmd6nb0yACcFD/t5G+zlty/t03333sWTJEiZPnjyi197WRGb/nHV4RMQzgAWZeWS1/A6AzPxIbZ/PA1dm5teq5ZuBwzLz9n7PtQBYl5lnDfaa8+fPzzyyle8AAB05SURBVIULR3Y83z5nXjKir7ezuOOrZczlrJM/2uZI2mPxR49p22t7zY29a66d1xuMzWtuLF9v4P9x7eA1155rLiKuy8z5/de3sovFtcB+EbFvREwETgQu7rfPxcDLq2oWTwf+nJm3R8SUiNitCnwKcATw+xbGKkmSJAEt7GKRmZsi4g3AD4HxwHmZeVNEnF5tPxe4FHgBsAhYD7yqOnwmcFFENGL8amb+d6tilSRJkhpa2QeZzLyUkgTX151be5zA6wc47hbgwFbGJkmSJA3EmfQkSZKkGhNkSZIkqaalXSwkSZL0l9b84j/58y+/9hfrl3zshQ9Z3v2ZJ9F16CkjFZYqJsiSJEkjrOvQU0x8d2J2sZAkSZJqTJAlSZKkGhNkSZIkqcYEWZIkSaoxQZYkSZJqrGIhSRrzLLklqc4EWZI05llyS1KdXSwkSZKkGhNkSZIkqcYEWZIkSaoxQZYkSZJqTJAlSZKkGqtYqCmWQJIkSWOFCbKaYgkkSZI0VpggS9opeddCktQuJsiSdkretZAktYuD9CRJkqQaE2RJkiSpxgRZkiRJqjFBliRJkmpMkCVJkqQaE2RJkiSpxgRZkiRJqjFBliRJkmpMkCVJkqQaE2RJkiSpxgRZkiRJqjFBliRJkmpMkCVJkqQaE2RJkiSpxgRZkiRJqjFBliRJkmpamiBHxFERcXNELIqIMwfYHhHx6Wr7DRHx1GaPlSRJklqhZQlyRIwHPgscDewPnBQR+/fb7Whgv+rnNOCcbThWkiRJGnatbEE+CFiUmbdk5kbg68Dx/fY5HvhKFtcAXRGxd5PHSpIkScOulQnyHOC22vKyal0z+zRzrCRJkjTsJrTwuWOAddnkPs0cW54g4jRK9wyAdRFxc9MRakfNAHrbHUQ7xMfaHcGYNSavOa+3thmT1xt4zbWR19zImzfQylYmyMuAR9SWu4EVTe4zsYljAcjMLwBf2NFgte0iYmFmzm93HBo7vOY0krzeNNK85nYerexicS2wX0TsGxETgROBi/vtczHw8qqaxdOBP2fm7U0eK0mSJA27lrUgZ+amiHgD8ENgPHBeZt4UEadX288FLgVeACwC1gOvGuzYVsUqSZIkNUTmgF17pSFFxGlVFxdpRHjNaSR5vWmkec3tPEyQJUmSpBqnmpYkSZJqTJAlSZKkGhNkDSoivEYkSdKYYvKjAUXEXIDM7DNJVqtFxNSI2K3dcWjsioiBJqiSNEaZ+GhrFkTELWCSrNaKiGnAR4HjqsfSiGnU209HrEuqMenRQzRaUTLz1cBNEfGTatkkWS2RmWuBPwLPBY4wSdZIiYhDgY8De7Y7FnW2xmdrRIxvdyxqjgmP+mv8ET8dWAg8NiJ+DibJGn6N6ykzPwv8CjgWk2SNgIh4KmWiqvMyc7ldLNQqERGZmRFxLHBWRHwxIh7Z7rg0OJMdARARu8CWJPjJwDeAyyiteqsi4tradq8b7bDqQ6MvImYAVMXxLweOxyRZLVL7/+vvgJcC3REx3i4WapUqOT4cWAB8Gnga8P6IeFhbA9OgTHREREwHPhgRB1er7gcuy8yrM7MnM18M9EXEr6Akye2KVZ2j+tA4BviPiPhQRBydmRcAlwAvBF4QEbu3N0p1iloL8SyAzHw78DngSOAx7YpLnavfXYnHA++mXGv3A+/MzAdscNp5+cYIYAawDjg1Ip4CrAWeXfXPazgP2L3qeiHtsIg4DPgI8E/AAcA/VdOsfh34CXAcsGv7IlQnqb6QHQ18KyI+EhGfz8xPArcC74qIJ7U5RHWYRiNARHwQuA94LfAvwMsyc2lEnEr5P1A7IRNkkZn/A/wWmAycQflDfitwcUS8MiJOoSQrL8jMa9oXqTpBRIyLiImU24ynAnOB2cD3gL+NiNdl5peBt2bmHW0MVR2k6nP8EeDVlP/jDqi6VrwNuBN4X0RMaWeM6izVl67XARcAVwKPpHRfXBkRB1EaB65sV3waXNjtStVt7vcCVwDzqVpUgCcCfwPsBXw9M7/XtiA16tUGqkzIzE3VuimUD4//k5l3RMSVwGLgPZm5tH3RarSrDQDtq5afBuwPLKeUFfy7zLw1Ip6QmTdFxGMz8+b2RaxOEhEPp3yOHgXMz8x7I+II4B8oXSxmAp/IzO83/m9sY7gagAnyGFcNEvgccGFmXl4N0DsO6AY+lJlLaomNf8TaLrVr6PnAScD1lC9il1DuXpwFXAN8BnhbZt7YtmA16lWTzjweuA44GpgC3EjpurMWOCAz76u6+fw98PrMXN2mcNUh+n9GVl0S304pY/nRzFwbETMpXRq7GtVT/FzdOdnFYozLzAco/TyPrZavp3yoHELpl9dFVfrNP2Jtr1pyfBZwIXA48JKqde9twFuArwHnmhxrR0TE4yhJySnAj4FPAL2Z+QfKIKle4NCq5NanKHfHTI61Q6o7YxkRR0TEmRHxIUpi/DlgIvCmiNgtM1dm5r2ZuRz8XN2Z2YI8htVa9Z5E6Xt8bWZ+MSL2p3zAfDAz/9TeKDVaVS0luzS6SkTE64GfA9OAs4EXZeZtEbEr5QNkSmausEVF26sqDfhflH6fvZRSlSuAE4AHgIcBL6b0fb8d+FZmXuI1p+0VEXtm5p3V4+cAXwDeA7wcWEVpFOgCXkm55hZYCWp0MEFW43bkXwNvADYAjwX+MTMvaWtgGtUi4tOUklr/nJmLqwT5DODPwHGZuTIijgIeDZyTmZvbGK46QFWy8jLKF7FJwMco4yseAD6SmbcOcIzJsbZLRDyW8oXshZl5c0S8D7g/Mz9cbf8EsF9mHhcRzwNWZOYf2xiytoFdLMaQrc0UlZn3ZOZFlG4WH6YkLybH2i6N6ywz30hJTN4aEXsD36T0A726So4PBf4f8CeTYw2HqqvElylf9jdn5mLgdEqFnrdFxOsi4taI2Kd2nZoca5tVg0BfAPwbkFUCfCswPSL2AMjMtwKTImJWZv7I5Hh0MUEeA2qJ8fh+68fV98nM9Zn5y6qv3lYTaqkZEXEI5Zr7W+BLlK4VnwVmRJm+/CzgnzLzh+2LUh1oCfB64OSIOCMz76eUdrsLeArw5sxcbGKsHVF1k7gFeAlwMaVLz3WUO7DPi4hHVt0XZwET2haotptdLDpcrZ/xcyl9724DfpOZl9W3V48nZOamKnFOP0C0LSJiYmZurB4/jtJi/HeUslrnAvcC761Gbs+kXGOrvMWtHVH7P+7JwGZgTdW3/VDK7e93ZOY51Rf+XTJzg9ecdkTtmtsb+G9KXe0Tq65kL6R81u4O7A18LDO/28ZwtZ1sQe5w1R/xoZSZ8K6hfJs9NiL+obEdoCqYv6m6NfQFYLd2xazRp+r7+aXaRAubKfWM78zMP2fmScCTgK9GxL7VSO5V4C1u7Zjq/7ijga9Tuon9IiKelJm/oJR4+0xEvD6LDY1j2hiyRrFactxFmWDmSEq3nnMi4q8y878olXlOp8yY913vxo5OJshjw+OBT2Xm+cAC4HLgwIiYAVtajjdXf/AXAl/NzLVti1ajTtX380xgdtWSt4hSb/apVWUBgE9S+oI+rD1RqhNFxBMoE38cQymrNQm4OiLmZ+bVwLMBq/FoWNS+kF1AmQjkyMw8B7gK+JeIOJhyF2NVZv5v45j2RaztZYLcgQb4troBODUi5mXmGsoo70dTbv9QtRw3kuP3Z+aPRzRgdYTMvA14IfAtyvTRX6FUrXhTRJxBaVF5fZapzaXhspxSxm0O8K7MnAmcA/w6Ip5Sjau4zFY8DYcoU0R/nNJK/CTguIgYl5kfAH5HqZrilOUdwI7jHaj6hnswcAClD963gXnAWyLiM9VuuwGN/qLjKcnxhzPz520IWR0iM8+OiD7KNfc3lBaWw4EDKX3xft3O+NR5qi/9ayLiSOD71epfAPOB6bX9bMXTdqv1W38E5Y5FV/X4pZnZFxHdmfneiHi0d2A7g4P0OlBEHE5pQfkDpZX4nZRBBM+nVBS4B/h0Zn67dswemXl3G8LVKFX1Wx+wPFtEvAV4KfCazLypsa+Do7Sjqta6v5hoISJOBZ5L6d5zHOXa+73XnHZE///nqhbk/6gWn5OZd1YD854PvL3Rz12jnwlyh6kKl38CeE9m/qZKVA4GPp+ZP46IhwNk5l3VLccY6MNG2pqImJsPzo43ITM3bWW/twMvA54J3GutY22viJgLnJCZn6iW/yJJrgYYnwA8BvhpZn7/L59Jak51Pa2tvtg/h3JH4gbKbHgnArsCX6OMqTiX0r3Ha66DmCB3kIh4GCUheTvwlXxwNp9/pBQ0/0SjvJu0vSLiPOCwzHxktTxYkjwvM5eMaIDqOBGxP6Vs4PmZ+dFq3ZYkeSsJsy3H2i5VNZ73UGpn/wr4DPADSh3tK4E1wCbgFZSE+SuZ+T2vuc5igtxhqsF2xwHPorSiXFCtfzPws8y8rp3xafTqVzP7+8DUzDy8Wv6LJLl+a3Jrt8WlodTKaj0f+BTlbtinqm0Pua76X4cmLNoeETGR8jn6DOBxwGcz89KqQs8LKVUqPhMRuwF9mXmv11rnsYpFh6kGrFxCGaTyzIh4dbX+bJNj7aAAiIinAwuBx0aZEa9RCWXLoN9an+OuiHiGybG2R5UAZ9XH8xWUmcpOj4h3Q5nNLKoZQWu13Lsi4qyIeJgJi7ZHlgmPvg/8lDKg/eXV9XU95bP1ZRHx8My8JzPvrY7xWuswJsij0FDlijLzLkr1it9QkuTZIxKYOlJE7AJbkpEnA9+glAp8LrAqIq6ttm+KiAm15Hh3ypc1q+Vom0TE7hExtbrmplPqt38eeBVwEnB0RLwVtlyX9Vru3wYuzswH2hW/Rr8sU5T/APgwpUvFP1eblgF9wMQ2haYRYoI8ykTEJEpiQkTsX1Ws+AtVknwRZbDeihEMUR2kSk4+WJUNBLgfuCwzr87Mnsx8MdAXEb+CkiTXkuNvU0Z1WzpQTasmlnk78Orq8d3AKuDWqvvEDZTBUW+PiDNhy5ezPSjlKhdk5s/aE71Gs8bdiIbqS9ZPKF/0D4+I64CzgY9m5u1tCFEjyAR59JlMmQXvCsrUqlsdAJWZvZm5vLFsoXxthxnAOspEM0+hzI737CjTlzecB+xedb0gIqYCPwLel2W6X6lpVQ3ZmyiTzby0unV9E/CNqttEH/C/wL9Rbnc3+oxegLXctY0iYm6/uxH9k+T7gf8G/hW4Bnh3Zl7s52nnM0EeZbJM6buEMnjg1sy8BcrglMY+UYyvHu9eDdCzj5S2WZZZ735L+WJ2BqWe9luBiyPilRFxCmUwywsy85rqsG7gdSYq2laN/7cot7H3ofQ3PgV4N6WawG8j4m3Ap4Hv1r6A7QacnplXjmzE6gBTKXcrGncjBkqSH6B0K3t/1Q/Zz9MxwCoWo0xEPC4zeyLiucAxlA+Gt2TmuoiYkZm9tVHfjf54C0xWtD0i4hjK1KlXUOqA3kqZHe+JlJny9gK+npnfa1uQ6ijV3YkvAm8AjqfUmf11Zn4pIk6slldk5o/aGKY6wDZWSGns+5B/2xW7Ws8EeZSo/VFeDyzJzOMjYh5llrw+4FuUmcsWZObtVXJ8IfABk2Ntjyh1tT8HXJiZl1cD9I6jtBB/KDOX+GGh4RYRrwcelZlvqW5jvwp4OfBlyrV4b1sDVEdoJMBVhZQTgaQ0Anw1Mz/Qb58tVXkoDQTvcBBo57OLxejRqCTwZGDPiPhmlgkY3gdsphQyv7hKjncFvkdJYkyOtV2qD4BdgWOr5espZbYOAd5VfVhEtc3kWMPlRuCAiHhqFucBDwBPBx7e3tA02lkhRc0yQR4FIuLxwEkRsQ9AZh4CPDIiLszMFZn5BuB5mXlJdciewGsy86dtCVijXm0AyseASRHxumr5VkqS/H8zc431jdUCPcAvgWMj4oiIeAxVI0BWU5xL28MKKdoWJsg7qUaCEhGHAO8AjgSeFxGPqHZ5CfCSiPhatbyl5ExmLs3MRSMZrzpLrUV4MaUW6IkRcQlwMeU295/aFZs6W2auotwB66VM9/tF4NzMvLGtgWnUs0KKtoV9kHdiEXEs5fbPaZRyWy+j1GT8LrB3tXyFg1W0o4bqQxwRk4GnAHdn5h9GLjJ1usGuvShT+e6amavs564dUetH/BxKRZ59KDWNv02ZDOQI4D+A04GTM/PX1XEPByZn5m3tiFvtY4K8k6pqyZ4PfDwzr6rWvQB4EaUszaGUP+Kf+cGh7VUbZDehusXYWL9lBPdA15fXnHZU1adzU1WBZ8hrrH9VAWlbWSFF28IpYHdeSWk1ngJbPhwujYgHKLe9uzKzMcWviYq2WS05fi7w4oi4DfhNZl5WDU6JapDUlgS6qg+aXnPaVhGxJ/D0zPx+RBxNmbp3t4h4Uw48ocw4YHNE7JqZ95kcaxgcCPwgM38UET+mDMx7RdWj0Qopegj7IO+kqj/UC4FnRsTjq4TlEMokDWsbybG0varE91DKTHjXALMoA6P+obEdttyabAxU+QKl9rbUtGpMxYuB4yPidOBtwJsp19NnIuKIfvvXy2r9IiIePeJBqxNZIUVNswV55/YdSn+oz0fELyl1jt+YmSvbG5Y6yOOBT2Xm+RHxfeDZwDHx4KQzjZbjRl3tj1QDXaSm1GrJ/gcwiTLJTG9VNvD6iLgf+HB1rV1aS453B74JvNlBxxom9QopMyh3Y62QogHZgrwTy8zlwEcpI7mvp/Q5vmTwo6Stq5Vva9gAnBoR8zJzDWU61UdTBoHSLzl+f2b+eEQD1qgWEZOAZ1X/zgKWUJKUaRHx0qobz5eBc4GPV1/MNld3K74HvM+yWhouVkjRtnCQnjTGRMTBwAHAfwF/Bt5CqZ39mWqX/wROzcybI2I8pczbhzPzyjaEq1Gq+jL2MOAUSlnK/SmTzPRSBkk9ArgqM79V7T+nahRozKb3R7+QaUdYIUU7wgRZGkMi4nDgHOAPlFbidwL3Ac8H/ha4B/h0Zn67dswemXl3G8LVKBURMymTKvyfiHgR8K3q5zWZeU/VQnwq8Djg55n5NatUaLhYIUXDwQRZGiMi4rHAJ4D3ZOZvIuItwMHA5zPzx1W9TzLzrqr1L/zQ0PaIiAmUrjr3AqspdyyeDcwGzsnMnoh4FHACcFFm3ty2YDXqba1CCjBghZRaP/ddM/O+kY5Xo4N9kKUxICIeRrm9/WjgKIDM/CRwFWVa1SMy867MvKvalibH2l5VTe3/Bf4RuIIyhe83gPXAaRHxqmrbBSbH2hFWSFGrWMVCGgMy84GIuIgyYvtZEfGyzLwgMz9V1Ta+q80hqoNExGOAp1EGQn0EuIjShecc4GTgTZQ7GcvaFqRGPSukqJXsYiGNIVU3ihdS6n5eW9UBlXZYvV9nRJwA/E1mnlItfxbYFzgxM9dGxPTMXO3gKG2vqjLKwcCvKBVSngLMAY4BvgR8s6r1/lpKi/JzqtKVe1C+sL1rKxPUSIAJstRRmkk4qiT5RZQk+d2ZuWJEglPHi4inAd2Z+b2IOAeYVkuSvwg8Fngu0GcXHm0vK6RoJJggSx2ialF5ZjWN6v7AzMz8yVb2nQHs0vjQkHZElbBMoJQO/Cvg3yhdKz4HfCszv131g98vM//Qvkg12lkhRSPFBFnqEBExHXgl8AJgL8ot7luaPNZb3dpuEbF3Zt4eEXtRSgc+nlJKcB9KGcFXZOYDbQxRHcIKKRopJshSB4mIFwNfAa7IzOOrdROqqgKNlr5xtYEqr87Ms9sXsUaz6nraHfgqcDUlKV4PPECpqX00ZaDeYxwMpeFS3Y34CPBM4K8pEx39PbALcCOlP/L/dRCodoRl3qQOERGPqyb4OBZYFBFfiIip1XTRMxr71UocfQdY2K54NfpV5QDXUEpr/YkyQOoDwCuA2zNzAbC3ybGGS1Uh5SWUL16/pgy4u5NSIWUVpULKj0yOtaNsQZZGuUb3iIi4HliSmcdHxDzKre4+Sv+8l1L67d1eJccXAh/IzJ+3L3J1kmpa8knApyjX21XA8ZQZzTbbjUfbywopagcTZGmUi4hJmbmhenwVsDwzT4iI2ZQk+XnA2zLzkojYFfhvSg3an7Yvao02QyUc9YFQEXEi8KfMvG7EAlRHs0KKRpoJsjSKRcTjKeXafpKZi6t11wH/m5kvrZZnN0q5RcRcYKK3vLUtmq2Q0r9agK142lFWSFG7mCBLo0ytS8UhwOnAROBy4LLMvC0i9qVM8/uNzDzJJEU7alsqpNQHhVbLXn/ablZIUbs4SE8aZark+FjgXyn9Pb8EHAY8v0pkJgMfo7S0YHKiHZWZq4ElwDOAWxvJcVVyi+pxVFP5boqIroh4c3Ws15+2WXU9dQH/HhHvBp4F/BD4OPB14HfAicC89kWpTmYLsjTKRMRU4Hzg45l5VbXuBZTZ8aYChwInZ+bPbL3TcKgqpPRExHMplSp2A96SmesiYkY1hW/jzkYX8G3KoFAHgWqHVF16DgCOqP79I/Avmbk0ImZm5sq2BqiOZYIsjTIRMYUy0O79mXl5o99nRDwfWAx0Zea1bQ1SHcEKKdoZWCFF7WAXC2mUycx7KUnIMyPi8VVyfAjwVmCtybGG0S4AmflkYM+I+GZmLgHeB2wGPgNcXCXHuwLfAz5kcqxtUQ3EG0xm5r2Z+VrgNEoL8v2ZubmxseVBasyxBVkahSJiDmWA3nOAX1JaVd6YmZe0NTB1DCukaCRYIUU7KxNkaZSqulr8FTATWJyZv2pzSBrlrJCikWaFFO2sJgy9i6SdUdXV4sp2x6HOUauQsoByK3sG8DIgI+K7PFgh5YrG/m0KVR2imvWuUSHlinqFlEYyXHXBGNeokAK8KjPP9vpTK9kHWZIEbKmQ8mrgjMy8LjN/CHwNOIQyMcMPgR9Ut8OH6jcqDamqkPJt4FhgUUR8ISKmVsnwjMZ+1WC8RoWUhe2KV2OHLciSpIaktBpPgS39Pi+NiAfoVyHF1jvtiFr3iK9HRKNCyv9SKqR8PCK+Bbw0IvpXSLF8oEaELciSJMAKKRpRVkjRTs1BepKkLayQolazQopGAxNkSdJDWCFFw80KKRpt7IMsSXoIK6RouFkhRaONCbIkSWqp/hVSqnXjgRcBRwCHAidn5s9sPdbOwARZkiS1mhVSNKpYxUKSJLWUFVI02jhIT/r/7d09aFZXHMfx7w+0+IJTd+mmiJSE0sbBgg5asL5UOySODo4tUjoIgVbSwUEH3UUKDjWLglhFKCq6tWBC6pJFWtCljiWFDPJ3eK5wkJhI48uNfj/wwL3/e8557lkeftzncI8k6bXzDSlaSQzIkiTpjfANKVopDMiSJElSwzXIkiRJUsOALEmSJDUMyJIkSVLDgCxJkiQ1DMiSJElSw4AsST2VpJJcaM5XJXmc5OoS/YaS7GnOTyT5fhn3saz+krTSGJAlqb/mgK1J1nbnu4BHL9FvCNizZCtJ0oIMyJLUb9eBL7vjw8Avzy4kWZ/kfJI/kkwlOZDkA2ACGE0ynWS0a74lye0kD5J824zxXZL73edYUx9PMpvkN2DTa5+lJPWIAVmS+u0iMJZkDfAx0O48Ng7crKpPgZ3AKWA18AMwWVVDVTXZtd0MfAF8BvyYZHWST4AjwAiwDTiaZLirjwHDwCEGO59J0ntj1du+AUnSi1XVTJKPGDw9vvbc5d3A/mZ98Bpg4wuG+rWq5oH5JP8w2Op3O3C5quYAklwCPmfw8ORyVf3X1a+8uhlJUv8ZkCWp/64Ap4EdwIdNPcDXVTXbNk4yssAY883xEwa//1nkO+t/3akkvQNcYiFJ/XcemKiqP5+r3wC+SRKAJMNd/V9gw0uMewf4Ksm6JOuBg8Ddrn4wydokG4B9r2ISkrRS+ARZknquqh4CZxe49BNwBpjpQvJfwF7gFnA8yTRwcpFx7yX5Gfi9K52rqimAJJPANPA3g9AsSe+NVPkvmiRJkvSMSywkSZKkhgFZkiRJahiQJUmSpIYBWZIkSWoYkCVJkqSGAVmSJElqGJAlSZKkxlNNn6dBWElcngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Unique QPS values\n", + "qps_values = sorted(log_df[\"qps\"].unique())\n", + "\n", + "# Plot one chart per QPS\n", + "for qps in qps_values:\n", + " subset = qps_summary[qps_summary[\"qps\"] == qps]\n", + " \n", + " plt.figure(figsize=(10, 5))\n", + " plt.bar(\n", + " subset[\"method\"], \n", + " subset[\"Mean\"], \n", + " yerr=subset[\"StdDev\"], \n", + " capsize=5\n", + " )\n", + " \n", + " plt.title(f\"Execution Time per Method (QPS = {qps})\")\n", + " plt.xlabel(\"Method\")\n", + " plt.ylabel(\"Execution Time (s)\")\n", + " plt.xticks(rotation=45, ha=\"right\")\n", + " plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + " plt.tight_layout()\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodqpsexec_secs
0cut_no_dd_ideal1.00.029561
1cut_no_dd_ideal1.00.018340
2cut_no_dd_ideal1.00.170028
3cut_no_dd_ideal1.00.137045
4cut_no_dd_ideal1.00.019445
\n", + "
" + ], + "text/plain": [ + " method qps exec_secs\n", + "0 cut_no_dd_ideal 1.0 0.029561\n", + "1 cut_no_dd_ideal 1.0 0.018340\n", + "2 cut_no_dd_ideal 1.0 0.170028\n", + "3 cut_no_dd_ideal 1.0 0.137045\n", + "4 cut_no_dd_ideal 1.0 0.019445" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load the CSV file\n", + "df = pd.read_csv(\"CC+DD - experiment.csv\")\n", + "\n", + "# Extract logs with QPS and execution time from metadata\n", + "log_entries = []\n", + "\n", + "for _, row in df[[\"method\", \"qps\", \"method, label, submit_time, exec_secs\"]].dropna().iterrows():\n", + " qps = row[\"qps\"]\n", + " lines = str(row[\"method, label, submit_time, exec_secs\"]).split(\"\\n\")\n", + " for line in lines:\n", + " parts = line.split(\",\")\n", + " if len(parts) == 4:\n", + " method, label, submit_time, exec_secs = parts\n", + " log_entries.append({\n", + " \"method\": method.strip(),\n", + " \"qps\": qps,\n", + " \"exec_secs\": float(exec_secs.strip())\n", + " })\n", + "\n", + "# Create DataFrame\n", + "log_df = pd.DataFrame(log_entries)\n", + "\n", + "# Preview data\n", + "log_df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZhdZZX3/e8vhBAghBAjARIDOIstokZwNmorjuAsDjhL87RDO3Wr3Q6Fs4/Tq+2A2o1jK86Kgu0cnJXgjB0faSQhCRBCiCGEEJOs94+9K2zKVKoynJxU1fdzXXXl7OHss3adnTrr3Pu+152qQpIkSVJjUr8DkCRJkvYmJsiSJElShwmyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJElShwmypL1akqcm+dYefs37JvnjnnzNsSbJx5K8cTcdayDJp7azfb8kf0hy2O54vbEoyS+S3LHfcUgThQmyNMEluTTJ9UnWdX7e16dYjkpSSSYPrquq/6qqh+zm13lq51yvT7Kle/5V9cOqut3ufM1+aX+fV3Z/p0kmJ1mZZFSF8JM8M8mPehfliE4DflBVV3RiuleS7yW5NslfkpyT5Pad7Qs67+u1Sf6Y5Fmd7c9JsrjddmWSc5Mc1Ivgk9wmyYbtfQlo93tJkiva8zkryX6dze8AXt+L+CT9LRNkSQCPqqppnZ8X9DugXmqT7mlVNQ14GLCie/79jm9ndBPgbVhDc56DHg5c09uIdqt/AD45uJDknsC3gK8CRwBHA78FfpzkqM7zVrTv53TgFcBHkhyT5P7Am4EnV9VBwB2Az/Uw/vcDF2xvhyQnAq8EHgQcBdwSOKOzyznAA5Ic3qMYJXWYIEsaVpIPJvlCZ/ltSb6bxn5J3pFkadsCd2aS/Tv7npzk10nWJvnfJA9t11+a5O87+3Vvr/+g/XdN2/J3z6Gtl23L4QVtK9sFSe7V2bYwyRuS/LhtGfxWklk7cd4LkizrLF+a5J+T/DbJdUn+M8nsJN9oX+c7SQ7p7H+PJD9JsibJb5Is2M5rXZrkVW0XgmuSfDTJ1M72R7a/xzXtMY8d8txXJPktcN12kuRPAk/vLD8d+MSQOA5uz+vyJMuTvDHJPknuAJwJ3LN9T9Z0nnZI2/J6bZKfJ7lV53jbe5+OTnJ++7xvA8O+R0nmAbcCft5Z/X+BT1TVe6rq2qpaXVWvBn4BvG7oMarxFZovBccAdwd+WlW/arevrqqPV9W1w8Wxs5KcQvMF5bsj7PoM4D+r6qKqugZ4A/DMzjlsAC4EduvdFEnbZoIsaXteBhzbJqn3BZ4DPKOaOerfBtwWOA64NTAHeC1AkuNpErB/BmYA9wMuHcXr3a/9d0bbmvvT7sYkM4FzgfcCNwPeBZyb5Gad3Z4CPAs4FJgCvHwHz3k4jwMeTHPOjwK+AfwrTXI3CXhRG+OcNsY3AjPb1/9ikptv59hPBU6kSQRvC7y6PdZdgbNoWlBvBnwIOGfIrfcnA4+g+Z1tGub4XwHul2RGkhnAfWlaX7s+DmyieS/vQpOIPbeq/gc4nSahnFZVM4a89hnAIcDFwJvauEd6nz5Nk+zNokkEn7Gd382dgEsGzy3JAcC9gM9vY9/PsY0EMsmkJI+huRZ/R5Nsn5jkjCT3HvL7/BtJPtB+QdnWz2+387zpNN0iXra947fuCPyms/wbYPaQa/t/gDuP4liSdpEJsiSArwz50H8eQFWtB55Gk+B8CnhhVS1LEuB5wEva1rdraW5Zn9Ie7znAWVX17araUlXLq2rxbojzEcCfquqTVbWpqj4DLKZJWAd9tKr+X1VdT5MwHbcbXhfg36vqyqpaDvwQ+HlV/aqqbgC+TJNUQvP7Oq+qzmvP/dvAIppuDcN5X1VdVlWraZLMJ7frnwd8qKp+XlWbq+rjwA3APTrPfW/73Ou3c/wNwNeAJ9G8R+e06wBIMpumC8aLq+q6qloJvJsb38/hfKmqftEmr//Fjb/rYd+ntkX47sBrquqGqvpBG9twZgDdlt2ZNJ9dl29j38uB7heRI9oW71U0LcunVtUfq+qHwGOBu9Ik8lcneVeSfbYVQFX9Y1XNGObn2G09p/UGmlbhy7azz6BpwF86y4OPu/2ir6X5fUjqse31WZM0cTy6qr6zrQ1V9Yskl9C0yA7207w5cABwYZMrAxBgMMG4BXBeD+I8AlgyZN0SmtbrQVd0Hq+nSTx2hys7j6/fxvLg6xwJPCFJN2nfF/j+do7dTaCW0Jzn4LGekeSFne1TOtuHPnd7PgG8heZ9esWQbUe2MV7eeT8njeLYw/2ut/c+HQFcU1XXDdl2i2Fe4xpumiReA2wBDqdJursOB67qLK+oqrnbOmhVfQP4RpJJwANoWqT/SNNKv8uSHAf8PTd+cRrJOpq+0oMGH3e/HBxE011DUo/Zgixpu5I8H9gPWAH8S7t6FU1SeMdOS9rBnQFul9F0F9iW62iS60Hd0l0jVVVYQZPMdc0Dlo/wvD3pMuCTQ1oZD6yqt27nOd3kcB7NeQ4e601DjnVA2yI7aFSVKGhavQ8HZgNDK1JcRtMyPavzOtOrarCs2GhfY9D23qfLafouHzhk23B+C9xysH91m1j/FHjCNvZ9InD+jgTatvJ/F/ge8Hfb2idN//p1w/xcNMyhF9AMtlua5AqarjaPS/LLYfa/iJt2n7gzcGVVXd1Zdwdu2g1DUo+YIEsaVpLb0vSlfRpwKvAvSY6rqi3AR4B3Jzm03XdOmpH4AP8JPCvJg9r+n3NyYwmuXwOnJNk3yXzg8Z2XvIqmdfCWw4R0HnDbJE9JU6rsSTSDrr6++856l32KpivBie0gt6lpBv1tsyWz9fwkc9u+u/8KfLZd/xHg9CQnpHFgkkdkJ8qRtf3GHwWc1D7ubrucpirEO5NMb9+zW6Wp9gBNa/ncJFNG+XLDvk9VtYSmy8kZSaYkuQ837SIzNO5lwJ+A4zurX0nTsv6iJAclOSRNTeb70bSSb1eaAaSntM9L22f+/sDPhonh9CFVXro/w9Um/jDNl8Tj2p8zabpznDjM/p8AnpOmysYhNP3QP9aJeT/gbsC3Rzo/SbvOBFkSwNeGtIp9uW2x+xTwtqr6TVX9iSZ5+2T7Yf0KmoFZP0uyFvgOcDtoumXQDJR7N01fyvO5sUXxNTSJwzU0A7w+PRhE2+f5TTTlutYk6fa1pW1NeyTNoKeraVq0H1lVq3b/r2TntP1NT6b5XV1F0zr7z2z/7+2naRLUS9qfN7bHWkTTD/l9NL+vi+lUNtiJ2C6qquFaPJ9O033jD+1rfYGmxRma1tWLgCuSjPi7HsX79BTgBGA1Td/gT2zrOB0fovmCNnj8H9Ekmo+laZFeTTPQ74FV9buR4mvP73k0ifdamuv87VX1X6N47qhU1fqqumLwh6YLxYaqugqa6hzt/7V57f7/TVOd4/s0XU6WcNOKHCcBC6tqBZJ6LkMaEiRJe1CSS2mqRWyzD7i2tp7+CnhQ29o9dPudaZL4p1TVN/d0fHtCkp8Dz6mq3/c7FmkisAVZkrRXa6tdHLOt5Ljd/hvg0cCdsv0JU8asqjrB5Fjac8blHxJJ0sTSlm77Yb/jkDQ+2MVCkiRJ6rCLhSRJktQx5rpYzJo1q4466qh+hyFJkqQx7sILL1xVVTcfun7MJchHHXUUixYt6ncYkiRJGuOSDJ31E7CLhSRJknQTJsiSJElShwmyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJElShwmyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJEl70MDAAElG/BkYGOh3qBNWqqrfMeyQ+fPnl1NNS5Kk8WLBggUALFy4sK9xTERJLqyq+UPX24IsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdfQ0QU7y0CR/THJxklduZ7+7J9mc5PG9jEeSJEkaSc8S5CT7AO8HHgYcAzw5yTHD7Pc24Ju9ikWSJEkarV62IB8PXFxVl1TVRuBs4ORt7PdC4IvAyh7GIkmSJI3K5B4eew5wWWd5GXBCd4ckc4DHAA8E7j7cgZKcBpwGMHfuXBYvXswRRxzBqlWr2LhxI0ceeSRLlixh+vTpTJ48mdWrVzNnzhyuvPJKtmzZwty5c1m6dCkzZswAYM2aNcybN49ly5YxadIkZs+ezfLly5k5cyabNm1i7dq1W485ZcoUZs2axYoVK5g1axYbNmxg3bp1W7dPnTqVGTNmcMUVV3DooYeybt061q9fv3X7AQccwLRp01i5ciWHHXYYa9asYcOGDVu3T5s2jalTp7Jq1SrPyXPynDwnz8lz8pwm4Dlt2rSJjRs3snr16nFzTmPlfRo296yqYTfuiiRPAE6sque2y6cCx1fVCzv7fB54Z1X9LMnHgK9X1Re2d9z58+fXokWLehKzJEnSnrZgwQIAFi5c2Nc4JqIkF1bV/KHre9mCvAy4RWd5LrBiyD7zgbOTAMwCHp5kU1V9pYdxSZIkScPqZYJ8AXCbJEcDy4FTgKd0d6iqowcfd1qQTY4lSZLUNz1LkKtqU5IX0FSn2Ac4q6ouSnJ6u/3MXr22JEmStLN62YJMVZ0HnDdk3TYT46p6Zi9jkSRJkkbDmfQkSZKkDhNkSZIkqcMEWZIkSeowQZYkSZI6TJAlSZKkDhNkSZIkqcMEWZIkSeowQZYkSZI6TJAlSZKkDhNkSZIkqcMEWZIkSeowQZYkTVgDAwMkGfFnYGCg36FK2oMm9zsASZL6ZWBg4CbJ74IFCwBYuHBhX+KRtHewBVmSJEnqMEGWJEmSOkyQJUmSpA4TZEmSJKnDBFmSJEnqMEGWJEmSOkyQJUmSpA4TZEmSJKnDBFmSJEnqMEGWJEmSOkyQJUmSpA4TZEmSJKnDBFmSJEnqMEGWJEmSOkyQJUmSpA4TZEmSJKnDBFmSJEnqMEGWJEmSOkyQJUmSpA4TZEmSJKmjpwlykocm+WOSi5O8chvbT07y2yS/TrIoyX16GY8kSZI0ksm9OnCSfYD3Aw8GlgEXJDmnqv7Q2e27wDlVVUmOBT4H3L5XMUmSJEkj6WUL8vHAxVV1SVVtBM4GTu7uUFXrqqraxQOBQpIkSeqjnrUgA3OAyzrLy4AThu6U5DHAW4BDgUds60BJTgNOA5g7dy6LFy/miCOOYNWqVWzcuJEjjzySJUuWMH36dCZPnszq1auZM2cOV155JVu2bGHu3LksXbqUGTNmALBmzRrmzZvHsmXLmDRpErNnz2b58uXMnDmTTZs2sXbt2q3HnDJlCrNmzWLFihXMmjWLDRs2sG7duq3bp06dyowZM7jiiis49NBDWbduHevXr9+6/YADDmDatGmsXLmSww47jDVr1rBhw4at26dNm8bUqVNZtWqV5+Q5eU6ek+fU53Nav349U6ZMYenSpePmnMbj+zTezmnTpk1s3LiR1atXj5tzGivv03ByYwPu7pXkCcCJVfXcdvlU4PiqeuEw+98PeG1V/f32jjt//vxatGjRbo9XNxoYGOCMM84Ycb/Xve51DAwM9D4gSdpDFixYAMDChQv7GocmFq+7/klyYVXNH7p+xBbkJHOBU4D7AkcA1wO/B84FvlFVW4Z56jLgFp3lucCK4V6nqn6Q5FZJZlXVqpHiUu8MDAzcJPH1P64kSZpIttsHOclHgbOAjcDbgCcD/wh8B3go8KO25XdbLgBuk+ToJFNokuxzhhz/1knSPr4rMAW4eudPR5IkSdo1I7Ugv7Oqfr+N9b8HvtQmvvO29cSq2pTkBcA3gX2As6rqoiSnt9vPBB4HPD3JX2lapp9UverzIUmSJI3CdhPkbSXHSQ4BblFVv22rU1y8neefB5w3ZN2Zncdvo2mZliRJkvYKoyrzlmRhkulJZgK/AT6a5F29DU2SJEna80ZbB/ngqloLPBb4aFXdDdhutQlJkiRpLBptgjw5yeHAE4Gv9zAeSZIkqa9GmyC/nmaw3cVVdUGSWwJ/6l1YkiRJUn+Maia9qvo88PnO8iU0FSgkSZKkcWWkOsivbgfmDbf9gUkeufvDkiRJkvpjpBbk3wFfS7IB+CVwFTAVuA1wHM2EIW/uaYSSJEnSHjRSHeSvAl9Nchvg3sDhwFrgU8BpVXV970OUJEmS9pzR9kH+Ew7KkyRJ0gQw2ioWkiRJ0oRggixJkiR1mCBLkiRJHaNKkJPcNsl3k/y+XT42yat7G5okSZK05422BfkjwKuAvwJU1W+BU3oVlCRJktQvo02QD6iqXwxZt2l3ByNJkiT122gT5FVJbgUUQJLHA5f3LCpJkiSpT0ZVBxl4PvBh4PZJlgN/Bp7Ws6gkSZKkPhntRCGXAH+f5EBgUlVd29uwJEmSpP4YVYKcZAbwdOAoYHISAKrqRT2LTJIkSeqD0XaxOA/4GfA7YEvvwpEkSZL6a7QJ8tSqemlPI5EkSZL2AqOtYvHJJM9LcniSmYM/PY1M0oQyMDBAkhF/BgYG+h2qJGmcG20L8kbg7cC/0ZZ6a/+9ZS+CkjTxDAwM3CT5XbBgAQALFy7sSzySpIlrtAnyS4FbV9WqXgYjSZIk9dtou1hcBKzvZSCSJEnS3mC0LcibgV8n+T5ww+BKy7xJkiRpvBltgvyV9keSJEka10Y7k97Hex2IJEmStDfYboKc5HNV9cQkv+PG6hVbVdWxPYtMkiRJ6oORWpDf3f77yF4HIkmSJO0NRkqQ3w/ctaqW7IlgJEmSpH4bqcxb9kgUkiRJ0l5ipBbkOUneO9zGkcq8JXko8B5gH+A/quqtQ7Y/FXhFu7gO+D9V9ZsRo5YkSZJ6ZKQE+Xrgwp05cJJ9aLpoPBhYBlyQ5Jyq+kNntz8D96+qa5I8DPgwcMLOvJ4kSZK0O4yUIF+9CyXejgcurqpLAJKcDZwMbE2Qq+onnf1/BszdydeSJEmSdouR+iBv3IVjzwEu6ywva9cN5znAN3bh9SRJkqRdtt0W5Kq6xy4ce1sD/P6mljJAkgfQJMj3GWb7acBpAHPnzmXx4sUcccQRrFq1io0bN3LkkUeyZMkSpk+fzuTJk1m9ejVz5szhyiuvZMuWLcydO5elS5cyY8YMANasWcO8efNYtmwZkyZNYvbs2SxfvpyZM2eyadMm1q5du/WYU6ZMYdasWaxYsYJZs2axYcMG1q1bt3X71KlTmTFjBldccQWHHnoo69atY/369Vu3H3DAAUybNo2VK1dy2GGHsWbNGjZs2LB1+7Rp05g6dSqrVq3aa8/phhtuYPPmzVx//fXj5pzG4/s03s5p06ZNbN68mcWLF4+bcxqP79N4O6f169czZcoUli5dOm7OaTy+T+PtnDZt2sTGjRtZvXr1uDmnsfI+DZvEVm0zZ91lSe4JDFTVie3yqwCq6i1D9jsW+DLwsKr6fyMdd/78+bVo0aIeRKzhLFiwAICFCxf2NQ5NLF536gevO/WD113/JLmwquYPXT+qqaZ30gXAbZIcDSwHTgGeMiSoecCXgFNHkxxLkqTx66hXntvvEPriikuuBibu+QNc+tZH9DuEmxh1gtxWpZjdfU5VLR1u/6ralOQFwDdpyrydVVUXJTm93X4m8FrgZsAHkgBs2lYWL0mSJO0po0qQk7wQeB1wJbClXV3Asdt7XlWdB5w3ZN2ZncfPBZ67A/FKkiRJPTXaFuR/Am5XVVf3MhhJkiSp30Yq8zboMuAvvQxEkiRJ2huMtgX5EmBhknOBGwZXVtW7ehKVJEmS1CejTZCXtj9T2h9JkiRpXBpVglxVZwAkOahZrHU9jUqSJEnqk1H1QU7yd0l+BfweuCjJhUnu2NvQJEmSpD1vtIP0Pgy8tKqOrKojgZcBH+ldWJIkSVJ/jDZBPrCqvj+4UFULgQN7EpEkSZLUR6OuYpHkNcAn2+WnAX/uTUiSJElS/4y2BfnZwM2BLwFfbh8/q1dBSZIkSf0y2ioW1wAv6nEskiRJUt9tN0FO8v9V1YuTfA2oodur6qSeRSZJkiT1wUgtyIN9jt/R60AkSZKkvcF2E+SqurB9eFxVvae7Lck/Aef3KjBJkiSpH0Y7SO8Z21j3zN0YhyRJkrRXGKkP8pOBpwBHJzmns+kg4OpeBiZJ6p+jXnluv0PoiysuaT7aJur5X/rWR/Q7BGmvMFIf5J8AlwOzgHd21l8L/LZXQUmSJEn9MlIf5CXAEuCeeyYcSZIkqb9GVQc5ybXcWOZtCrAvcF1VTe9VYJIkSVI/jHaikIO6y0keDRzfk4gkSZKkPhptFYubqKqvAA/czbFIkiRJfTfaLhaP7SxOAuazjZn1JEmSpLFuVAky8KjO403ApcDJuz0aSZIkqc9G2wf5Wb0ORJIkSdobjKoPcpKPJ5nRWT4kyVm9C0uSJEnqj9EO0ju2qtYMLlTVNcBdehOSJEmS1D+j7YM8KckhbWJMkpk78NxxYaJOOwpOverUq5IkTSyjTXLfCfwkyRdoqlc8EXhTz6KSJEmS+mS0g/Q+kWQRTe3jAI+tqj/0NDJJkiSpD3ZkopCZNNNL/ztwVZKjexSTJEmS1DejrWLxOuAVwKvaVfsCn+pVUJIkSVK/jLYF+THAScB1AFW1AjioV0FJkiRJ/TLaBHljVRXt9NJJDuxdSJIkSVL/jDZB/lySDwEzkjwP+A7wHyM9KclDk/wxycVJXrmN7bdP8tMkNyR5+Y6FLkmSJO1+o61i8Y4kDwbWArcDXltV397ec5LsA7wfeDCwDLggyTlDql+sBl4EPHpngpckSZJ2t1ElyEmeU1X/CXy7Xd4nyeuq6oztPO144OKquqR9ztnAycDWBLmqVgIrkzgTg7QNE3VyFnCCGieokaT+Ge1EIQ9K8jjgOcDNgI8C54/wnDnAZZ3lZcAJOxwhkOQ04DSAuXPnsnjxYo444ghWrVrFxo0bOfLII1myZAnTp09n8uTJrF69mjlz5nDllVeyZcsW5s6dy9KlS5kxYwYAa9asYd68eSxbtoxJkyYxe/Zsli9fzsyZM9m0aRNr167deswpU6Ywa9YsHjp3MxevDQdPgZtPLX5y5STuNXsLazeGpdeFvztkC4vXTOLQ/YuZ+924ffUNYeX14fYztvD7ayYx78Bi+pQbt1+1IfxlI9x6evGb1ZO49fTiwMk3br98fbhhMxx1UPHLVZO44yHF5Elw4apw/M23cNl1AeAWBxa/uGoSd5tVbNoCF10T7jprC5deG/bbBw4/4MZjXrcpXLw23HnmllGd0/p9YfIkmL5vjZtz2pH3afHixUybNo2pU6eyatWqPXrtHX5A9eScxsL7dPY+MGUSPHTu5nFzTjvyPl1//fUsWbLEa28Pv08b94P1m+D4m28ZN+e0I+/T4sWLt14H/bj27nvYlp79Ld+b36dz94EDJ8NR02rcnNNYufaGzT2bsXejSlKfRNNlYj3w5Kr68Qj7PwE4saqe2y6fChxfVS/cxr4DwLqqesdIccyfP78WLVo0qph3p4naigVwxaeb7uOHPeWtfY6kP/rZkud153XXLxP12vO687rrh4l+3UH/rr0kF1bV/KHrR1sH+TbAPwFfBC4FTk1ywAhPWwbcorM8F1gxqmglSZKkPhltFYuvAa+pqn8A7g/8CbhghOdcANwmydFJpgCnAOfsdKSSJEnSHjDaPsjHV9VagLYe8juTbDfZrapNSV4AfBPYBzirqi5Kcnq7/cwkhwGLgOnAliQvBo4ZfC1JkiRpT9tuC3KSfwGoqrVtn+KuZ4108Ko6r6puW1W3qqo3tevOrKoz28dXVNXcqppeVTPaxybHkiRJ6puRulic0nn8qiHbHrqbY5EkSZL6bqQEOcM83tayJEmSNOaNlCDXMI+3tSxJkiSNeSMN0rtzkrU0rcX7t49pl6f2NDJJkiSpD7abIFfVPnsqEEmSJGlvMNo6yJIkSdKEYIIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJIkSVJHTxPkJA9N8sckFyd55Ta2J8l72+2/TXLXXsYjSZIkjaRnCXKSfYD3Aw8DjgGenOSYIbs9DLhN+3Ma8MFexSNJkiSNRi9bkI8HLq6qS6pqI3A2cPKQfU4GPlGNnwEzkhzew5gkSZKk7Zrcw2PPAS7rLC8DThjFPnOAy7s7JTmNpoWZuXPnsnjxYo444ghWrVrFxo0bOfLII1myZAnTp09n8uTJrF69mjlz5nDllVeyZcsW5s6dy9KlS5kxYwYAa9asYd68eSxbtoxJkyYxe/Zsli9fzsyZM9m0aRNr167deswpU6Ywa9Ys/vuZt2LWrFls2LCBdevWbd0+depUZsyYwRVXXMGhhx7KunXrWL9+/dbtBxxwANOmTWPlypUcdthhrFmzhg0bNmzdPm3aNKZOncqqVav2+DmtWLFiVOf0iPOnsXnzZs5/3QPHzTntyPu0ePHivp3Tb//1vj05p7HwPj33RwezefNmPvrMW42bc9qR9+n666/v6zlN1GvvId/bnylTpvDpf7zTuDmnHXmfFi9e3Ndz+t5pd+jZ3/K9+X162o8OZuPGjfz3v9xz3JzTWLn2hpOqGnbjrkjyBODEqnpuu3wqcHxVvbCzz7nAW6rqR+3yd4F/qaoLhzvu/Pnza9GiRT2JWdu2YMECABYuXNjXODSxeN2pH7zu1A9ed/2T5MKqmj90fS+7WCwDbtFZngus2Il9JEmSpD2mlwnyBcBtkhydZApwCnDOkH3OAZ7eVrO4B/CXqrp86IEkSZKkPaVnfZCralOSFwDfBPYBzqqqi5Kc3m4/EzgPeDhwMbAeeFav4pEkSZJGo5eD9Kiq82iS4O66MzuPC3h+L2OQJEmSdoQz6UmSJEkdJsiSJElShwmyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJElShwmyJEmS1GGCLGmvMDAwQJKtP+effz7nn3/+TdYbl0gAABr9SURBVNYlYWBgoN+hSpLGuZ5OFCJJozUwMGDyK0naK9iCLEmSJHWYIEuSJEkdJsiSJElShwmyJEmS1GGCLEmStAdZtWfvZ4Ksv+F/XEmSemdgYICqGvHHz9n+scyb/obltiRJ0kRmC7IkSZLUYYIsSZqw7FImaVtSVf2OYYfMnz+/Fi1a1O8wJEmSNMYlubCq5g9dbwuyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJElShwmyJEmS1GGCLEmSJHWYIEuSJEkdJsiSJElShwmyJEmS1DHmZtJLchWwpN9xTECzgFX9DkITjted+sHrTv3gddcfR1bVzYeuHHMJsvojyaJtTcUo9ZLXnfrB60794HW3d7GLhSRJktRhgixJkiR1mCBrtD7c7wA0IXndqR+87tQPXnd7EfsgS5IkSR22IEuSJEkdJsiSJElShwmyAEjitSBJkoQJ8oSXZB5AVW0xSdaelGRakoP6HYcmtiTpdwyS9j4mRBpIcgmYJGvPSTIdeCtwUvtY2qOSHJ1kSjlSXdI2mAxNUIOtJlX1bOCiJN9vl02S1XNVtRb4H+CBwENMkrUnJbkP8Hbgb6aXlXa3wc/bJPv0OxaNnonQxDX4H/YewCLgdkl+CCbJ6q3Ba6uq3g/8HHgUJsnaQ5LcFXg4cFZVLbeLhXopSaqqkjwKeEeSjyS5Zb/j0shMgiaYJPvB1iT4OOCzwLdoWvJWJrmgs93rQ7tV+2GxJcksgKr6MPBt4GRMktVDnb9nTwKeCMxNso9dLNRLbXL8AGAAeC9wN+D1Sfbta2AakQnQBJJkJvDGJCe0q24AvlVVP62qxVX1OGBLkp9DkyT3K1aNT+2HxSOAjyV5U5KHVdWngHOBRwIPT3Jwf6PUeNJpIT4MoKpeAXwAOBG4bb/i0vg25M7EHYDX0FxvNwD/WlV/tRFq7+abM7HMAtYBpya5C7AWuF/bH2/QWcDBbdcLabdKsgB4C/DPwLHAPyc5rarOBr4PnATs378INd60X8oeBnwhyVuSfKiq3gX8GXh1kjv1OUSNQ4ONAUneCFwPPBf4N+BpVbU0yak0fwu1lzJBnkCq6v8BvwIOAF5I85/2ZcA5SZ6Z5Kk0CcrDq+pn/YtU402SSUmm0NxePBWYBxwBfBV4TJLnVdXHgZdV1RV9DFXjTNvn+C3As2n+5h3bdq14OXAVcEaSA/sZo8af9ovX84BPAQuBW9J0abwyyfE0jQQL+xWfRha7X00c7a3t1wHfAebTtqAAfwc8GjgUOLuqvtq3IDWudAaoTK6qTe26A2k+NP5PVV2RZCFwKfDaqlrav2g1HnQGgW5pl+8GHAMspykt+KSq+nOSO1bVRUluV1V/7F/EGm+S3Izms/WhwPyqui7JQ4B/pOliMRt4Z1V9bfBvZB/D1TBMkCeIdkDAB4DPVdW32wF6JwFzgTdV1ZJOMuN/WO2yzvX0YODJwK9pvpSdS3Mn4x3Az4D3AS+vqt/1LViNC+3EM3cALgQeBhwI/I6m+85a4Niqur7t6vMPwPOranWfwtU4MvRzs+2m+AqacpZvraq1SWbTdHOcMVhBxc/avZddLCaIqvorTd/OR7XLv6b5ELkXTT+8GbSl3/wPq92hkxy/A/gc8ADg8W3L3suBlwKfAc40OdauSnJ7moTkqcD3gHcCq6rqDzQDpFYB92nLbb2H5m6ZybF2WXuHrJI8JMkrk7yJJjH+ADAFeHGSg6rqyqq6rqqWg5+1eztbkCeATkvenWj6Hl9QVR9JcgzNB8obq+pP/Y1S40HbQrLfYFeJJM8HfghMB94NPLaqLkuyP80Hx4FVtcKWFO2Ktjzg12n6fK6iKV25AngC8FdgX+BxNP3fLwe+UFXnet1pVyS5eVVd1T6+P/Bh4LXA04GVNI0DM4Bn0lx3A1aHGjtMkCeQ9vbj3wMvADYAtwP+qarO7WtgGjeSvJemnNa/VNWlbYL8QuAvwElVdWWShwK3Bj5YVZv7GK7GibaE5bdovoxNBd5GM97ir8BbqurP23iOybF2WpLb0Xwpe2RV/THJGcANVfXmdvs7gdtU1UlJHgSsqKr/6WPI2kF2sRiHhpsZqqquraov03SzeDNNwmJyrF02eM1V1YtokpKXJTkc+DxNH9CftsnxfYD/D/iTybF2l7arxMdpvvxvrqpLgdNpKva8PMnzkvw5yVGda9XkWDulHQj6cOA/gGoT4D8DM5McAlBVLwOmJjmsqr5rcjz2mCCPI53EeJ8h6yd196mq9VX147Zv3rAJtbSjktyL5vp7DPBRmq4V7wdmpZnK/B3AP1fVN/sXpcapJcDzgackeWFV3UBT2u1q4C7AS6rqUhNj7aq2m8QlwOOBc2i69VxIc1f2QUlu2XZpPAyY3LdAtUvsYjFOdPoZP5Cmr91lwC+r6lvd7e3jyVW1qU2cyw8M7awkU6pqY/v49jQtxk+iKal1JnAd8Lp2xPZsmuttpbe3tas6f/OOAzYDa9r+7fehufX9qqr6YNsAsF9VbfC6067qXHeHA/9NU1v7lLZL2SNpPn8PBg4H3lZVX+ljuNoFtiCPE+1/2PvQzIT3M5pvro9K8o+D2wHaAvmb2ttAHwYO6lfMGtvafp8f7UyysJmmnvFVVfWXqnoycCfg00mObkdwrwRvb2vXtX/zHgacTdNt7EdJ7lRVP6Ip8fa+JM+vxobB5/QxZI1xneR4Bs0kMyfSdO35YJK7V9XXaSr0nE4zY95XvEM7dpkgjy93AN5TVZ8EBoBvA3dOMgu2thxvbv9zfw74dFWt7Vu0GtPafp+vBI5oW/Eupqk1e9e2qgDAu2j6ge7bnyg1XiW5I83EH4+gKak1FfhpkvlV9VPgfoDVebTbdL6UfYpmIpATq+qDwE+Af0tyAs2djJVV9b+Dz+lfxNoVJshj2Da+mW4ATk1yZFWtoRnVfWuaWz20LceDyfHrq+p7ezRgjTtVdRnwSOALNNNHf4KmasWLk7yQpiXl+dVMcy7tTstpyrjNAV5dVbOBDwK/SHKXdpzFt2zB0+6SZorot9O0Et8JOCnJpKp6A/AbmsopTls+Tth5fAxrv82eABxL0+fui8CRwEuTvK/d7SBgsI/oPjTJ8Zur6od9CFnjUFW9O8kWmuvv0TQtKw8A7kzTB+8X/YxP41PbCLAmyYnA19rVPwLmAzM7+9mCp13S6bt+C5q7FjPax0+sqi1J5lbV65Lc2ruy44eD9MawJA+gaTH5A00r8b/SDBh4ME0VgWuB91bVFzvPOaSqrulDuBoH2j7s2yzPluSlwBOB51TVRYP7OjBKu0PbUvc3kywkORV4IE0Xn5Norr/fe91pVw39e9e2IH+sXbx/VV3VDsx7MPCKwb7uGh9MkMeotkj5O4HXVtUv2+TkBOBDVfW9JDcDqKqr21uM2daHizQaSebVjbPjTa6qTcPs9wrgacC9geusdaxdkWQe8ISqeme7/DdJcjvg+AnAbYHzq+prf3skafTaa2pt+wX//jR3JX5LMxveKcD+wGdoxlacSdPFx+tunDFBHoOS7EuThLwC+ETdOHPPP9EUL3/nYHk3aXdIchawoKpu2S5vL0k+sqqW7NEANS4lOYamdOAnq+qt7bqtSfIwCbMtx9ppbVWe19LUz/458D7gGzS1tBcCa4BNwDNoEuZPVNVXve7GHxPkMaodbHcScF+aVpNPtetfAvygqi7sZ3waH4bUz/4aMK2qHtAu/02S3L0lOdwtcWk0OiW1Hgy8h+bu2HvabTe5toZeiyYr2llJptB8tt4TuD3w/qo6r63U80iaKhXvS3IQsKWqrvN6G5+sYjFGtQNUzqUZlHLvJM9u17/b5Fi7UQCS3ANYBNwuzYx4g1VRtg707fQ5npHknibH2lltAlxt/85n0MxSdnqS10Azk1naGUI7td1nJHlHkn1NVrSzqpn46GvA+TSD3J/eXmO/pvm8fVqSm1XVtVV1Xfscr7dxyAR5LzZSeaKqupqmesUvaZLkI/ZIYBr3kuwHWxOR44DP0pQNfCCwMskF7fZNSSZ3kuODab64WSFHOyzJwUmmtdfdTJp67h8CngU8GXhYkpfB1muzW9v9i8A5VfXXfsWv8aGaacq/AbyZpkvFv7SblgFbgCl9Ck17kAnyXirJVJpkhCTHtBUr/kabJH+ZZrDeij0YosapNjF5Y1tCEOAG4FtV9dOqWlxVjwO2JPk5NElyJzn+Is1obssIaoe0k8u8Anh2+/gaYCXw57b7xG9pBka9IskrYesXtENoylcOVNUP+hO9xrrBOxKD2i9a36f5wv+AJBcC7wbeWlWX9yFE7WEmyHuvA2hmwfsOzVSqww56qqpVVbV8cNnC+NpFs4B1NJPO3IVmdrz7pZnKfNBZwMFt1wuSTAO+C5xRzVS/0g5p68deRDPhzBPb29YXAZ9tu01sAf4X+A+aW92D/UU/hbXdtROSzBtyR2JoknwD8N/AvwM/A15TVef4GTsxmCDvpaqZxncJzUCBP1fVJdAMRhncJ4192scHtwP07A+lXVLNrHe/ovmS9kKa2tovA85J8swkT6UZxPLwqvpZ+7S5wPNMUrQzBv+O0dzCPoqmv/FTgdfQVBL4VZKXA+8FvtL5EnYQcHpVLdyzEWucmEZzx2LwjsS2kuS/0nQve33bD9nP2AnCKhZ7qSS3r6rFSR4IPILmg+ClVbUuyayqWtUZ5T3Y/27ABEW7KskjaKZM/Q5N/c8/08yO93c0M+UdCpxdVV/tW5Aad9o7FB8BXgCcTFNj9hdV9dEkp7TLK6rqu30MU+PEDlZJGdz3Jv/2K3btGSbIe5nOf8BfA0uq6uQkR9LMkrcF+ALNbGUDVXV5mxx/DniDybF2VZoa2x8APldV324H6J1E00L8pqpa4oeEeiHJ84FbVdVL21vYzwKeDnyc5nq8rq8BatwYTIDbKimnAEXTGPDpqnrDkH22VuehaSh4lQNBJwa7WOx9BqsHHAfcPMnnq5l04QxgM03R8nPa5Hh/4Ks0iYvJsXZZ+4d/f+BR7fKvaUps3Qt4dfshkXabybF2p98Bxya5azXOAv4K3AO4WX9D03hglRTtCBPkvUiSOwBPTnIUQFXdC7hlks9V1YqqegHwoKo6t33KzYHnVNX5fQlY40pn4MnbgKlJntcu/5kmSf6/VbXG+sbqkcXAj4FHJXlIktvSNgpUO825tLOskqIdZYLcZ4NJSZJ7Aa8CTgQelOQW7S6PBx6f5DPt8tbyMlW1tKou3pPxavzqtAhfSlMD9JQk5wLn0Nzi/lO/YtP4V1Urae6IraKZ6vcjwJlV9bu+BqZxwSop2lH2Qd4LJHkUza2e02hKbD2Npv7iV4DD2+XvODhFu9NIfYiTHADcBbimqv6w5yLTRLC96y/NNL77V9VK+7prV3X6Ed+fpjLPUTQ1jb9IMxnIQ4CPAacDT6mqX7TPuxlwQFVd1o+41V8myH3W1o/9JPD2qvpJu+7hwGNpStDch+Y/7A/8oNDu0BlkN7m9tTi4fuvI7W1da15/2h3a/pyb2oo8I15nQysKSDvDKinaUU4H239F02p8IGz9MDgvyV9pbnXPqKrBaX1NTrRLOsnxA4HHJbkM+GVVfasdlJJ2gNTWBLqtC1pef9oZSW4O3KOqvpbkYTTT9h6U5MW17UllJgGbk+xfVdebHGs3uTPwjar6bpLv0QzMe0bby9EqKfob9kHus/Y/5eeAeye5Q5uk3ItmYoa1g8mxtDu0ie99aGbC+xlwGM2gqH8c3A5bb0kODlD5ME0dbmmHtGMsHgecnOR04OXAS2iuqfcleciQ/bsltX6U5NZ7PGiNV1ZJ0Q6xBXnv8CWavk8fSvJjmjrHL6qqK/sblsapOwDvqapPJvkacD/gEblxAprBluPBGttvaQe4SKPWqSP7MWAqzUQzq9rSgb9OcgPw5vZ6O6+THB8MfB54iYOQtRt1q6TMorlDa5UUDcsW5L1AVS0H3kozcvvXNH2Oz93+s6TR6ZRvG7QBODXJkVW1hmYa1VvTDAhlSHL8+qr63h4NWGNekqnAfdt/DwOW0CQo05M8se3K83HgTODt7Zezze0di68CZ1hSS7uTVVK0oxykJ00ASU4AjgW+DvwFeClNHe33tbv8F3BqVf0xyT40Zd7eXFUL+xCuxrD2C9m+wFNpylQeQzPRzCqaAVK3AH5SVV9o95/TNhIMzqb3P34p066ySop2lQmyNM4leQDwQeAPNK3E/wpcDzwYeAxwLfDeqvpi5zmHVNU1fQhXY1iS2TQTKvyfJI8FvtD+PKeqrm1biE8Fbg/8sKo+Y5UK7U5WSdHuYoIsjWNJbge8E3htVf0yyUuBE4APVdX32jqfVNXVbctf/LDQzkoymaa7znXAapq7FvcDjgA+WFWLk9wKeALw5ar6Y9+C1bgwXJUUYJtVUjp93fevquv3dLwaO+yDLI1TSfalubV9a+ChAFX1LuAnNNOpPqSqrq6qq9ttZXKsXdHW1f5f4J+A79BM3/tZYD1wWpJntds+ZXKsXWWVFPWSVSykcaqq/prkyzQjte+b5GlV9amqek9b2/jqPoeocSbJbYG70QyCegvwZZpuPB8EngK8mOZuxrK+BalxwSop6jW7WEjjXNuN4pE09T4vaOt/SrtFt09nkicAj66qp7bL7weOBk6pqrVJZlbVagdGaVe01VFOAH5OUyXlLsAc4BHAR4HPtzXfn0vTonz/toTlITRf2l49zCQ10lYmyNIYN5pko02SH0uTJL+mqlbskeA0ISS5GzC3qr6a5IPA9E6S/BHgdsADgS1249GusEqK9hQTZGkMa1tS7t1On3oMMLuqvj/MvrOA/QY/LKRd1SYrk2nKB94d+A+arhUfAL5QVV9s+8Lfpqr+0L9INR5YJUV7kgmyNIYlmQk8E3g4cCjN7e1LRvlcb3NrlyQ5vKouT3IoTfnAO9CUEzyKppTgM6rqr30MUeOIVVK0J5kgS2NckscBnwC+U1Unt+smtxUFBlv5JnUGqDy7qt7dv4g11rXX1MHAp4Gf0iTF64G/0tTVfhjNQL3bOhBKu1N7R+ItwL2Bv6eZ8OgfgP2A39H0R/6/DgTVrrLMmzSGJbl9O8HHo4CLk3w4ybR2uuhZg/t1Sht9CVjUr3g1PrQlAdfQlNX6E83gqDcAzwAur6oB4HCTY+1ObZWUx9N8+foFzYC7q2iqpKykqZLyXZNj7Q62IEtj0GD3iCS/BpZU1clJjqS5zb2Fpl/eE2n6613eJsefA95QVT/sX+Qab9qpyacC76G55n4CnEwzm9lmu/JoV1glRf1igiyNQUmmVtWG9vFPgOVV9YQkR9AkyQ8CXl5V5ybZH/hvmvqz5/cvao1FIyUb3UFQSU4B/lRVF+6xADXuWSVF/WCCLI0xSe5AU67t+1V1abvuQuB/q+qJ7fIRg6XckswDpni7WztqtFVShlYKsAVPu4NVUtRPJsjSGNDpUnEv4HRgCvBt4FtVdVmSo2mm+P1sVT3ZBEW7w45USekODG2XvQa1S6ySon5ykJ40BrTJ8aOAf6fp6/lRYAHw4DaJOQB4G00LCyYm2h2qajWwBLgn8OfB5Lgtt0X7OO00vpuSzEjykva5XoPaKe01NQP4zySvAe4LfBN4O3A28BvgFODI/kWp8c4WZGkMSDIN+CTw9qr6Sbvu4TSz400D7gM8pap+YMuddpe2SsriJA+kqVRxEPDSqlqXZFY7fe/g3Y0ZwBdpBoY6EFS7rO3WcyzwkPbf/wH+raqWJpldVVf2NUCNaybI0hiQ5ECagXavr6pvD/b5TPJg4FJgRlVd0NcgNW5YJUV7C6ukqF/sYiGNAVV1HU0Ccu8kd2iT43sBLwPWmhxrN9sPoKqOA26e5PNVtQQ4A9gMvA84p02O9we+CrzJ5Fg7qh2Itz1VVddV1XOB02hakG+oqs2DG3sepCYkW5ClMSLJHJoBevcHfkzTmvKiqjq3r4FpXLFKivYUq6Rob2aCLI0hbVeLuwOzgUur6ud9DknjgFVS1A9WSdHebPLIu0jaW7RdLRb2Ow6NL50qKQM0t7FnAU8DKslXuLFKyncG9+9TqBpH2lnvBqukfKdbJWUwGW67YEwarJICPKuq3u01qF6zD7IkTXBtlZRnAy+sqgur6pvAZ4B70UzK8E3gG+2t8JH6jEqj0lZJ+SLwKODiJB9OMq1NhmcN7tcOxhuskrKoX/FqYrEFWZJUNK3GB8LWPp/nJfkrQ6qk2HKnXdXpHnF2ksEqKf9LUyXl7Um+ADwxydAqKZYQ1B5jC7IkTXBWSdEeZpUU7fUcpCdJskqK9girpGisMEGWJAFWSVFvWCVFY5F9kCVJgFVS1BtWSdFYZIIsSZJ6ZmiVlHbdPsBjgYcA9wGeUlU/sPVYewsTZEmS1EtWSdGYYxULSZLUM1ZJ0VjkID1JktRTVknRWGOCLEmSes4qKRpLTJAlSZKkDvsgS5IkSR0myJIkSVKHCbIkSZLUYYIsSZIkdZggS5IkSR0myJK0F0lSST7ZWZ6c5KokXx/heccleXhneSDJy3chjl16viSNZSbIkrR3uQ74uyT7t8sPBpaP4nnHAQ8fcS9J0ohMkCVp7/MN4BHt4ycDnxnckOTAJGcluSDJr5KcnGQK8HrgSUl+neRJ7e7HJFmY5JIkL+oc46VJft/+vLiz/t+S/DHJd4Db9fwsJWkvZYIsSXufs4FTkkwFjgW6M479G/C9qro78ADg7cC+wGuBz1bVcVX12Xbf2wMnAscDr0uyb5K7Ac8CTgDuATwvyV3a9acAdwEeSzPjmSRNSJP7HYAk6aaq6rdJjqJpPT5vyOaHACd1+gdPBeYNc6hzq+oG4IYkK2mm+L0P8OWqug4gyZeA+9I0mHy5qta368/ZfWckSWOLCbIk7Z3OAd4BLABu1lkf4HFV9cfuzklO2MYxbug83kzzNz/bec3/v107xqUwCKMAem+JvMXYB4m3EL2aQksvorUElYROgbABEjuwgFF4kj8iIqJ4OKe8k3yZ6W5mZnxrpwB/jC8WAMvpOMnuGOP+XX6WZLttk6Tt+iJ/TjL7wtyLJFttV9uuJZknuVzk87YrbWdJNn/iEAC/kRtkgCU0xnhKcvjB0l6SgyR3i5L8kGQjyXmSnba3SfY/mXvd9iTJ1SI6GmPcJEnb0yS3SR7zWpoB/qWO4UUNAADe+GIBAAATCjIAAEwoyAAAMKEgAwDAhIIMAAATCjIAAEwoyAAAMPECQyIndpYrLPoAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from IPython.display import display\n", + "\n", + "# Get all unique QPS values\n", + "qps_values = sorted(log_df[\"qps\"].unique())\n", + "\n", + "# Generate and display a plot per QPS\n", + "for qps in qps_values:\n", + " subset = log_df[log_df[\"qps\"] == qps]\n", + " grouped = subset.groupby(\"method\")[\"exec_secs\"].agg([\"mean\", \"std\"]).reset_index()\n", + "\n", + " fig, ax = plt.subplots(figsize=(10, 5))\n", + " ax.bar(\n", + " grouped[\"method\"],\n", + " grouped[\"mean\"],\n", + " yerr=grouped[\"std\"],\n", + " capsize=5\n", + " )\n", + "\n", + " ax.set_title(f\"Execution Time per Method (QPS = {qps})\")\n", + " ax.set_xlabel(\"Method\")\n", + " ax.set_ylabel(\"Execution Time (s)\")\n", + " ax.set_xticks(range(len(grouped[\"method\"])))\n", + " ax.set_xticklabels(grouped[\"method\"], rotation=45, ha=\"right\")\n", + " ax.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "\n", + " plt.tight_layout()\n", + " display(fig) \n", + " plt.close(fig) \n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# Load the CSV\n", + "df = pd.read_csv(\"CC+DD - experiment.csv\")\n", + "\n", + "# Extract logs with method, exec_secs, and qps\n", + "log_entries = []\n", + "\n", + "for _, row in df[[\"method\", \"qps\", \"method, label, submit_time, exec_secs\"]].dropna().iterrows():\n", + " qps = row[\"qps\"]\n", + " lines = str(row[\"method, label, submit_time, exec_secs\"]).split(\"\\n\")\n", + " for line in lines:\n", + " parts = line.split(\",\")\n", + " if len(parts) == 4:\n", + " method, label, submit_time, exec_secs = parts\n", + " log_entries.append({\n", + " \"method\": method.strip(),\n", + " \"qps\": qps,\n", + " \"exec_secs\": float(exec_secs.strip())\n", + " })\n", + "\n", + "# Create DataFrame\n", + "log_df = pd.DataFrame(log_entries)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved: qps_exec_time_plots/qps_1.png\n", + "Saved: qps_exec_time_plots/qps_2.png\n", + "Saved: qps_exec_time_plots/qps_3.png\n", + "Saved: qps_exec_time_plots/qps_4.png\n", + "Saved: qps_exec_time_plots/qps_5.png\n", + "Saved: qps_exec_time_plots/qps_6.png\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "# Create directory to save the plots\n", + "output_dir = \"qps_exec_time_plots\"\n", + "os.makedirs(output_dir, exist_ok=True)\n", + "\n", + "# Loop over each QPS group\n", + "qps_values = sorted(log_df[\"qps\"].unique())\n", + "\n", + "for qps in qps_values:\n", + " subset = log_df[log_df[\"qps\"] == qps]\n", + " grouped = subset.groupby(\"method\")[\"exec_secs\"].agg([\"mean\", \"std\"]).reset_index()\n", + "\n", + " # Plot\n", + " fig, ax = plt.subplots(figsize=(10, 5))\n", + " ax.bar(\n", + " grouped[\"method\"],\n", + " grouped[\"mean\"],\n", + " yerr=grouped[\"std\"],\n", + " capsize=5\n", + " )\n", + "\n", + " ax.set_title(f\"Execution Time per Method (QPS = {qps})\")\n", + " ax.set_xlabel(\"Method\")\n", + " ax.set_ylabel(\"Execution Time (s)\")\n", + " ax.set_xticks(range(len(grouped[\"method\"])))\n", + " ax.set_xticklabels(grouped[\"method\"], rotation=45, ha=\"right\")\n", + " ax.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "\n", + " plt.tight_layout()\n", + "\n", + " # Save the figure\n", + " filename = f\"qps_{int(qps)}.png\"\n", + " filepath = os.path.join(output_dir, filename)\n", + " fig.savefig(filepath)\n", + " plt.close(fig)\n", + "\n", + " print(f\"Saved: {filepath}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Step 1: Get ideal value for reference\n", + "ideal_val = df[df[\"method\"] == \"ideal_cut_no_dd\"][\"reconstructed expectation value\"].dropna().mean()\n", + "\n", + "# Step 2: Build a DataFrame with mean exec time and error per method\n", + "accuracy_exec = log_df.groupby(\"method\")[\"exec_secs\"].mean().reset_index()\n", + "accuracy_exec.columns = [\"method\", \"mean_exec_time\"]\n", + "\n", + "# Add error from ideal\n", + "recon_vals = df[[\"method\", \"reconstructed expectation value\"]].dropna().groupby(\"method\").mean().reset_index()\n", + "recon_vals[\"abs_error\"] = (recon_vals[\"reconstructed expectation value\"] - ideal_val).abs()\n", + "\n", + "# Merge\n", + "plot_df = pd.merge(accuracy_exec, recon_vals[[\"method\", \"abs_error\"]], on=\"method\")\n", + "\n", + "# Plot: error vs. exec time\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(8, 5))\n", + "plt.scatter(plot_df[\"mean_exec_time\"], plot_df[\"abs_error\"], s=100)\n", + "for _, row in plot_df.iterrows():\n", + " plt.text(row[\"mean_exec_time\"], row[\"abs_error\"], row[\"method\"], fontsize=9)\n", + "\n", + "plt.xlabel(\"Mean Execution Time (s)\")\n", + "plt.ylabel(\"Absolute Error from Ideal ⟨H⟩\")\n", + "plt.title(\"Accuracy vs Execution Time per Method\")\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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zu7s7Ky7FEmSNAgtWLCANdZYw3A8CEQEa6yxxuv6NKAtA3JmTsvMKR0dHXWXIkmSBinD8eDxevuyLQOyJEmS1CoGZEmSpOXIHXfcwTXXXLN0+dRTT+X0009/w/t7s88fiAzIkiRJy5HuAVmvZUCWJElqMw8//DCbb745H/nIR9h6662ZPHkyv/rVr9htt93YdNNNufXWW5k/fz7HHHMMEydOZLvttuMnP/kJL7/8Mv/2b//GxRdfzPjx47n44osBuO+++3jb297GJptswplnnrn0dc444wy23nprtt56a77xjW8sXX/aaaex2Wabsd9++/Hggw/2+/G3mpd5kyRJakMPPfQQl1xyCWeffTYTJ07kwgsv5IYbbuCqq67iy1/+MltuuSX77LMP5557LnPmzGHHHXdkv/324wtf+ALTp0/n29/+NlBMkXjggQe49tprmTt3LpttthnHHXccd911F+eddx633HILmclOO+3EXnvtxZIlS7jooou4/fbbWbRoEdtvvz077LBDze/GsmVAliRJakMbb7wx22yzDQBbbbUV++67LxHBNttsw8MPP8ysWbO46qqrls4PXrBgAY888kiP+9p///1ZccUVWXHFFVlrrbV46qmnuOGGGzjooINYeeWVATj44IP57W9/y5IlSzjooINYaaWVADjwwAP74Wj7lwFZkiSpDa244opLvx4yZMjS5SFDhrBo0SKGDh3KZZddxmabbfaq591yyy0N9zV06FAWLVpEZvb62oP9EnjOQZYkSRqE3vnOd/Ktb31radC9/fbbARg5ciRz587t8/l77rknV155JS+88ALz58/niiuuYI899mDPPffkiiuu4MUXX2Tu3LlMmzatpcdRh7YcQY6IScCksWPHNv2cHT75g9YVJGZ87ci6S5AkSRWf/exn+fjHP862225LZjJmzBiuvvpq9t57b77yla8wfvx4PvOZz/T6/O23356jjjqKHXfcEYCPfOQjbLfddgB88IMfZPz48Wy00Ubsscce/XI8/SkaDZ8PdBMmTMjp06c31daA3FoGZEnSYHL//fezxRZb1F2GlqGe+jQiZmTmhO5tnWIhSZIkVRiQJUmSpAoDsiRJklRhQJYkSZIqDMiSJElShQFZkiRJqmjL6yBLkiT1p2V9uVgvjzqwOYIsSZI0AO266649rj/qqKO49NJL39A+Tz31VE4//fQ3U9arfOMb3+CFF15YZvtr1iqrrNLj+jfz3lS1ZUCOiEkRcXZnZ2fdpUiSJLXETTfdVHcJfaorILdaWwbkzJyWmVM6OjrqLkWSJKklukZJM5MTTjiBLbfckv3335+nn356aZsZM2aw1157scMOO/DOd76TJ554AoBzzjmHiRMnMm7cOA455JCmQ+xDDz3Efvvtx7hx49h+++3505/+xHXXXccBBxywtM0JJ5zA+eefz5lnnsnjjz/O3nvvzd57793wOE455RTGjRvHzjvvzFNPPQXAzJkz2Xfffdl2223Zd999eeSRR3rdx1/+8hd22WUXJk6cyGc/+9ml6xu9N29GWwZkSZKk5cUVV1zBgw8+yN13380555yzdGR54cKFnHjiiVx66aXMmDGDY445hlNOOQWAgw8+mNtuu40777yTLbbYgu9973tNvdbkyZM5/vjjufPOO7nppptYd911e2170kknsd5663Httddy7bXX9tpu/vz57Lzzztx5553sueeenHPOOUARtI888kjuuusuJk+ezEknndTrPk4++WSOO+44brvtNtZZZ50+35s3y4AsSZI0gP3mN7/hsMMOY+jQoay33nrss88+ADz44IPcc889vP3tb2f8+PF86UtfYtasWQDcc8897LHHHmyzzTZMnTqVe++9t8/XmTt3Lo899hgHHXQQACNGjGCllVZ60/UPHz586Qj0DjvswMMPPwzAzTffzOGHHw7AEUccwQ033NDrPm688UYOO+ywpW279PbevFlexUKSJGmAi4jXrMtMttpqK26++ebXbDvqqKO48sorGTduHOeffz7XXXddn6+RmT2uHzZsGEuWLFm6vGDBguYLB1ZYYYWl9Q8dOpRFixb12K6nY2xme1/PeyMMyJIkSX2o87Jse+65J//93//NkUceydNPP821117L4YcfzmabbcYzzzzDzTffzC677MLChQv5wx/+wFZbbcXcuXNZd911WbhwIVOnTmX99dfv83VWXXVVRo8ezZVXXsn73vc+XnrpJRYvXsxGG23Efffdx0svvcSCBQv49a9/ze677w7AyJEjmTt3LqNGjXrdx7Xrrrty0UUXccQRRzB16tSl++zJbrvtxkUXXcSHPvQhpk6d2ud782Y5xUKSJGkAO+igg9h0003ZZpttOO6449hrr72AYurCpZdeyqc+9SnG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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Filter and calculate absolute error from ideal\n", + "method_vals = df[df[\"method\"].isin([\n", + " \"cut_no_dd\", \"cut_with_dd_before\", \"cut_with_dd_after\", \"ideal_cut_no_dd\"\n", + "])].dropna(subset=[\"reconstructed expectation value\", \"qps\"])\n", + "\n", + "ideal_val = method_vals[method_vals[\"method\"] == \"ideal_cut_no_dd\"][\"reconstructed expectation value\"].mean()\n", + "method_vals[\"abs_error\"] = (method_vals[\"reconstructed expectation value\"] - ideal_val).abs()\n", + "\n", + "# Group by method and QPS\n", + "dd_qps_comparison = method_vals.groupby([\"method\", \"qps\"])[\"abs_error\"].mean().reset_index()\n", + "\n", + "# Plot grouped bars on a log scale\n", + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(data=dd_qps_comparison, x=\"qps\", y=\"abs_error\", hue=\"method\")\n", + "\n", + "plt.yscale(\"log\") # 🔍 Set Y-axis to log scale\n", + "plt.title(\"DD vs No DD Accuracy Across QPS (Log Scale)\")\n", + "plt.ylabel(\"Absolute Error from Ideal ⟨H⟩ (log scale)\")\n", + "plt.xlabel(\"QPS\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'Rectangle' object has no property 'errorbar'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbarplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgrouped_vals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"method\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"reconstructed expectation value\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"qps\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrorbar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"sd\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Reconstructed Expectation Value per Method (Grouped by QPS)\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mbarplot\u001b[0;34m(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge, ax, **kwargs)\u001b[0m\n\u001b[1;32m 3150\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgca\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3151\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3152\u001b[0;31m \u001b[0mplotter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3153\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3154\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self, ax, bar_kws)\u001b[0m\n\u001b[1;32m 1655\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbar_kws\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1656\u001b[0m \u001b[0;34m\"\"\"Make the plot.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1657\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw_bars\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbar_kws\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1658\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mannotate_axes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1659\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0morient\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"h\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mdraw_bars\u001b[0;34m(self, ax, kws)\u001b[0m\n\u001b[1;32m 1638\u001b[0m \u001b[0;31m# Draw the bars\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1639\u001b[0m \u001b[0moffpos\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbarpos\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhue_offsets\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1640\u001b[0;31m barfunc(offpos, self.statistic[:, j], self.nested_width,\n\u001b[0m\u001b[1;32m 1641\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolors\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malign\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"center\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1642\u001b[0m label=hue_level, **kws)\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1563\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1564\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1565\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msanitize_sequence\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1566\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1567\u001b[0m \u001b[0mbound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_sig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mbar\u001b[0;34m(self, x, height, width, bottom, align, **kwargs)\u001b[0m\n\u001b[1;32m 2396\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'_nolegend_'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2397\u001b[0m )\n\u001b[0;32m-> 2398\u001b[0;31m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2399\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_interpolation_steps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2400\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0morientation\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'vertical'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, props)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/opt/anaconda3/lib/python3.8/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36m_update_property\u001b[0;34m(self, k, v)\u001b[0m\n\u001b[1;32m 999\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'set_'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1000\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1001\u001b[0;31m raise AttributeError('{!r} object has no property {!r}'\n\u001b[0m\u001b[1;32m 1002\u001b[0m .format(type(self).__name__, k))\n\u001b[1;32m 1003\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Rectangle' object has no property 'errorbar'" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Grouped bar plot: reconstructed ⟨H⟩ per method and DD type\n", + "methods = [\"cut_no_dd\", \"cut_with_dd_before\", \"cut_with_dd_after\", \"ideal_cut_no_dd\"]\n", + "grouped_vals = df[df[\"method\"].isin(methods)].dropna(subset=[\"reconstructed expectation value\"])\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(data=grouped_vals, x=\"method\", y=\"reconstructed expectation value\", hue=\"qps\", errorbar=\"sd\")\n", + "\n", + "plt.title(\"Reconstructed Expectation Value per Method (Grouped by QPS)\")\n", + "plt.ylabel(\"Reconstructed ⟨H⟩\")\n", + "plt.xlabel(\"Method\")\n", + "plt.xticks(rotation=45)\n", + "plt.grid(True, axis='y', linestyle='--')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAAGoCAYAAACKUBfBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debglVX3v//cHBAdAaaJgCyiI7YAo6EVUMImKRCAR1KgBE0Eu3taf4hCNN4SYoDEJxDGYGDqYIBAVrhMBFQVCFJyQSWZQWmRoaMGJIagg3d/fH1XH3hzOUOf07mJ37/freerZu2rVWrX2Pqe7v/1dq1alqpAkSZJGxXoPdAckSZKkQQaokiRJGikGqJIkSRopBqiSJEkaKQaokiRJGikGqJIkSRopBqjSAyTJu5N8on3/2CT/k2T9B7pfw5Ckkjyhh+s8P8myNX2dviU5LsnfPkDX/lqS1z0Q15akCQaoGjtJnpfkW0luT/KzJN9M8qwHsk9VdUNVbVxVK9ZE+0l2TfLfSe5sP/cXkmy/Jq61rmmDxXva7+7OJJcnOSLJI4bU/muTfGMYbfUhyROTfCbJT9rfpUuTvL3Lf64G/1MmSTMxQNVYSfJw4IvAPwGbAVsC7wHufiD7tSYleS5wBnAK8BhgW+AS4JtJHj/kayXJuvj3yvuqahPgUcBBwHNovr+NHthu9SvJdsB3gBuBp1XVI4BXAjsDmzyQfZO0blkX/yGRZvJEgKo6sapWVNUvq+qMqroUmn+A20zjT9sM0SeTbDpROcl1Sd7ZZo3uSvLvSbZI8uU2u/ZfSRa0527TDnUvTnJzkuVJ3jFVpwbOfVC7/7Uk722zu3cmOSPJIwfOPyDJ9W0//6rt14um+czvA06oqqOq6s6q+llVvQs4F3h3295VSf5goP0HtZ//me3+c9qs821JLkny/IFzv5bk75J8E/gFMBH0vijJNUl+nuSjSTJQ53+31/x5ktOTPG6g7KgkNya5I8mFSX57oOyhbUbz50muBKbNfCdZkuQDk46dkuTt7fs/T3JT+/1+L8nu07U1oap+VVXnA/sAv0UTrHb5TJXkLUmubb/X9ydZL8lTgCXAc9NM8bht4HILknyp7d932uBwus/6mSQ/ajOa5yR56kDZce33P2VbSfZIcnVb95+BTHmRxnuAb1XV26tqefudfK+qXl1Vt2WKKRcTv5tJ9gQOA/6o/ayXtOWvbb+XO5P8MMkfz3B9SWPCAFXj5vvAiiTHJ9lrIpgcEOAImkzjU4CtaYO4AX8I7EET7L4E+DLNP7yPpPkz9ZZJ578AWAT8HnDoDIHkZK+mCYA2BzYE/gwgzdD8vwB/DCwEHkGTCb6fJA8DdgU+M0Xxp9vPAXAisP9A2YuBn1TVRUm2BL4E/C1N1vnPgM8ledTA+a8BFtNk0a5vj/0BTQC5I/Cqtk2SvJTm+3o5TUby6+31J5wP7NRe61PAZ5I8pC07HNiu3V4MHDjV5259iiYYSnvdBTQ/g5OSPAk4BHhWmxl9MXDdDG3dR1XdCZwJ/HbHzwTwMppM4zOBfYH/XVVXAW8Avt1O8dh04Pz9aQLCBcBS4O9m6NKXaX7HNgcuAj45qXzKttr/9HwOeBfN7+8PgN1muM6LgM/OUD6tqvoK8PfA/2s/645pMtAfAfZqfw67AhfPp31J6xYDVI2VqroDeB5QwMeAHyc5NckWbfnSqjqzqu6uqh8DHwJ+d1Iz/1RVt1TVTTSByHeq6rtVdTdwMvCMSee/p6ruqqrLgI9z30BwJh+vqu9X1S9pgsmd2uOvAL5QVd+oqnuAv24/z1Q2o/lzvnyKsuU0QQk0wdw+bUALTXD8qfb9nwCnVdVpVbWyqs4ELgD2HmjruKq6oqrurapft8eOrKrbquoG4KsD/X89cERVXVVV99IELTtNZByr6hNV9dO2rQ8CDwae1NZ9FfB3bRb4RprgZjpfb7+XiQzsK2gCwZuBFW272yfZoKquq6ofzNDWVG6m+X5n/Uytf2j7fQPwj8z+e/D5qjqvbe+TrPr+7qeqjm2z43fT/Idqx9x3jux0be0NXFlVn21/bv8I/GiGPv0WU/8urY6VwA5JHlpVy6vqiiG3L2ktZICqsdMGEa+tqq2AHWiypf8IkGTzJCe1Q793AJ9gVRA34ZaB97+cYn/jSeffOPD++vZ6XQwGCr8YaPcxg21W1S+An07Txs9pAoCFU5QtBH7StrEUuAp4SRuk7sOqAPVxwCvb4f3b2mHo501qc/Azztb/xwFHDbT1M5rM9ZYASd7RDpXf3pY/glU/g/t8dlZla++nqgo4iVWB4KtpM4vt530bTTB3a/sz7/pzmbBl2/dZP1Nrrr8H031/95Fk/SRHJvlB+zt7XVs0+Hvb9XepmPpnOeGnTP27NC9VdRfwRzRZ5OXtNIQnD6t9SWsvA1SNtaq6GjiOJlCFZni/gKdX1cNpsoczzcnrYuuB94+lybytjuXAVhM7SR5Kk9m6nzYA+DbNjSyTvQo4a2B/Yph/X5qs2tL2+I3Af1TVpgPbRlV15OCl5tD/G4HXT2rvoVX1rXa+6Z+3fVvQDnnfzqqfwXLu/33O5ETgFW0m89k0w9lNh6s+VVXPowkuC/iHrh8gycY0w91fn+0zDVSb7vdgLt/dVF5N8zN7EU0wv81ENzvUvc/32U6H2Hr60/kvmiku07kLmMjCk+bO/sGpIPf7rFV1elXtQRP4Xk0zsiFpzBmgaqwkeXKboduq3d+aJig7tz1lE+B/gNvauZfvHMJl/yrJw9obVw4C/t9qtvdZmkznrkk2pJlbOFMwcihwYHuTziZJFqRZY/O5bd0JJ9HM0fz/WJU9hSaL/JIkL26zdQ9pb4bZivlZAvzFxI08SR6RZCKA3gS4F/gx8KAkfw08fKDup9u6C9rrv3mmC1XVd9u2/g04vapua6/5pCQvTPJg4Fc0me9Zl/hK8uAk/wv4T5rs9Mc7fKYJ72z7vTXwVlb9HtwCbNX+LOdjE5pVKH5KExz+/Rzqfgl4apKXp7lB7y3Ao2c4/3Bg1zQ3eT0aIMkTknwizc2E3wcekuT3k2xAM7f1wQP1bwG2SbvSQ5obDPdp56LeTfNnb40stSZp7WKAqnFzJ00m7TtJ7qIJTC8HJu6ufw/NTSy30/zj/fkhXPNsmhtTzgI+UFVnrE5j7Ry9N9MElMtpPtOtTLNUVlV9g+YmoJe3519PM0/2eVV1zcB5y2myrbsyEES3cz33pbkJ6Mc02cJ3Ms+/P6rqZJps5UntkPTlwF5t8ek0N/x8v+3nr7jvkPN72uM/pFk66z86XPJEmuziYND9YOBImikOP6K5ueiwGdr4v0nupBm6PwG4ENi1zVDP9pkmnNLWu5jmd+vf2+P/DVwB/CjJTzp8nslOoPlObgKuZNV/tmZVVT+hya4fSRPgLgK+OcP5P6D5j802wBVJbqfJSl8A3FlVtwNvpPkPwU00GdXBu/onbtb7aZKLaH6H3kGTTf4ZzXzvN3btv6R1V5opR5KGLck2NIHUBu3NKWvqOhsDtwGLquqHa+o6mr8kRfPzWTrryZIkM6jS2ijJS9ppAxsBHwAuYw7LJEmSNMoMUKW10740w6I30wzL7lcOh0iSWkmOTXJrksunKX9ykm8nuTvJn00q2zPNA0yWJjl04PhmSc5M8xCWM3P/tcSH13//TZMkSVq3JPkdmhsPT6iqHaYo35xmFZOXAj+vqg+0x9enuQ9gD5o55OcD+1fVlUneB/ysqo5sA9cFVfXna6L/ZlAlSZLWMVV1DqvWap6q/NZqHt3860lFuwBLq+ra9mEwJ9GM2tG+Ht++P54muF0jHrSmGl5djz/qQ6Z2JUnSUFz71rev7prWq23lj544tNhm/YXXvJ7mEdMTjqmqY4bQ9Jbcd/WUZTSr3wBs0a74QlUtb7Owa8TIBqiSJEmaWhuMDiMgnWyqQL73pKEBqiRJUg9WsnJoba3BOZrLuO8T5bZi1ZPvbkmysM2eLqRZg3uNcA6qJEmSJpwPLEqybfuEu/2AU9uyU4ED2/cH0jyAZI0wgypJktSDFTW8DOpsAVySE4HnA49MsozmUcUbAFTVkvZxxRfQPE56ZZK3AdtX1R1JDqF5st/6wLHtEwyheercp5McDNxA8yS6NcIAVZIkqQcre5zKWVX7z1L+I5rh+6nKTgNOm+L4T4Hdh9LBWTjEL0mSpJFiBlWSJKkHw7xJal1ngCpJktSDFT69szMDVEmSpB70OQd1beccVEmSJI0UM6iSJEk9WGEGtTMDVEmSpB44xN+dQ/ySJEkaKWZQJUmSeuBd/N0ZoEqSJPXAVVC7c4hfkiRJI8UMqiRJUg+8i787A1RJkqQerDA+7cwAVZIkqQfOQe3OOaiSJEkaKWZQJUmSerCCPNBdWGsYoEqSJPVgpXNQO3OIX5IkSSPFDKokSVIPHOLvzgBVkiSpBwao3RmgSpIk9WBlGaB25RxUSZIkjRQzqJIkST1wiL87A1RJkqQerHDgujO/KUmSJI0UM6iSJEk98Cap7gxQJUmSeuAc1O4c4pckSdJIMYMqSZLUgxVlXrArA1RJkqQerHTgujMDVEmSpB44B7U7Q3lJkiSNFDOokiRJPXAOancGqJIkST1Y6RB/Z4bykiRJGilmUCVJknqwwrxgZwaokiRJPXAOand+U5IkST1YyXpD22aT5Ngktya5fJryJPlIkqVJLk3yzPb4k5JcPLDdkeRtbdm7k9w0ULb3UL+gAWZQJUmS1j3HAf8MnDBN+V7AonZ7NnA08Oyq+h6wE0CS9YGbgJMH6n24qj6whvr8GwaokiRJPVhR/d3FX1XnJNlmhlP2BU6oqgLOTbJpkoVVtXzgnN2BH1TV9Wuwq1NyiF+SJKkHK1hvaFuSxUkuGNgWz7E7WwI3Duwva48N2g84cdKxQ9opAccmWTDHa3ZmgCpJkrSWqapjqmrnge2YOTYxVTq3flOYbAjsA3xmoPxoYDuaKQDLgQ/O8ZqdOcQvSZLUg5WjdRf/MmDrgf2tgJsH9vcCLqqqWyYODL5P8jHgi2uqcyP1TUmSJK2rhjnEPwSnAge0d/M/B7h90vzT/Zk0vJ9k4cDuy4ApVwgYBjOokiRJ65gkJwLPBx6ZZBlwOLABQFUtAU4D9gaWAr8ADhqo+zBgD+D1k5p9X5KdaKYCXDdF+dAYoEqSJPWg57v495+lvIA3TVP2C+C3pjj+muH0bnYGqJIkST3ossC+GgaokiRJPfBRp935TUmSJGmkmEGVJEnqwcoplx7VVAxQJUmSeuAQf3d+U5IkSRopZlAlSZJ6MKQF9seCAaokSVIPVva4DurazlBekiRJI8UMqiRJUg8c4u/OAFWSJKkHK72LvzMDVEmSpB6scB3UzgzlJUmSNFLMoEqSJPXAIf7uDFAlSZJ64BB/d4bykiRJGilmUCVJknrgEH93BqiSJEk9WGGA2pkBqiRJUg9WOge1M0N5SZIkjRQzqJIkST1wiL87A1RJkqQerCyH+LsylJckSdJIMYMqSZLUgxXmBTszQJUkSeqBQ/zdGcpLkiRppJhBlSRJ6sFK84KdGaBKkiT1YIVD/J0ZoEqSJPXAOajdmWuWJEnSSDGDKkmS1IOVPkmqMwNUSZKkHqzAIf6uDOUlSZI0UsygSpIk9cCbpLozQJUkSeqBc1C7M0CVJEnqwUrnoHZmKC9JkrSOSXJskluTXD5NeZJ8JMnSJJcmeeZA2XVJLktycZILBo5vluTMJNe0rwvWVP8NUCVJknqwojK0rYPjgD1nKN8LWNRui4GjJ5W/oKp2qqqdB44dCpxVVYuAs9r9NcIAVZIkqQcra72hbbOpqnOAn81wyr7ACdU4F9g0ycJZmt0XOL59fzzw0g4fe14MUCVJktYySRYnuWBgWzzHJrYEbhzYX9YeAyjgjCQXTmp3i6paDtC+bj7f/s/Gm6QkSZJ6MMxlpqrqGOCY1Whiqs5U+7pbVd2cZHPgzCRXtxnZ3phBlSRJ6sFKMrRtCJYBWw/sbwXcDFBVE6+3AicDu7Tn3DIxDaB9vXUYHZmKAaokSdL4ORU4oL2b/znA7VW1PMlGSTYBSLIR8HvA5QN1DmzfHwicsqY65xC/JElSD/p8klSSE4HnA49Msgw4HNgAoKqWAKcBewNLgV8AB7VVtwBOTgJNnPipqvpKW3Yk8OkkBwM3AK9cU/03QJUkSepBn0+Sqqr9Zykv4E1THL8W2HGaOj8Fdh9KB2dhgCpJktSDPjOoazvnoEqSJGmkmEGVJEnqwZDuvh8LBqiSJEk9cIi/O4f4JUmSNFLMoEqSJPXADGp3BqiSJEk9MEDtziF+SZIkjRQzqJIkST0wg9qdAaokSVIPXGaqOwNUSZKkHphB7c45qJIkSRopZlAlSZJ6YAa1OwNUSZKkHhigducQvyRJkkaKGVRJkqQemEHtzgBVkiSpB2WA2pkBqiRJUg9cB7U756BKkiRppJhBlSRJ6oFzULszQJUkSeqBc1C7c4hfkiRJI8UMqiRJUg8c4u/OAFWSJKkHDvF35xC/JEmSRooZVEmSpB44xN+dAaokSVIPqh7oHqw9DFAlSZJ64JOkunMOqiRJkkaKGVRJkqQeeBd/dwaokiRJPfAmqe4c4pckSdJIMYMqSZLUA+/i784AVZIkqQfOQe3OAFWSJKkHBqjdOQdVkiRJI8UAVZIkqQcrK0PbZpPk2CS3Jrl8mvIk+UiSpUkuTfLM9vjWSb6a5KokVyR560Cddye5KcnF7bb30L6cSQxQJUmSelA1vK2D44A9ZyjfC1jUbouBo9vj9wLvqKqnAM8B3pRk+4F6H66qndrttDl+BZ05B1WSJGkdU1XnJNlmhlP2BU6oqgLOTbJpkoVVtRxY3rZxZ5KrgC2BK7tcN8kXgGlD6Krap0s7BqiSJEk9GLGbpLYEbhzYX9YeWz5xoA1wnwF8Z+C8Q5IcAFxAk2n9+aR2P9C+vhx4NPCJdn9/4LqunXOIX5IkqQdVGdqWZHGSCwa2xXPszlTR8m8yn0k2Bj4HvK2q7mgPHw1sB+xEE8h+8P6fsc6uqrOBZ1TVH1XVF9rt1cDzunbODKokSdJapqqOAY5ZjSaWAVsP7G8F3AyQZAOa4PSTVfX5gWveMvE+yceAL87Q/qOSPL6qrm3P3xZ4VNfOGaBKkiT1YMQeJHUqzXD9ScCzgduranmSAP8OXFVVHxqsMDBHFeBlwJQrBLT+FPhakmvb/W2A13ftnAGqJElSD/qcg5rkROD5wCOTLAMOBzZo+lFLgNOAvYGlwC+Ag9qquwGvAS5LcnF77LD2jv33JdmJJta+jhkCzqr6SpJFwJPbQ1dX1d1d+2+AKkmS1IceU6hVtf8s5QW8aYrj32Dq+alU1Wvm2I1FwJOAhwA7JqGqTuhS0QBVkiRJQ5XkcJoM7vY02dq9gG8AnQJU7+KXJEnqwTDv4l8LvALYHfhRVR0E7Ag8uGtlM6iSJEk96PgEqHXFL6tqZZJ7kzwcuBV4fNfKs2ZQk7wyySbt+3cl+fzE81olSZKkKVyQZFPgY8CFwEXAeV0rd8mg/lVVfSbJ84AX0zwh4GiaJQkkSZLUwVoyND8UVfXG9u2SJF8BHl5Vl3at32UO6or29feBo6vqFGDDuXVTkiRpzFWGt424NP4kyV9X1XXAbUl26Vq/S4B6U5J/BV4FnJbkwR3rSZIkaTz9C/BcYGK5qzuBj3at3CXQfBVwOrBnVd0GbAa8c46dlCRJGmtVw9vWAs+uqjcBvwKoqp8zhxH4LgHqv1bV56vqmvYCy2meMCBJkqSuaojb6Pt1kvVpe5vkUcDKrpW73CT11MGd9mL/ay49lCRJGnfjdJMU8BHgZGDzJH9Hsy7qu7pWnjZATfIXwGHAQ5PcwarHXt0DHDPv7kqSJGmdVlWfTHIhzWL9AV5aVVd1rT9tgFpVRwBHJDmiqv5i9bsqSZI0xtaOoflhuga4gzbeTPLYqrqhS8UuQ/xfTvI7kw9W1Tlz6qIkSdIYG6ch/iRvBg4HbqFZsjQ0IfrTu9TvEqAO3rH/EGAXmicCvHBOPZUkSdK4eCvwpKr66XwqzxqgVtVLBveTbA28bz4XkyRJGlvjNcR/I3D7fCt3yaBOtgzYYb4XlCRJGk/r/hB/kre3b68FvpbkS8DdE+VV9aEu7cwaoCb5J1bF/OsBOwGXzKm3kiRJ4248MqibtK/XAzfQLM7feYH+CV0yqBcMvL8XOLGqvjnXC0mSJGndVlXvadfMP76q/mS+7cy0DuqjgEdV1fGTjj81yaOq6sfzvagkSdLYGY8MKlW1IsmjkmxYVffMp42ZMqj/BBw9xfGtgL8EXj2fC0qSJI2lMVpmCrgO+GaSU4G7Jg4OYw7q06rq7MkHq+r0JB+cay8lSZI0Nm5ut/VYNS+1s5kC1A3mWSZJkqRJakyG+KGZiwqQZKOqumu28ydbb4aya5LsPflgkr1olg6QJElSVzXEbcQleW6SK4Gr2v0dk/xL1/ozZVD/FPhiklfRPDkKYGfgucAfzLO/kiRJWvf9I/Bi4FSAqrokye90rTxtBrWqvg88DTgb2Kbdzgae3pZJkiSpq8rwtrVAVd046dCKrnVnXAe1qu4GPj6fTkmSJGmVrAVD80N0Y5JdgUqyIfAW2uH+LmaagypJkqRhGaM5qMAbgDcBWwLLaJ5E+qaulbs8SUqSJEmai1TVH8+38rQZ1CRnta//MN/GJUmS1BqvOajfSnJGkoOTbDrXyjNlUBcm+V1gnyQnAff5NqrqorleTJIkaWytHUPzQ1FVi5LsAuwH/GW75NRJVfWJLvVnClD/GjiU5tGmkx9LVcAL59FfSZIkjYGqOg84L8nf08SSxwOrF6BW1WeBzyb5q6p671B6KkmSNK7GKIOa5OHAy2gyqNsBJwO7dK0/601SVfXeJPsAE4urfq2qvjiPvkqSJI2vMQpQgUuA/wT+pqq+PdfKswaoSY6giXg/2R56a5Ldquov5noxSZIkjYXHAxsxz7C8yzqovw/sUVXHVtWxwJ7tMUmSJHU1JnfxJ3kjcB1wPc2C/de3xzrrug7qpsDP2vePmMsFJEmSNB5PkkryLmBX4AVVdW177PHAUUk2q6q/7dJOlwD1COC7Sb5Ks9TU7wAO70uSJM3FGASowGuAHavqVxMHquraJK+imZfaKUCddYi/qk4EngN8vt2eW1UnzavLkiRJWuOSHJvk1iSXT1OeJB9JsjTJpUmeOVC2Z5LvtWWHDhzfLMmZSa5pXxdM1fZgcDpw7JfAyq797zIHlapaXlWnVtUpVfWjro1LkiTpAXEczX1D09kLWNRui4GjAZKsD3y0Ld8e2D/J9m2dQ4GzqmoRcFa7P9myJLtPPpjkhcDyrp3vOgd1XpJsAWxJk9S+uapuWZPXkyRJGlV9zkGtqnOSbDPDKfsCJ1RVAecm2TTJQmAbYOnA/NGT2nOvbF+f39Y/Hvga8OeT2n0LcEqSbwAX0sSAzwJ2a+t30imDOldJdkpyLk3H3we8Hzg7ybmDKeQp6i1OckGSC+741pyXzJIkSRoLgzFTuy2eYxNbAjcO7C9rj013HGCLqloOzeg6sPnkRqvqCmAH4ByaYPfx7fsd2rJOZsygJlkPuLSqdujaYOs44PVV9Z1J7T0H+Diw41SVquoY4BiAxx/1ofGYSixJksbDEJeHGoyZ5mmqztQMxztr56AeO59OTZgxg1pVK4FLkjx2ju1uNDk4bds7l2bRVkmSpPFSQ9xW3zJg64H9rYCbZzgOcEs7DYD29dah9GQKXeagLgSuSHIecNfEwaraZ4Y6X07yJeAEVqWJtwYOAL4yz75KkiStvUZrbPhU4JB2jumzgduranmSHwOLkmwL3ATsB7x6oM6BwJHt6ylrqnNdAtT3zLXRqnpLkr1oJsNuSZMuXgZ8tKpOm2t7kiRJ6i7JiTQ3ND0yyTLgcGADgKpaApwG7A0sBX4BHNSW3ZvkEOB0YH3g2IG5o0cCn05yMHAD8Mo11f9ZA9SqOjvJ44BFVfVfSR7Wdni2el8GvjyEPkqSJK31er6Lf/9Zygt40zRlp9EEsJOP/xS43xJSU0lyGffPGd8OXAD8bdvWtGYNUJP8H5r1sTYDtqPJiC7p2sEp2lvcTuyVJEkaH6M1xL+mfRlYAXyq3d+vfb2D5mb6l8xUucsQ/5uAXYDvAFTVNUnut6zAHAzvFjZJkiSNot2qareB/cuSfLOqdkvyJ7NV7hKg3l1V9yRNXJnkQXT4P0CSJ7NqDmrR3AF2alX9a4drSpIkrVvGK4O6cZJnT6zqlGQXYOO27N7ZKncJUM9Ochjw0CR7AG8EvjBThSR/DuwPnASc1x7eCjgxyUlVdWSH60qSJK0z+pyDOgJeBxybZGOa0fM7gNcl2Qg4YrbKXQLUQ4GDgcuA19NMmv23WeocDDy1qn49eDDJh4AraO4CkyRJ0jqoqs4HnpbkEUCq6raB4k/PVr/LXfwrkxxPMwe1gO+1d37NZCXwGOD6SccXtmWSJEnjZYhPkhp1SR4M/CHN404fNDFVtKr+pkv9Lnfx/z7NXfs/oEnRbpvk9e0yUtN5G3BWkmtYtVD/Y4EnAId06ZgkSdI6ZbyG+E+hWVbqQuDuuVbuMsT/QeAFVbUUIMl2wJeYYY3TqvpKkifS3P0/uFD/+VW1Yq6dlCRJWtuN2RzUrapqz/lW7hKg3joRnLaupcOzV6tqJXDufDsmSZKktda3kjytqi6bT+VpA9QkL2/fXpHkNJoJrUXzWKvz53MxSZKksTVeGdTnAa9N8kOaIf7QPMDq6V0qz5RBHVzh/xbgd9v3PwYWzKOjkiRJY2vMhvj3Wp3K0waoVXXQ6jQsSZKk8ZLk4VV1B3Dn6rTT5S7+bYE30y4TMHG8qvZZnQtLkiSNlfHIoH4K+AOau/eL+z7ivoDHd2mky01S/wn8O83To1zDVJIkaT7GIECtqj9oX7ddnXa6BKi/qqqPrM5FJEmSxt04zEFN8syZyqvqoi7tdAlQj0pyOHAGAwutdr2AJEmSxsYHZygr4IVdGukSoD4NeE3b4MQQf+cLSJIkaTxU1QuG0U6XAPVlwOOr6p5hXFCSJGksjcEQ/4QkDwHeSMzalpIAABJtSURBVLMeagFfB5ZU1a+61F+vwzmXAJvOu4eSJEkaNycATwX+CfhnYHvgP7pW7pJB3QK4Osn53HcOqstMSZIkdTQON0kNeFJV7Tiw/9Ukl3St3CVAPXzufZIkSdJ9jFeA+t0kz6mqcwGSPBv4ZtfKswaoVXX2anROkiRJ4+fZwAFJbmj3HwtcleQyoKrq6TNV7vIkqTtZFfNvCGwA3FVVD59/nyVJksbMeGVQ91ydyl0yqJsM7id5KbDL6lxUkiRp3IzTHNSquj7JAmBrBuLNYS7UP/mC/5nk0LnWkyRJGmtjFKAmeS/wWuAHrPrkw1uoP8nLB3bXA3ZmrL5iSZIkzdGrgO3mu45+lwzqSwbe3wtcB+w7n4tJkiSNq3Ea4gcup1lH/9b5VO4yB/Wg+TQsSZKkAeMVoB5Bs9TU5cxjHf1pA9Qkfz1Dvaqq93buoiRJksbJ8cA/AJcBK+daeaYM6l1THNsIOBj4LcAAVZIkqavxyqD+pKo+Mt/K0waoVfXBifdJNgHeChwEnAR8cLp6kiRJur8xm4N6YZIjgFO57xD/6i8zlWQz4O3AH9Okap9ZVT+ff18lSZI0Bp7Rvj5n4NjqLzOV5P3Ay4FjgKdV1f/Mt4eSJEljb4wyqFX1gtWpP1MG9R00Kdl3AX+ZZOJ4muv6qFNJkqTOxihABUjy+8BTgYdMHKuqv+lSd6Y5qOutftckSZIE4zUHNckS4GHAC4B/A14BnNe1vkGoJEmShm3XqjoA+HlVvQd4LrB118oGqJIkSX2oIW6zSLJnku8lWZrk0CnKFyQ5OcmlSc5LskN7/ElJLh7Y7kjytrbs3UluGijbe4Yu/LJ9/UWSxwC/BradveeNLo86lSRJ0mrqa4g/yfrAR4E9gGXA+UlOraorB047DLi4ql6W5Mnt+btX1feAnQbauQk4eaDeh6vqAx268cUkmwLvBy6iCas/1vUzmEGVJElat+wCLK2qa6vqHpo17PeddM72wFkAVXU1sE2SLSadszvwg6q6fq4dqKr3VtVtVfU54HHAk6tqpqeU3ocBqiRJUh/6G+LfErhxYH9Ze2zQJTTLiZJkF5ogcqtJ5+wHnDjp2CHttIBjkyyYfOEkz0ry6IH9A4BPA+9t19fvxABVkiSpD0MMUJMsTnLBwLZ44Erh/iaHtUcCC5JcDLwZ+C5w728aSDYE9gE+M1DnaGA7mikAy5n6yaL/CtzTtvE77XVOAG6nWVu/E+egSpIk9WCqqHG+quoYpg/4lnHfO+a3Am6eVP8OmkfYk2ax+x+224S9gIuq6paBOr95n+RjwBenuPb6VfWz9v0fAce0w/yfa4PhTsygSpIkrVvOBxYl2bbNhO4HnDp4QpJN2zKA1wHntEHrhP2ZNLyfZOHA7suAy6e49vpJJhKguwP/PVDWOTFqBlWSJKkPPd3FX1X3JjkEOB1YHzi2qq5I8oa2fAnwFOCEJCuAK4GDJ+oneRjNCgCvn9T0+5LsRPNJrpuiHJqg9uwkP6FZaurrbZtPoBnm78QAVZIkqQd9Pkmqqk4DTpt0bMnA+28Di6ap+wvgt6Y4/poO1/27JGcBC4EzqmriU69HM9e1EwNUSZIkDU1VnTvFse/PpQ0DVEmSpD70mEFd2xmgSpIk9cEAtTPv4pckSdJIMYMqSZLUgz5vklrbGaBKkiT1wQC1MwNUSZKkHphB7c45qJIkSRopZlAlSZL6YAa1MwNUSZKkHjjE351D/JIkSRopZlAlSZL6YAa1MwNUSZKkPhigdmaAKkmS1APnoHbnHFRJkiSNFDOokiRJfTCD2pkBqiRJUg9SRqhdOcQvSZKkkWIGVZIkqQ8mUDszQJUkSeqBd/F35xC/JEmSRooZVEmSpD6YQe3MAFWSJKkHDvF3Z4AqSZLUBwPUzpyDKkmSpJFiBlWSJKkHDvF3Z4AqSZLUBwPUzhzilyRJ0kgxgypJktQDh/i7M0CVJEnqQxmhduUQvyRJkkaKGVRJkqQeOMTfnQGqJElSHwxQOzNAlSRJ6kFWPtA9WHs4B1WSJEkjxQyqJElSHxzi78wAVZIkqQfeJNWdQ/ySJEnrmCR7JvlekqVJDp2ifEGSk5NcmuS8JDsMlF2X5LIkFye5YOD4ZknOTHJN+7pgTfXfAFWSJKkPVcPbZpBkfeCjwF7A9sD+SbafdNphwMVV9XTgAOCoSeUvqKqdqmrngWOHAmdV1SLgrHZ/jTBAlSRJ6kFqeNssdgGWVtW1VXUPcBKw76RztqcJMqmqq4FtkmwxS7v7Ase3748HXjqHjz8nBqiSJEl9qOFtSRYnuWBgWzxwpS2BGwf2l7XHBl0CvBwgyS7A44CtBnp6RpILJ7W7RVUtB2hfN5/vVzEbb5KSJElay1TVMcAx0xRnqiqT9o8EjkpyMXAZ8F3g3rZst6q6OcnmwJlJrq6qc4bR764MUCVJknrQ4138y4CtB/a3Am4ePKGq7gAOAkgS4IftRlXd3L7emuRkmikD5wC3JFlYVcuTLARuXVMfwCF+SZKkPvR0kxRwPrAoybZJNgT2A04dPCHJpm0ZwOuAc6rqjiQbJdmkPWcj4PeAy9vzTgUObN8fCJyy2t/JNMygSpIkrUOq6t4khwCnA+sDx1bVFUne0JYvAZ4CnJBkBXAlcHBbfQvg5CapyoOAT1XVV9qyI4FPJzkYuAF45Zr6DAaokiRJPehzof6qOg04bdKxJQPvvw0smqLetcCO07T5U2D34fZ0agaokiRJffBJUp05B1WSJEkjxQyqJElSD/oc4l/bGaBKkiT1YaURalcGqJIkSX0wPu3MOaiSJEkaKWZQJUmSeuAc1O4MUCVJkvow+xOg1HKIX5IkSSPFDKokSVIPHOLvzgBVkiSpDwaonRmgSpIk9SDOQe3MOaiSJEkaKWZQJUmS+rDyge7A2sMAVZIkqQcO8XfnEL8kSZJGihlUSZKkPphA7cwAVZIkqQ8O8XfmEL8kSZJGihlUSZKkHvgkqe4MUCVJkvrgEH9nBqiSJEk9iOugduYcVEmSJI0UM6iSJEl9cIi/MwNUSZKkPhifduYQvyRJkkaKGVRJkqQexCH+zgxQJUmS+mCA2plD/JIkSRopZlAlSZL64DqonRmgSpIk9cA5qN0ZoEqSJPXBALUz56BKkiRppJhBlSRJ6oMZ1M4MUCVJkvrgTVKdOcQvSZKkkWKAKkmS1INUDW2b9VrJnkm+l2RpkkOnKF+Q5OQklyY5L8kO7fGtk3w1yVVJrkjy1oE6705yU5KL223voX5BAxzilyRJ6kNPc1CTrA98FNgDWAacn+TUqrpy4LTDgIur6mVJntyevztwL/COqrooySbAhUnOHKj74ar6wJr+DGZQJUmS+lA1vG1muwBLq+raqroHOAnYd9I52wNnNd2qq4FtkmxRVcur6qL2+J3AVcCWw/waujBAlSRJWsskWZzkgoFt8UDxlsCNA/vLuH+QeQnw8ratXYDHAVtNusY2wDOA7wwcPqSdFnBskgVD+TBTMECVJEnqwxAzqFV1TFXtPLAdM3ClTHX1SftHAguSXAy8GfguzfB+00CyMfA54G1VdUd7+GhgO2AnYDnwweF8MffnHFRJkqQ+9LfM1DJg64H9rYCbB09og86DAJIE+GG7kWQDmuD0k1X1+YE6t0y8T/Ix4ItrqP9mUCVJktYx5wOLkmybZENgP+DUwROSbNqWAbwOOKeq7miD1X8HrqqqD02qs3Bg92XA5WvqA5hBlSRJ6kGX5aGGoaruTXIIcDqwPnBsVV2R5A1t+RLgKcAJSVYAVwIHt9V3A14DXNYO/wMcVlWnAe9LshPNdIHrgNevqc9ggCpJktSHHh912gaUp006tmTg/beBRVPU+wZTz2Glql4z5G5OyyF+SZIkjRQzqJIkSX1Y2V8GdW1ngCpJktSHHof413YGqJIkSX0wQO3MOaiSJEkaKWZQJUmS+mAGtTMDVEmSpD54k1RnDvFLkiRppJhBlSRJ6kOtfKB7sNYwQJUkSeqDc1A7M0CVJEnqg3NQO3MOqiRJkkaKGVRJkqQ+OMTfmQGqJElSHwxQO3OIX5IkSSPFDKokSVIfzKB2ZoAqSZLUh5Wug9qVQ/ySJEkaKWZQJUmS+uAQf2cGqJIkSX0wQO3MAFWSJKkPPkmqM+egSpIkaaSYQZUkSepBlXfxd2WAKkmS1AeH+DtziF+SJEkjxQyqJElSH7yLvzMDVEmSpD74JKnOHOKXJEnSSDGDKkmS1AeH+DszQJUkSepBOcTfmQGqJElSH8ygduYcVEmSJI0UM6iSJEl9cKH+zgxQJUmS+uCjTjtziF+SJEkjxQyqJElSD8oh/s4MUCVJkvrgEH9nDvFLkiT1oFbW0LbZJNkzyfeSLE1y6BTlC5KcnOTSJOcl2WG2ukk2S3Jmkmva1wVD+3ImMUCVJElahyRZH/gosBewPbB/ku0nnXYYcHFVPR04ADiqQ91DgbOqahFwVru/RhigSpIk9aFWDm+b2S7A0qq6tqruAU4C9p10zvY0QSZVdTWwTZItZqm7L3B8+/544KWr+5VMZ2TnoF771rfnge6DpNGXZHFVHfNA90OSZnPmys8MLbZJshhYPHDomIG/C7cEbhwoWwY8e1ITlwAvB76RZBfgccBWs9TdoqqWA1TV8iSbD+OzTGVkA1RJ6mgxYIAqaay0weh0f/dNFQhPnrh6JHBUkouBy4DvAvd2rLvGGaBKkiStW5YBWw/sbwXcPHhCVd0BHASQJMAP2+1hM9S9JcnCNnu6ELh1zXTfOaiSJEnrmvOBRUm2TbIhsB9w6uAJSTZtywBeB5zTBq0z1T0VOLB9fyBwypr6AGZQJa3tHN6XpAFVdW+SQ4DTgfWBY6vqiiRvaMuXAE8BTkiyArgSOHimum3TRwKfTnIwcAPwyjX1GVLlUw0kSZI0OhzilyRJ0kgxQJUkSdJIMUCVNJKSHJvk1iSXT1H2Z0kqySOnqTvjI/4kSaPNAFXSqDoO2HPywSRbA3vQTNC/n46P+JMkjTADVEkjqarOAX42RdGHgf/L9AtHd3nEnyRphBmgSlprJNkHuKmqLpnhtKke07flGu2YJGmoXAdV0lohycOAvwR+b7ZTpzjmenqStBYxgyppbbEdsC1wSZLraB6/d1GSR086b9ZH/EmSRpsZVElrhaq6DNh8Yr8NUneuqp9MOvU3j+kDbqJ5TN+r++qnJGn1mUGVNJKSnAh8G3hSkmXto/WmO/cxSU6D5jF9wMRj+q4CPj3wmD5J0lrAR51KkiRppJhBlSRJ0kgxQJUkSdJIMUCVJEnSSDFAlSRJ0kgxQJUkSdJIMUCVtFqSPDrJSUl+kOTKJKcleWK79NNnh3SNNyQ5oH3/2iSPmea845L8MMklSb6f5IQk837MaZKXJtl+YP9rSXaeb3uSpG4MUCXNW5IAJwNfq6rtqmp74DBgi6q6uapeMUWdOT8gpKqWVNUJ7e5rgSkD1NY7q2pH4EnAd4GvJtlwrtdsvRTYftazJElDZYAqaXW8APh1VS2ZOFBVF1fV15Nsk+Ry+E3W8zNJvgCckWTjJB9PclmSS5P8YXve/0y0k+QVSY5r3787yZ8leQWwM/DJJBcneeh0HavGh4EfAXu17fxekm8nuajtz8bt8euS/EOS89rtCUl2BfYB3t9ea7u26Ve253w/yW8P64uUJK1igCppdewAXNjx3OcCB1bVC4G/Am6vqqdV1dOB/+7SQFV9FrgA+OOq2qmqftmh2kXAk5M8EngX8KKqembbztsHzrujqnYB/hn4x6r6FnAqTUZ2p6r6QXveg9rz3gYc3qXfkqS5mfNQmyTN05lV9bP2/YuA/SYKqurna/C6aV+fQzNc/81mZgIb0jxKdcKJA68fnqG9z7evFwLbDK2XkqTfMECVtDquAO43z3Qadw28DzDVc5YHjz1kvp2a5BnAWe01z6yq/ac5r6Z5P9nd7esK/DtUktYIh/glrY7/Bh6c5P9MHEjyrCS/O0u9M4BDBuosaN/ekuQpSdYDXjZN3TuBTWbrWBpvARYCXwHOBXZL8oS2/GFJnjhQ5Y8GXicyq52uJUkaLgNUSfNWVUUTSO7RLjN1BfBu4OZZqv4tsCDJ5UkuobnZCuBQ4Is0ge/yaeoeByyZ4Sap97dtfh94FvCCqrqnqn5MswLAiUkupQlYnzxQ78FJvgO8FfjT9thJwDuTfHfgJilJ0hqW5t8XSRpfSa4Ddq6qnzzQfZEkmUGVJEnSiDGDKkmSpJFiBlWSJEkjxQBVkiRJI8UAVZIkSSPFAFWSJEkjxQBVkiRJI+X/B37NKRfr89c+AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Prepare pivot table: cuts x depth\n", + "heat_df = df.dropna(subset=[\"sampling_overhead\", \"cuts\", \"depth\"])\n", + "pivot = heat_df.pivot_table(\n", + " values=\"sampling_overhead\", \n", + " index=\"cuts\", \n", + " columns=\"depth\", \n", + " aggfunc=\"mean\"\n", + ")\n", + "\n", + "# Plot heatmap\n", + "plt.figure(figsize=(10, 6))\n", + "sns.heatmap(pivot, cmap=\"viridis\", annot=False, cbar_kws={'label': 'Sampling Overhead'})\n", + "plt.title(\"Sampling Overhead vs Depth and Cuts\")\n", + "plt.xlabel(\"Circuit Depth\")\n", + "plt.ylabel(\"Number of Cuts\")\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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U+tEXUrLo2ukq2b3SoLVpSQNtv16/fkO4Gnbu0panpJkbQocbnucpCHALyjnlfyyuagjIqJJc/vy174pX9Jo4FHb9/ZZgBH9TLpqdqckWF1I0uqUdus3236iXrsXeMz2bvX18q1W7JJWABZOeUdERPd6s11ne3Y+y4x8dKN01exuSbC6RFtJ4EjgAGBh4HrgOttPSXov8Bhwie3dMyBGRES7eek6294oqb7OmBJdJV01u1uaXHSJmlxtC/wnpTb+fOBjwGZ10FwU+BZlhoUMhBER0c72S8AE4KPA463kqrafpv4sSQvWRknDJR1SP5sxJbpCfQaGA/9P0tHABsC1wCnAxcB/AaOBFZuLMua3rGB1CUmLARcAp9i+o17bCtgJWAwYBexh+9bMNEZERE+16+zDkjahdAocBhxq+6+SRth+oa1aYjgwhtIoKY2RouvUMtq1gM3rn78DjrT9pKRlbD/XaIAxXyXB6hKShlIaVZxg+/pWjbykzYAngOG272k0yIiI6HfSdTbirUlXze6VEsEuYXsSZcBbX9LqNbkaCRwGvJLkKiIiZmMRANtrA0tLusz2BOB4YBpwBjC2JldDgKuAbyS5ioGuNrKYE9ueZPszwGcpK1iTbU9rvTnfg4xGZAWri0h6F6XBxUbAryizKV+wPa7RwCIiol9K19mIWUtXzZiTJFhdppYKrgssAzxh+66GQ4qIiH4kXWcj5i5dNWNOBs39lhhIaqngLU3HERER/VNb19njKGVNI4C9AEu6kr93nb2hdX9DoUY0xvZLklpdNW9o76rZSqZqCeECra6awL62T8szM/BlD1ZERETMULvO7gccZPte29cCFwEjKYekXgv8vJZGzW0PSsSAVLtqjgG2Bf4g6VxJi9VkakTrvtrMotVV8zdNxRt9KytYERER0c6UVauhMGMPyTWSptCj62xm4qPbtJX3XSyp1VXzMUpXzVMkXQ7sJqlnV80cWdBFsoIVERERM6TrbMQcpatmzFWaXERERMQbpOtsxMzSVTPerCRYERERMZN0nY1IV814a7IHKyIiImaSrrMR6aoZb00SrIiIiIiIWejZVbNeWxDYCdgcGAXsYfvWrF5FSxKsiIiIiIhZS1fNmGfpIhgRERERMQvpqhlvRZpcRERERETMRrpqxrxKghURERERMQfpqhnzIglWREREREREL8kerIiIiIiIiF6SBCsiIiIiIqKXJMGKiIiIiIjoJUmwIiIiIiIiekkSrIiIiIiIiF6SBCsiIjqWJEu6oO31IEnPS/rZXD63tqSt2l4fJ+nwtxHH2/p8REQMHEmwIiKik00C3i9pSH29GfD0m/jc2sBWc70rIiJiHiXBioiITvdzYOv68+7ARa03JA2VdJ6keyTdL2l7SQsDJwCfkDRe0ifq7WtIukXSHyV9oe13HCrpv+t/B7ddP1LSI5JuAFad73/LiIjoCEmwIiKi010MjJY0GFgLuKvtvSOBm2yvC2wMnAIsBBwDXGJ7bduX1HtXA7YAPgwcK2khSR8E9gXWAz4C7C9pnXp9NLAOsBOw7vz+S0ZERGcY1HQAERERb4ftByStRFm9uqbH25sD27XtjxoMrDCbXzXO9mRgsqSJwDLAKOAK25MAJP0U2IAyQXmF7b/V62N7728UERGdLAlWREQMBGOBbwMfA5Zquy5gZ9uPtN8sab1Z/I7JbT9Po4yRmsP/pt9SpBERMaClRDAiIgaC84ATbD/Y4/q1wEGSBCBpnXr9VWDYm/i9twI7SFpU0lBgR+C2en1HSUMkDQO27Y2/REREdL6sYEVERMez/Sfg9Fm8dSLwH8ADNcl6AtgGuBn4iqTxwMlz+L33SfohcHe99APb9wNIugQYD0ygJF0RERHIToVDREREREREb0iJYERERERERC9JghUREREREdFLkmBFRERERET0kiRYERERERERvSQJVkRERERERC9JghUREREREdFLkmBFRERERET0kv8D6E6dcwIx0NIAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(12, 6))\n", + "sns.boxplot(data=log_df, x=\"method\", y=\"exec_secs\")\n", + "plt.yscale(\"log\") # 🔍 Use log scale for better visibility\n", + "plt.title(\"Execution Time Distribution per Method (Log Scale)\")\n", + "plt.ylabel(\"Execution Time (log scale, s)\")\n", + "plt.xlabel(\"Method\")\n", + "plt.xticks(rotation=45)\n", + "plt.grid(True, axis=\"y\", linestyle=\"--\")\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 125 entries, 0 to 124\n", + "Data columns (total 11 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 method 108 non-null object \n", + " 1 dd_sequence 102 non-null object \n", + " 2 expectation value 36 non-null float64\n", + " 3 reconstructed expectation value 72 non-null float64\n", + " 4 num_qubits 108 non-null float64\n", + " 5 qps 108 non-null float64\n", + " 6 cuts 108 non-null float64\n", + " 7 sampling_overhead 108 non-null float64\n", + " 8 depth 36 non-null float64\n", + " 9 avg_subcircuit_depth 72 non-null float64\n", + " 10 method, label, submit_time, exec_secs 72 non-null object \n", + "dtypes: float64(8), object(3)\n", + "memory usage: 10.9+ KB\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methoddd_sequenceexpectation valuereconstructed expectation valuenum_qubitsqpscutssampling_overheaddepthavg_subcircuit_depthmethod, label, submit_time, exec_secs
0ideal_full_no_ddXY40.738421NaN7.01.00.01.000000e+0014.0NaNNaN
1noisy_full_no_ddXY40.765437NaN7.01.00.01.000000e+0014.0NaNNaN
2ideal_cut_no_ddXY4NaN8046.7293427.01.012.02.824295e+11NaN6.0cut_no_dd_ideal,0,0.002459287643432617,0.02956...
3noisy_cut_no_ddXY4NaN8319.0293477.01.012.02.824295e+11NaN6.0cut_no_dd,0,0.002662181854248047,0.02016830444...
4noisy_cut_with_dd_afterXY4NaN-487.4982787.01.012.02.824295e+11NaN6.0cut_with_dd_after,0,0.005754947662353516,0.146...
\n", + "
" + ], + "text/plain": [ + " method dd_sequence expectation value \\\n", + "0 ideal_full_no_dd XY4 0.738421 \n", + "1 noisy_full_no_dd XY4 0.765437 \n", + "2 ideal_cut_no_dd XY4 NaN \n", + "3 noisy_cut_no_dd XY4 NaN \n", + "4 noisy_cut_with_dd_after XY4 NaN \n", + "\n", + " reconstructed expectation value num_qubits qps cuts sampling_overhead \\\n", + "0 NaN 7.0 1.0 0.0 1.000000e+00 \n", + "1 NaN 7.0 1.0 0.0 1.000000e+00 \n", + "2 8046.729342 7.0 1.0 12.0 2.824295e+11 \n", + "3 8319.029347 7.0 1.0 12.0 2.824295e+11 \n", + "4 -487.498278 7.0 1.0 12.0 2.824295e+11 \n", + "\n", + " depth avg_subcircuit_depth \\\n", + "0 14.0 NaN \n", + "1 14.0 NaN \n", + "2 NaN 6.0 \n", + "3 NaN 6.0 \n", + "4 NaN 6.0 \n", + "\n", + " method, label, submit_time, exec_secs \n", + "0 NaN \n", + "1 NaN \n", + "2 cut_no_dd_ideal,0,0.002459287643432617,0.02956... \n", + "3 cut_no_dd,0,0.002662181854248047,0.02016830444... \n", + "4 cut_with_dd_after,0,0.005754947662353516,0.146... " + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load the dataset\n", + "df = pd.read_csv(\"CC+DD - experiment.csv\")\n", + "\n", + "# Preview structure and missing data\n", + "df.info()\n", + "df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodqpsreconstructed expectation value
2ideal_cut_no_dd1.08046.729342
3noisy_cut_no_dd1.08319.029347
4noisy_cut_with_dd_after1.0-487.498278
5noisy_cut_with_dd_before1.02901.901379
9ideal_cut_no_dd1.05154.027753
\n", + "
" + ], + "text/plain": [ + " method qps reconstructed expectation value\n", + "2 ideal_cut_no_dd 1.0 8046.729342\n", + "3 noisy_cut_no_dd 1.0 8319.029347\n", + "4 noisy_cut_with_dd_after 1.0 -487.498278\n", + "5 noisy_cut_with_dd_before 1.0 2901.901379\n", + "9 ideal_cut_no_dd 1.0 5154.027753" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Keep only rows with method, qps, and reconstructed expectation value\n", + "df_filtered = df.dropna(subset=[\"method\", \"qps\", \"reconstructed expectation value\"]).copy()\n", + "\n", + "# Check what's left\n", + "df_filtered[[\"method\", \"qps\", \"reconstructed expectation value\"]].head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
methodqpsreconstructed expectation valueabs_error
2ideal_cut_no_dd1.08046.7293427919.239659
3noisy_cut_no_dd1.08319.0293478191.539664
4noisy_cut_with_dd_after1.0-487.498278614.987961
5noisy_cut_with_dd_before1.02901.9013792774.411696
9ideal_cut_no_dd1.05154.0277535026.538070
\n", + "
" + ], + "text/plain": [ + " method qps reconstructed expectation value abs_error\n", + "2 ideal_cut_no_dd 1.0 8046.729342 7919.239659\n", + "3 noisy_cut_no_dd 1.0 8319.029347 8191.539664\n", + "4 noisy_cut_with_dd_after 1.0 -487.498278 614.987961\n", + "5 noisy_cut_with_dd_before 1.0 2901.901379 2774.411696\n", + "9 ideal_cut_no_dd 1.0 5154.027753 5026.538070" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Use ideal_cut_no_dd as the reference\n", + "ideal_value = df[df[\"method\"] == \"ideal_cut_no_dd\"][\"reconstructed expectation value\"].mean()\n", + "\n", + "# Compute absolute error from ideal\n", + "df_filtered[\"abs_error\"] = (df_filtered[\"reconstructed expectation value\"] - ideal_value).abs()\n", + "\n", + "# Preview results\n", + "df_filtered[[\"method\", \"qps\", \"reconstructed expectation value\", \"abs_error\"]].head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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xOvCVSHn3AK882ee/7foA7xW+FLXAU87b0xkkbizst3rREQknvwWyk+BetXc8i7VwL9ycw/ejaCbY1THs3h9miv94VGFMp8HPnTORWrljQv/isJaIM0592W84xEBJcgiIicUJcgnPjObAJQ458oPL3jC8K/87MI7l0bgDVnYzzkX6SElIuLTU6lERESqwDmXFe8YonAWXveR5nhD5k1VciwSPbUgi4iIiIiE0E16IiIiIiIhTuouFi1atHDt2rWLdxgiIiIichLKzc3d6Zw75gFaJ3WC3K5dO9asWRPvMERERETkJGRmFT5NU10sRERERERCKEEWEREREQmhBFlEREREJMRJ3QdZRERETkwlJSVs2bKFoqKieIciQmJiIq1bt6ZevXpRra8EWURERKrdli1bSEpKol27dphZvMORU5hzjq+//potW7bQvn37qLZRFwsRERGpdkVFRTRv3lzJscSdmdG8efMqXc04KRNkMxtlZk/s3bs33qGIiIhIGEqO5URR1XPxpEyQnXOvOeemJCcnxzsUEREREallTsoEWURERKS2ysvL44033ghO/+pXv+Khhx467vK+6/anIiXIIiIiIieQ8gmy1DwlyCIiIiLVrKCggAsuuIDJkyfTtWtX0tPTeeuttxgwYADnnXce77zzDgcOHODGG2+kd+/edO/enVdeeYVvvvmGzMxMnn/+eVJTU3n++ecBWL9+PYMHD+bcc89l1qxZwXr+8Ic/0LVrV7p27cojjzwSnH/vvffSsWNHhg8fzsaNG2t8/092GuZNREREJAY+/vhjXnzxRZ544gl69+7Ns88+y/Lly3n11Ve577776Ny5M0OHDuWvf/0re/bs4cILL2T48OHMnDmTNWvW8Mc//hHwukh8+OGH5OTkUFhYSMeOHZk6dSr5+fnMnTuX1atX45yjT58+DBo0iKNHjzJv3jzee+89Dh8+TI8ePejZs2ecj8bJRQmyiIiISAy0b9+ebt26AdClSxeGDRuGmdGtWzcKCgrYsmULr776arB/cFFREZs3b66wrCuuuIIGDRrQoEEDzjzzTHbs2MHy5csZPXo0p512GgA//OEPWbZsGUePHmX06NE0atQIgB/84Ac1sLe1ixJkERERkRho0KBB8H2dOnWC03Xq1OHw4cMkJCTw0ksv0bFjxzLbrV69OmJZCQkJHD58GOdc2Lo1xN53oz7IIiIiInFwySWXMHv27GCi+9577wGQlJREYWFhpdunpaWxcOFCDh48yIEDB1iwYAEDBw4kLS2NBQsWcOjQIQoLC3nttddiuh+10UnZgmxmo4BRHTp0iHqbnrc/E5NYFiT9LiblnpP5fkzKFRERkRPD3XffzU9/+lMCgQDOOdq1a8ff//53hgwZwv33309qaiq//OUvw27fo0cPJk2axIUXXgjA5MmT6d69OwBjx44lNTWVtm3bMnDgwBrZn9rEIjXPn+h69erl1qxZE9W6SpBFRERqzoYNG+jUqVO8wxAJquicNLNc51yv8uuqi4WIiIiISAglyCIiIiIiIZQgi4iIiIiEUIIsIiIiIhJCCbKIiIiISAglyCIiIiIiIU7KcZBFRETk5FLdw63m/m5itZYnEkotyCIiIlIr9e/fv8L5kyZNYv78+cdV5q9+9Sseeuih7xJWGY888ggHDx6stvKi1bhx4wrnf5djU5uclAmymY0ysyf27t0b71BERETkBLVy5cp4h1CpeCXIEtlJmSA7515zzk1JTk6OdygiIiJygiptJXXOcfPNN9O5c2euuOIKvvzyy+A6ubm5DBo0iJ49e3LJJZfwxRdfADBnzhx69+5NSkoKY8aMiTqJ/fjjjxk+fDgpKSn06NGDTZs2sXjxYkaOHBlc5+abb+app55i1qxZbNu2jSFDhjBkyJCI+zFjxgxSUlLo27cvO3bsAOCzzz5j2LBhBAIBhg0bxubNm8OW8emnn9KvXz969+7N3XffHZwf6dicyk7KBFlEREQkWgsWLGDjxo28//77zJkzJ9iyXFJSwi233ML8+fPJzc3lxhtvZMaMGQD88Ic/5N1332Xt2rV06tSJJ598Mqq60tPTycjIYO3ataxcuZKWLVuGXXfatGm0atWKnJwccnJywq534MAB+vbty9q1a0lLS2POnDmAl2hPnDiR/Px80tPTmTZtWtgypk+fztSpU3n33Xc566yzKj02pzolyCIiIlKrLV26lHHjxpGQkECrVq0YOnQoABs3buSDDz7g4osvJjU1ld/85jds2bIFgA8++ICBAwfSrVs3srOzWbduXaX1FBYWsnXrVkaPHg1AYmIijRo1+s7x169fP9gC3bNnTwoKCgBYtWoV1113HQATJkxg+fLlYctYsWIF48aNC65bKtyxOdVpFAsRERGp9czsmHnOObp06cKqVauOWTZp0iQWLlxISkoKTz31FIsXL660DudchfPr1q3L0aNHg9NFRUXRBw7Uq1cvGH9CQgKHDx+ucL2K9jGa5ZVtdypSgiwiIiIxF89h2dLS0vjzn//MxIkT+fLLL8nJyeG6666jY8eOfPXVV6xatYp+/fpRUlLCv//9b7p06UJhYSEtW7akpKSE7Oxszj777ErradKkCa1bt2bhwoVcddVVFBcXc+TIEdq2bcv69espLi6mqKiIRYsWcdFFFwGQlJREYWEhLVq0qPJ+9e/fn3nz5jFhwgSys7ODZVZkwIABzJs3j/Hjx5OdnV3psTnVqYuFiIiI1GqjR4/mvPPOo1u3bkydOpVBgwYBXteF+fPnc8cdd5CSkkJqamqwD+6vf/1r+vTpw8UXX8wFF1wQdV1ZWVnMmjWLQCBA//792b59O23atOGaa64hEAiQnp5O9+7dg+tPmTKFyy67LOJNeuHMmjWLuXPnEggEyMrK4tFHHw277qOPPspjjz1G7969CR0FLNyxOdVZuMsBJ4NevXq5NWvWRLVudQ9QXmpB0u9iUu45me/HpFwREZGasGHDBjp16hTvMESCKjonzSzXOder/LpqQRYRERERCaE+yCIiIiJVlJGRwYoVK8rMmz59OjfccMNxl9mnTx+Ki4vLzMvKyqJbt25Rl3Hvvffy4osvlpl39dVXB4evk+goQRYRERGposcee6zay1y9evV3LmPGjBlKhqvBSdnFQo+aFhEREZFYOSkTZD1qWkRERERi5aRMkEVEREREYkV9kEVERCTmNs+M/kazaGg4VIkltSCLiIiIAJmZmbz11ltxqfuRRx7h4MGDNV5v48aNK5w/adIk5s+fX8PRnDiUIIuIiIgAM2fOZPjw4XGpO14JslRMCbKIiIjUSgUFBXTq1ImbbrqJLl26MGLECA4dOkReXh59+/YlEAgwevRodu/eDZRtNb3zzjvp3LkzgUCA2267jcLCQtq3b09JSQkA+/bto127dsHp8j7++GOGDx9OSkoKPXr0YNOmTSxevJiRI0cG17n55pt56qmnmDVrFtu2bWPIkCERHznduHFjZsyYQUpKCn379mXHjh0AfPbZZwwbNoxAIMCwYcPYvHlz2DI+/fRT+vXrR+/evbn77ruD851z3HzzzXTu3JkrrriCL7/8MsqjXDspQRYREZFa66OPPiIjI4N169bRtGlTXnrpJSZOnMgDDzxAfn4+3bp145577imzza5du1iwYAHr1q0jPz+fu+66i6SkJAYPHszrr78OwLx58xgzZgz16tWrsN709HQyMjJYu3YtK1eupGXLlmFjnDZtGq1atSInJ4ecnJyw6x04cIC+ffuydu1a0tLSmDNnDuAl2hMnTiQ/P5/09HSmTZsWtozp06czdepU3n33Xc4666zg/AULFrBx40bef/995syZw8qVK8OWcSpQgiwiIiK1Vvv27UlNTQWgZ8+ebNq0iT179jBo0CAArr/+epYuXVpmmyZNmpCYmMjkyZN5+eWXadSoEQCTJ09m7ty5AMydOzfsU/MKCwvZunUro0ePBiAxMTFYxndRv379YAt0z549KSgoAGDVqlVcd911AEyYMIHly5eHLWPFihWMGzcuuG6ppUuXMm7cOBISEmjVqhVDhw79zvGezJQgi4iISK3VoEGD4PuEhAT27NlT6TZ169blnXfeYcyYMSxcuJBLL70UgAEDBlBQUMCSJUs4cuQIXbt2rXB751zYco8ePRqcLioqqsquUK9ePcwsuC+HDx+ucL3SdcIJt7yy7U4lGuZNREREYu5EGZYtOTmZZs2asWzZMgYOHEhWVlawNbnU/v37OXjwIJdffjl9+/alQ4cOwWUTJ05k3LhxZfrvltekSRNat27NwoULueqqqyguLubIkSO0bduW9evXU1xcTFFREYsWLeKiiy4CICkpicLCQlq0aFHlferfvz/z5s1jwoQJZGdnB8usyIABA5g3bx7jx48nOzs7OD8tLY0///nPTJw4kS+//JKcnJxgq/SpSC3IIiIickp5+umnuf322wkEAuTl5ZGZmVlmeWFhISNHjiQQCDBo0CAefvjh4LL09HR2794d7KYQTlZWFrNmzSIQCNC/f3+2b99OmzZtuOaaawgEAqSnp9O9e/fg+lOmTOGyyy6LeJNeOLNmzWLu3LkEAgGysrJ49NFHw6776KOP8thjj9G7d2/27t0bnD969GjOO+88unXrxtSpU4/50XCqsXCXAU4GvXr1cmvWrIlq3Z63PxOTGBYk/S4m5Z4ov7RFRESOx4YNG+jUqVO8w6h28+fP55VXXiErKyveoUgVVXROmlmuc65X+XVPyi4WZjYKGBV6yUNEREQklm655RbefPNN3njjjXiHIjF2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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Group by method and qps\n", + "grouped_error = df_filtered.groupby([\"method\", \"qps\"])[\"abs_error\"].mean().reset_index()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(data=grouped_error, x=\"qps\", y=\"abs_error\", hue=\"method\")\n", + "\n", + "plt.yscale(\"log\")\n", + "plt.title(\"Absolute Error from Ideal per Method and QPS (Log Scale)\")\n", + "plt.ylabel(\"Abs Error from Ideal ⟨H⟩ (log scale)\")\n", + "plt.xlabel(\"QPS\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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RERERKqdqk6QNwIb3b3gO4XpBAlzEWbWDWgFzADuOoQ+GkUdNwQ2lz9UERERETkWVOlGIe7+mZltMLNm7r4G6AlE3zyHmaUAkwiWY/sYeNbM7nX3O+LsZhlwnpk1BTYB1wJaAVtERKQSrZ8Q/41m8fj++PcqtD2RaIle5u05YAnQzMw2mtlPw/LZZtYgrDYamGpmOUAycH+xZmoD/dx9nbsfAG4APom3P3ffB4wC/gmsBl5w97I3VBcREZFjyvjx43njjTeqpO9HH32UXbt2VXq/J598conlQ4YMYfr06ZUczZEj0atYDIxRfnnU79nAQQs0R51fVOx4L8GIcnn6mw3MjiNkEREROUZNmDChyvp+9NFHGTRoELVr1y67siRcVc9BFhEREUmI3NxcmjdvzrBhw2jZsiWXXHIJu3fvJjs7m06dOhGJROjbty9bt24Fio6ajh07lhYtWhCJRLj11lvJy8ujadOm7N27F4BvvvmGJk2aFB4Xt3btWnr16kWbNm1o27Yt69at46233qJPnz6FdUaNGsWUKVPIyMhg8+bN9OjRo9Qtp08++WTGjRtHmzZt6NSpE59//jkAn3zyCT179iQSidCzZ0/Wr18fs42PP/6Yzp0706FDB+68887Ccndn1KhRtGjRgiuuuIItW7bE+SxXT0qQRUREpNr68MMPGTlyJCtXrqR+/fq89NJLDB48mAcffJCcnBxat27NPffcU+QxX3/9NTNmzGDlypXk5ORwxx13UKdOHbp3786rr74KwLRp07jmmmuoUaNGif2mp6czcuRIVqxYweLFiznrrLNixnjLLbfQoEED5s6dy9y5c2PW27lzJ506dWLFihWkpqYyaVLwhfqoUaMYPHgwOTk5pKenc8stt8RsY8yYMYwYMYJly5Zx5plnFpbPmDGDNWvW8N577zFp0iQWL14cs41jgRJkERERqbaaNm1KcnIyAO3atWPdunVs27aNtLQ0AG644Qbmz59f5DF169alVq1aDB06lJdffrlw2sPQoUOZPHkyAJMnT465a15eXh6bNm2ib9++ANSqVatCpk6ccMIJhSPQ7dq1Izc3F4AlS5Zw3XXB+gPXX389CxcujNnGokWLGDhwYGHdAvPnz2fgwIEkJSXRoEEDLrroosOO92imBFlERESqrZo1axb+npSUxLZt28p8zPHHH8/bb7/NNddc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beBVd/9HsWZqA/3cfZ27HwBuAD6Jtz933weMAv4JrAZecPeVFX+1IiIicqRp2rQpycnJALRr145169axbds20tKCmwZvuOEG5s+fX+QxdevWpVatWgwdOpSXX36Z2rVrA8Ec38mTJwMwefLkmDvO5eXlsWnTJvr27QtArVq1Cts4VGeeeSY7duwgLy+PDRs2cN111zF//nwWLFgQ13SE4s9Dbm5uifW2b99e5Pm5/vrrC8/Nnz+fQYMGARCJRIhEIqX2edxxxzFgQLCK7qBBg1i4cCE7duxg8eLF9OvXr3DE99NPPz3oscuWLaN79+5873vf4/jjjyc9Pb3wdUpKSuKaa64BgmkZWVlZdOjQgeTkZObMmcNHH31U5vNRlkSvYjEwRnn0ChRtymhjUbHjvQQjyuXpbzagjdNFRESOMTVr1iz8PSkpiW3btpX5mOOPP563336bOXPmMG3aNP7whz/w5ptv0rVrV3Jzc5k3bx779++PefOau8ds98CBA4XH+fn55bqWzp07M3nyZJo1a0a3bt14+umnWbJkCb/73e/KfGzx5yHW9Ah3J1jkq2SlnSuLmXHgwAHq169PdnZ2qXVjPYcQfOBISkoqrHfDDTfwm9/85pDjKom2mhYREZGEO1KWZatXrx6nnHJK4chrZmZm4WhpgR07drBr1y4uv/xyOnXqRPRyr4MHD2bgwIHceeedMfuoW7cuDRs2ZObMmVx99dXs2bOH/fv307hxY1atWsWePXvIz89nzpw5hfOH69SpQ15eHqeffnrMdlNTUxk/fjzjx48nJSWFuXPncuKJJ1LSals1atRg7969MaeAxFK/fn3q1avHwoULufDCC4tMV0hNTWXq1Kn06NGD999/n5ycnFLbOnDgANOnT+faa6/lr3/9KxdeeCF169aladOmvPjii/Tr1w93JycnhzZtio6XduzYkTFjxvDll19yyimn8NxzzzF69OiD+ujZsydXXXUVP/vZzzjjjDP4+uuvycvLo3HjxuW67uKq/CY9ERERkcr0zDPPcNtttxGJRMjOzmb8+PFFzufl5dGnTx8ikQhpaWk88sgjhefS09PZunUrAweW+KV1oczMTDIyMohEInTp0oXPPvuMRo0a0b9/fyKRCOnp6aSkpBTWHz58OJdddlnMm/QAunXrxoYNG0hNTSUpKYlGjRoVJtjFDR8+vLCf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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Filter out QPS = 1\n", + "df_filtered_qps = df_filtered[df_filtered[\"qps\"] > 1]\n", + "\n", + "# Group by method and qps\n", + "grouped_error = df_filtered_qps.groupby([\"method\", \"qps\"])[\"abs_error\"].mean().reset_index()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(data=grouped_error, x=\"qps\", y=\"abs_error\", hue=\"method\")\n", + "\n", + "plt.yscale(\"log\")\n", + "plt.title(\"Absolute Error from Ideal (QPS > 1 Only, Log Scale)\")\n", + "plt.ylabel(\"Abs Error from Ideal ⟨H⟩ (log scale)\")\n", + "plt.xlabel(\"QPS\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney U Test (No-DD vs DD Before): MannwhitneyuResult(statistic=130.0, pvalue=0.48073111045562256)\n", + "Mann-Whitney U Test (No-DD vs DD After): MannwhitneyuResult(statistic=140.0, pvalue=0.26275304114766074)\n" + ] + } + ], + "source": [ + "from scipy.stats import mannwhitneyu\n", + "\n", + "# Define method categories\n", + "no_dd = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_no_dd\"][\"abs_error\"]\n", + "dd_before = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_with_dd_before\"][\"abs_error\"]\n", + "dd_after = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_with_dd_after\"][\"abs_error\"]\n", + "\n", + "# Perform tests\n", + "u_before = mannwhitneyu(no_dd, dd_before, alternative='two-sided')\n", + "u_after = mannwhitneyu(no_dd, dd_after, alternative='two-sided')\n", + "\n", + "print(\"Mann-Whitney U Test (No-DD vs DD Before):\", u_before)\n", + "print(\"Mann-Whitney U Test (No-DD vs DD After):\", u_after)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Group by QPS and method\n", + "exec_summary = log_df.groupby([\"method\", \"qps\"])[\"exec_secs\"].mean().reset_index()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(10, 6))\n", + "sns.lineplot(data=exec_summary, x=\"qps\", y=\"exec_secs\", hue=\"method\", marker=\"o\")\n", + "\n", + "plt.yscale(\"log\")\n", + "plt.title(\"Mean Execution Time vs QPS (Log Scale)\")\n", + "plt.xlabel(\"QPS\")\n", + "plt.ylabel(\"Execution Time (s, log scale)\")\n", + "plt.grid(True, linestyle='--', axis='y')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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RERERKqdqk6QNwIb3b3gO4XpBAlzEWbWDWgFzADuOoQ+GkUdNwQ2lz9UERERETkWVOlGIe7+mZltMLNm7r4G6AlE3zyHmaUAkwiWY/sYeNbM7nX3O+LsZhlwnpk1BTYB1wJaAVtERKQSrZ8Q/41m8fj++PcqtD2RaIle5u05YAnQzMw2mtlPw/LZZtYgrDYamGpmOUAycH+xZmoD/dx9nbsfAG4APom3P3ffB4wC/gmsBl5w97I3VBcREZFjyvjx43njjTeqpO9HH32UXbt2VXq/J598conlQ4YMYfr06ZUczZEj0atYDIxRfnnU79nAQQs0R51fVOx4L8GIcnn6mw3MjiNkEREROUZNmDChyvp+9NFHGTRoELVr1y67siRcVc9BFhEREUmI3NxcmjdvzrBhw2jZsiWXXHIJu3fvJjs7m06dOhGJROjbty9bt24Fio6ajh07lhYtWhCJRLj11lvJy8ujadOm7N27F4BvvvmGJk2aFB4Xt3btWnr16kWbNm1o27Yt69at46233qJPnz6FdUaNGsWUKVPIyMhg8+bN9OjRo9Qtp08++WTGjRtHmzZt6NSpE59//jkAn3zyCT179iQSidCzZ0/Wr18fs42PP/6Yzp0706FDB+68887Ccndn1KhRtGjRgiuuuIItW7bE+SxXT0qQRUREpNr68MMPGTlyJCtXrqR+/fq89NJLDB48mAcffJCcnBxat27NPffcU+QxX3/9NTNmzGDlypXk5ORwxx13UKdOHbp3786rr74KwLRp07jmmmuoUaNGif2mp6czcuRIVqxYweLFiznrrLNixnjLLbfQoEED5s6dy9y5c2PW27lzJ506dWLFihWkpqYyaVLwhfqoUaMYPHgwOTk5pKenc8stt8RsY8yYMYwYMYJly5Zx5plnFpbPmDGDNWvW8N577zFp0iQWL14cs41jgRJkERERqbaaNm1KcnIyAO3atWPdunVs27aNtLQ0AG644Qbmz59f5DF169alVq1aDB06lJdffrlw2sPQoUOZPHkyAJMnT465a15eXh6bNm2ib9++ANSqVatCpk6ccMIJhSPQ7dq1Izc3F4AlS5Zw3XXB+gPXX389CxcujNnGokWLGDhwYGHdAvPnz2fgwIEkJSXRoEEDLrroosOO92imBFlERESqrZo1axb+npSUxLZt28p8zPHHH8/bb7/NNddc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beBVd/9HsWZqA/3cfZ27HwBuAD6Jtz933weMAv4JrAZecPeVFX+1IiIicqRp2rQpycnJALRr145169axbds20tKCmwZvuOEG5s+fX+QxdevWpVatWgwdOpSXX36Z2rVrA8Ec38mTJwMwefLkmDvO5eXlsWnTJvr27QtArVq1Cts4VGeeeSY7duwgLy+PDRs2cN111zF//nwWLFgQ13SE4s9Dbm5uifW2b99e5Pm5/vrrC8/Nnz+fQYMGARCJRIhEIqX2edxxxzFgQLCK7qBBg1i4cCE7duxg8eLF9OvXr3DE99NPPz3oscuWLaN79+5873vf4/jjjyc9Pb3wdUpKSuKaa64BgmkZWVlZdOjQgeTkZObMmcNHH31U5vNRlkSvYjEwRnn0ChRtymhjUbHjvQQjyuXpbzagjdNFRESOMTVr1iz8PSkpiW3btpX5mOOPP563336bOXPmMG3aNP7whz/w5ptv0rVrV3Jzc5k3bx779++PefOau8ds98CBA4XH+fn55bqWzp07M3nyZJo1a0a3bt14+umnWbJkCb/73e/KfGzx5yHW9Ah3J1jkq2SlnSuLmXHgwAHq169PdnZ2qXVjPYcQfOBISkoqrHfDDTfwm9/85pDjKom2mhYREZGEO1KWZatXrx6nnHJK4chrZmZm4WhpgR07drBr1y4uv/xyOnXqRPRyr4MHD2bgwIHceeedMfuoW7cuDRs2ZObMmVx99dXs2bOH/fv307hxY1atWsWePXvIz89nzpw5hfOH69SpQ15eHqeffnrMdlNTUxk/fjzjx48nJSWFuXPncuKJJ1LSals1atRg7969MaeAxFK/fn3q1avHwoULufDCC4tMV0hNTWXq1Kn06NGD999/n5ycnFLbOnDgANOnT+faa6/lr3/9KxdeeCF169aladOmvPjii/Tr1w93JycnhzZtio6XduzYkTFjxvDll19yyimn8NxzzzF69OiD+ujZsydXXXUVP/vZzzjjjDP4+uuvycvLo3HjxuW67uKq/CY9ERERkcr0zDPPcNtttxGJRMjOzmb8+PFFzufl5dGnTx8ikQhpaWk88sgjhefS09PZunUrAweW+KV1oczMTDIyMohEInTp0oXPPvuMRo0a0b9/fyKRCOnp6aSkpBTWHz58OJdddlnMm/QAunXrxoYNG0hNTSUpKYlGjRoVJtjFDR8+vLCf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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Set new global ideal reference from full circuit\n", + "ideal_value = 0.7384207722\n", + "\n", + "# Recalculate absolute error\n", + "df_filtered[\"abs_error\"] = (df_filtered[\"reconstructed expectation value\"] - ideal_value).abs()\n", + "\n", + "# Group by method and qps\n", + "grouped_error = df_filtered_qps.groupby([\"method\", \"qps\"])[\"abs_error\"].mean().reset_index()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(data=grouped_error, x=\"qps\", y=\"abs_error\", hue=\"method\")\n", + "\n", + "plt.yscale(\"log\")\n", + "plt.title(\"Absolute Error from Ideal (QPS > 1 Only, Log Scale)\")\n", + "plt.ylabel(\"Abs Error from Ideal ⟨H⟩ (log scale)\")\n", + "plt.xlabel(\"QPS\")\n", + "plt.grid(True, axis='y', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mann-Whitney U Test (No-DD vs DD Before): MannwhitneyuResult(statistic=122.0, pvalue=0.7089232340537643)\n", + "Mann-Whitney U Test (No-DD vs DD After): MannwhitneyuResult(statistic=120.0, pvalue=0.7715511878155722)\n" + ] + } + ], + "source": [ + "from scipy.stats import mannwhitneyu\n", + "\n", + "# Set new global ideal reference from full circuit\n", + "ideal_value = 0.7384207722\n", + "\n", + "# Filter rows with reconstructed values and QPS > 1\n", + "df_filtered_qps = df[(df[\"qps\"] > 1) & (~df[\"reconstructed expectation value\"].isna())].copy()\n", + "\n", + "# Recalculate absolute error from ideal_full_no_dd\n", + "df_filtered_qps[\"abs_error\"] = (df_filtered_qps[\"reconstructed expectation value\"] - ideal_value).abs()\n", + "\n", + "# Extract method-specific series\n", + "no_dd = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_no_dd\"][\"abs_error\"]\n", + "dd_before = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_with_dd_before\"][\"abs_error\"]\n", + "dd_after = df_filtered_qps[df_filtered_qps[\"method\"] == \"noisy_cut_with_dd_after\"][\"abs_error\"]\n", + "\n", + "# Perform statistical tests\n", + "u_before = mannwhitneyu(no_dd, dd_before, alternative='two-sided')\n", + "u_after = mannwhitneyu(no_dd, dd_after, alternative='two-sided')\n", + "\n", + "# Show results\n", + "print(\"Mann-Whitney U Test (No-DD vs DD Before):\", u_before)\n", + "print(\"Mann-Whitney U Test (No-DD vs DD After):\", u_after)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/plots/abs_error_vs_qps.png b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/plots/abs_error_vs_qps.png new file mode 100644 index 0000000..ccfda84 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Circuit-Cutting_Circuit-Optimization/plots/abs_error_vs_qps.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/dd-pennylane.py b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/dd-pennylane.py new file mode 100644 index 0000000..4a4c302 --- /dev/null +++ b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/dd-pennylane.py @@ -0,0 +1,346 @@ +import os +import time +import datetime +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +import pennylane as qml +from engine.manager import MiniAppExecutor +from engine.metrics.csv_writer import MetricsFileWriter +from collections import Counter +import json + +# Device selection +def get_device(n_qubits, noisy=False, shots=1024): + if noisy: + dev = qml.device("default.mixed", wires=n_qubits, shots=shots) + else: + dev = qml.device("default.qubit", wires=n_qubits, shots=shots) + return dev + +# Dynamical decouling implementation +def apply_dd_sequence(wires): + for w in wires: + qml.PauliX(w) + qml.PauliY(w) + qml.PauliX(w) + qml.PauliY(w) + +# Quantum circuits +def dd_copula_ansatz(params, wires, noise_prob=None): + n_qubits = len(wires) + depth = params.shape[0] - 1 + + for wire in range(n_qubits): + qml.RY(params[0, wire], wires=wires[wire]) + + for d in range(1, depth + 1): + for i in range(0, n_qubits - 1, 2): + qml.CNOT(wires=[wires[i], wires[i+1]]) + + # Noise check + if noise_prob is not None and noise_prob > 0.0: + #qml.AmplitudeDamping(noise_prob, wires=wires[i+1]) + qml.QubitChannel(get_phase_damping_kraus(noise_prob), wires=wires[i+1]) + + apply_dd_sequence(wires) + + for wire in range(n_qubits): + qml.RY(params[d, wire], wires=wires[wire]) + +def regular_copula_ansatz(params, wires, noise_prob=None): + n_qubits = len(wires) + depth = params.shape[0] - 1 + + for wire in range(n_qubits): + qml.RY(params[0, wire], wires=wires[wire]) + + for d in range(1, depth + 1): + for i in range(0, n_qubits - 1, 2): + qml.CNOT(wires=[wires[i], wires[i+1]]) + + # Noise check + if noise_prob is not None and noise_prob > 0.0: + #qml.AmplitudeDamping(noise_prob, wires=wires[i+1]) + qml.QubitChannel(get_phase_damping_kraus(noise_prob), wires=wires[i+1]) + + for wire in range(n_qubits): + qml.RY(params[d, wire], wires=wires[wire]) + +def summarize_counts(counts): + """Summarize counts by showing the most common bitstring and its probability.""" + if not counts: + return "No counts" + total = sum(counts.values()) + most_common = max(counts.items(), key=lambda x: x[1]) + prob = most_common[1] / total + return f"Most common: {most_common[0]} (probability: {prob:.2f})" + +# Noise model +def get_phase_damping_kraus(prob): + return [ + np.array([[1, 0], [0, np.sqrt(1 - prob)]]), + np.array([[0, 0], [0, np.sqrt(prob)]]), + ] + +def run_circuit_task(parameters, use_dd=True, use_noise=False, noise_level=0.05): + try: + n_qubits = parameters['n_qubits'] + circuit_depth = parameters['circuit_depth'] + + # Create device + dev = get_device(n_qubits, noisy=use_noise) + + # Generate random parameters if none provided + if 'circuit_params' in parameters: + params = parameters['circuit_params'] + else: + params = np.random.uniform(0, 2*np.pi, size=(circuit_depth+1, n_qubits)) + + # Create QNode with sampling + if use_dd: + @qml.qnode(dev) + def circuit(): + dd_copula_ansatz(params, wires=range(n_qubits), noise_prob=noise_level if use_noise else None) + return qml.sample(wires=range(n_qubits)) + else: + @qml.qnode(dev) + def circuit(): + regular_copula_ansatz(params, wires=range(n_qubits), noise_prob=noise_level if use_noise else None) + return qml.sample(wires=range(n_qubits)) + + # Get circuit drawing before execution (for visualization) + circuit_drawing = qml.draw(circuit)() + + # Execute circuit and collect samples with timing + start_time = time.time() + samples = circuit() + execution_time = time.time() - start_time + + # Handle shape for single vs multi-shot samples + if samples.ndim == 1: + samples = np.expand_dims(samples, axis=0) + + # Convert to bitstring counts + bitstrings = [''.join(str(int(bit)) for bit in row) for row in samples] + counts = Counter(bitstrings) + counts_dict = dict(counts) + + return { + "counts": counts_dict, + "execution_time": execution_time, + "circuit_drawing": circuit_drawing, + "use_dd": use_dd, + "use_noise": use_noise, + "noise_level": noise_level, + "n_qubits": n_qubits, + "circuit_depth": circuit_depth + } + + except Exception as e: + print(f"[ERROR] Circuit execution failed: {e}") + return { + "error": str(e), + "counts": {}, + "execution_time": 0, + "circuit_drawing": "", + "n_qubits": parameters.get('n_qubits', 0), + "circuit_depth": parameters.get('circuit_depth', 0), + "use_dd": use_dd, + "use_noise": use_noise, + "noise_level": noise_level + } + +# Experiment class +class ConductExperiment: + def __init__(self, cluster_config): + self.executor = MiniAppExecutor(cluster_config).get_executor() if cluster_config else None + + # Set up results directory + self.current_datetime = datetime.datetime.now() + self.timestamp = self.current_datetime.strftime('%Y-%m-%dT%H:%M:%S') + + script_dir = os.path.dirname(os.path.abspath(__file__)) + self.result_dir = os.path.join(script_dir, "results") + if not os.path.exists(self.result_dir): + os.makedirs(self.result_dir) + + # Create results dataframe + self.results_df = pd.DataFrame(columns=[ + 'timestamp', 'n_qubits', 'circuit_depth', 'noise_level', + 'use_dd', 'use_noise', 'circuit_type', 'run_number', + 'execution_time', 'compute_time', "bitstring_counts" + ]) + + def run_single_experiment(self, parameters, use_dd, use_noise, noise_level, run_number): + start_time = time.time() + + if self.executor: + future = self.executor.submit_task( + run_circuit_task, + parameters, + use_dd=use_dd, + use_noise=use_noise, + noise_level=noise_level + ) + result_dict = self.executor.get_results([future])[0] + else: + print(f"[ERROR] Circuit execution failed") + + compute_time = time.time() - start_time + + # Extract bitstring counts from the result + counts = result_dict.get('counts', {}) + + # Convert counts to JSON string for CSV + counts_str = json.dumps(counts) + + # Set circuit type + if not use_noise: + circuit_type = "Ideal (No Noise, No DD)" + elif use_noise and not use_dd: + circuit_type = "Noisy (No DD)" + else: + circuit_type = "Noisy + DD" + + # Add result to dataframe + new_row = { + 'timestamp': self.timestamp, + 'n_qubits': parameters['n_qubits'], + 'circuit_depth': parameters['circuit_depth'], + 'noise_level': noise_level, + 'use_dd': use_dd, + 'use_noise': use_noise, + 'circuit_type': circuit_type, + 'run_number': run_number, + 'execution_time': result_dict.get('execution_time', 0), + 'compute_time': compute_time, + "bitstring_counts": counts_str + } + + self.results_df = pd.concat([self.results_df, pd.DataFrame([new_row])], ignore_index=True) + + return result_dict + + def run_parameter_sweep(self, qubits_range, depths_range, noise_levels, runs_per_config=3): + print(f"Parameter sweep") + print(f"Qubit range: {qubits_range}") + print(f"Depth range: {depths_range}") + print(f"Noise levels: {noise_levels}") + print(f"Runs per configuration: {runs_per_config}") + + total_configs = len(qubits_range) * len(depths_range) * len(noise_levels) * 3 * runs_per_config + print(f"Total experiments to run: {total_configs}") + + experiment_count = 0 + + # Sweep through all parameter combinations + for n_qubits in qubits_range: + for circuit_depth in depths_range: + # Generate random parameters once for each qubit/depth combination + circuit_params = np.random.uniform(0, 2*np.pi, size=(circuit_depth+1, n_qubits)) + parameters = { + 'n_qubits': n_qubits, + 'circuit_depth': circuit_depth, + 'circuit_params': circuit_params # Use same params for fair comparison + } + + for noise_level in noise_levels: + print(f"\n{'='*60}") + print(f"CONFIGURATION: {n_qubits} qubits, depth {circuit_depth}, noise {noise_level}") + print(f"{'='*60}") + + # For each parameter set, run all three circuit types + for (use_dd, use_noise) in [(False, False), (False, True), (True, True)]: + # Get circuit type for display + if not use_noise: + circuit_type = "Ideal (No Noise, No DD)" + elif use_noise and not use_dd: + circuit_type = "Noisy (No DD)" + else: + circuit_type = "Noisy + DD" + + # Run multiple times per configuration + for run in range(1, runs_per_config + 1): + experiment_count += 1 + progress = (experiment_count / total_configs) * 100 + + print(f"\nRunning {circuit_type} - Run {run}/{runs_per_config}") + print(f"Progress: {experiment_count}/{total_configs} ({progress:.1f}%)") + + result = self.run_single_experiment( + parameters, + use_dd=use_dd, + use_noise=use_noise, + noise_level=noise_level, + run_number=run + ) + + # Print an example of the bitstring counts to verify they're being collected + if 'counts' in result and result['counts']: + top_count = max(result['counts'].items(), key=lambda x: x[1]) if result['counts'] else None + print(f" Top bitstring: {top_count[0]} (count: {top_count[1]})") if top_count else print(" No bitstrings found!") + else: + print(" No counts found in result!") + + print(f" Execution time: {result.get('execution_time', 0):.6f} seconds") + + # Save results to CSV + csv_path = os.path.join(self.result_dir, f"results_{self.timestamp}.csv") + self.results_df.to_csv(csv_path, index=False) + print(f"\n[INFO] All results saved to {csv_path}") + + return self.results_df + +# Main execution +if __name__ == "__main__": + RESOURCE_URL_HPC = "ssh://localhost" + WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + + cluster_info = { + "executor": "pilot", + "config": { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] + } + } + + try: + print("Dynamic decoupling pennylane experiment") + print("This experiment will test:") + print(" - Different numbers of qubits") + print(" - Different circuit depths") + print(" - Different noise levels") + print(" - With and without dynamical decoupling (DD)") + print("Results will be averaged over multiple runs for accuracy.\n") + + # Create experiment + experiment = ConductExperiment(cluster_info) + + # Parameter ranges to test + qubit_range = [3, 4, 5, 6, 7, 8, 9, 10] + depth_range = [1, 2, 3] + noise_levels = [0.05] + runs_per_config = 3 + + # Run the parameter sweep + df = experiment.run_parameter_sweep( + qubits_range=qubit_range, + depths_range=depth_range, + noise_levels=noise_levels, + runs_per_config=runs_per_config + ) + + print("\nExperiment complete.") + + except Exception as e: + print(f"Error: {e}") + import traceback + traceback.print_exc() \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/notebook/dd_pennylane_results_analysis.ipynb b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/notebook/dd_pennylane_results_analysis.ipynb new file mode 100644 index 0000000..c96e99f --- /dev/null +++ b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/notebook/dd_pennylane_results_analysis.ipynb @@ -0,0 +1,1154 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DD PennyLane Analysis Notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Setup and Data Load" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import wilcoxon\n", + "import numpy as np\n", + "\n", + "# Load datasets\n", + "df1 = pd.read_csv(\"results_with_jsd_2025-05-29T11:13:43.csv\")\n", + "df2 = pd.read_csv(\"results_with_jsd_2025-05-29T11:23:25.csv\")\n", + "df = pd.concat([df1, df2], ignore_index=True)\n", + "df_noisy = df[df[\"use_noise\"] == True]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Boxplot: JSD vs Ideal by Depth" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAGoCAYAAABbtxOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde5ycdX33/9cnm01CSAI5gi6HhIoCgRByQCiK4RBEEINYbxQ5iAJqoN5tLbf+1FZUrNZSb6WSIlVUBDwXQyUeAjdgRSg5NAQDKJRwyAaSsAGSEJJssp/fHzMbhyXZnWR2dmZ3X8/HYx/ZuQ7f6zPX7G7e853v9b0iM5EkSZJUMKDWBUiSJEn1xIAsSZIklTAgS5IkSSUMyJIkSVIJA7IkSZJUwoAsSZIklTAgS+pVIuKKiLixG9qZERErOlmfEfG6So9TZi0bIuKgKrT7i4i4oLvb7U4RcVdEXLQL2w+OiIciYt9uOv4nI+Kb3dFWLUXEOyLiB7WuQ+orDMhSP1MaSIrhYHkxoK2IiB922G5TRKyPiHURsSgiPhERg6tcX6fBtTeKiNdExLci4pni+XwkIj4bEXsCZOawzHy8u4+bmW/LzO8Wa3h/RPy2izqr+pp305ubS4DfZOazxTa/U3wzc3TJcV4XEWVN8p+Z/5CZZQf0cpScxw0R8VxE/HtEvKY7j9FRZt4KHB4Rk6p5HKm/MCBL/VSxZ/E84OTMHAZMA+7osNllmTkceA3wMeA9wLyIiB4ttheLiFHAvcAewLHF8zkT2Bv4szL2b6huha9S76/5h4DvdVi2FriyBrV05rLi79XrgGHAVT1wzO9TeAMhqUIGZKn/mg78KjP/ByAzn83M63a0YWa+lJl3Ae8AjgVO77hNRBwTEc+WBrqIeGdELC1+f3RELCz2TK6KiK+UU2RETIiIu4u9mvOBMTs47u8i4oWIeCAiZpSsuzAiHi7u+3hEfKicY5Y4rbjfcxHxTxExoPgR/9qIOKLkOOMi4uWIGLuDNv4GWA+cm5lPAGTm05n5vzOz/dxsH85R7BH914iYFxEvASdExP7FXsg1EdESEV8vbvuKHtmIGF9sa2Dx8V0RcVFEHApcCxxb7NV8oasnvrPXvHgOPhER/1Os5UfFNwGlx78kIlYWe8w/Vlx3KvBJ4OxiDQ+UHO7AiLin+Dr9OiJe8RqXPL8DKLyp+K8Oq74LTIqIt+xkv9dGxK3F1+2xiLi4ZN32cxgRQyLixuLzeiEiFkTEPhHx7ohY1KHNj0XEz8o4jy8APwMmdzhHA0vaKv1U5/0R8duIuCoino/CJzxvK9n2/cWfyfXFde8rOdxd7OB3U9KuMyBL/dd9wPkRcXlETCunpzIznwIWAm/ewbr7gJeAE0sWnwPcXPz+a8DXMnMEhZDzozLrvBlYRCEYfx7YPqY2IpqA2yj0Ho4C/hb4aUlQXQ28HRgBXAj834iYUuZxAd5JoWd9CjAL+EBmbgZ+AJxbst17gdszc80O2jgZ+PfMbNuF454DfAEYTqH3+efAk8B4oKl4/LJl5sPAh4F7i8M59t6FfTu+5h8FzgTeArwWeB64psNuJwAHA6cAn4iIkzPzl8A/AD8s1nBkyfbnUHh9xgGDKLyOO3IE8Hhmbu2wfGOx7S/sZL/vAyuK9f4F8A8RcdIOtrsA2AvYHxhN4Zy9DNwKTCi+0Wh3Lq/uyX6ViBgNnAU81tW2Jd4I/IHCz/yXgW9FwZ7A1cDbir38fw4sKdnvYWB8RIzYhWNJ2gEDstRPZeaNwF8CbwXuBlZHxCfK2HUlhTC6I9+nEBaJiOHAacVlAK3A6yJiTGZuKAbqThV7DKcDf5eZmzPzN8B/lGxyLjAvM+dlZltmzqcQ5k4rPsfbMvN/suBu4NfsINx34h8zc20xJH61/blR6LE8JyLa/4aex87D0mjgmV04JsDczLynGKonUQh2lxd7dTdlZqdjiaug9DX/EPCpzFxRfLNwBfAXpT2iwGeLtT4IfJs/nbed+XZm/jEzX6bwxmnyTrbbm0Jv/I58AzigtLcVICL2B94EfLx47pYA36TwmnXUSuH1el1mbsvMRZm5rvg8f0jxTVFETKTwZuXnnTynqyPiReA5CkH3LzvZtqMnM/PfMnMbhZ+11wD7FNe1URhrvEdmPpOZy0r2az83Zb8BkrRjBmSpH8vMmzLzZAr/oX4Y+FxEvLWL3ZoojPnckZuBs6JwUddZwOLMfLK47oPA64FHih9dv72MEl8LPJ+ZL5Use7Lk+wOBdxc/Dn+hOHTgTRQCBRHxtoi4r/jR+gsUgvMOP77fiac7HPe1AJn5XxR6y98SEYdQGGd6607aaGmvZzePuz+FwNSx17Qnlb7mBwK3lJzvh4Ft/CnAwU7OWyeeLfl+I4UxuzvyPIVe9VcphtjPF79Kx0u/FlibmaXB+kkKz6mj7wG/An5QHCLy5YhoLK5rf1MUFML1j4rH3JmPZuZeFN7gjAT262Tbjrafj8zcWPx2WPH34GwKv6vPRMRtxZ+/du3npsshNJI6Z0CWRGa2ZuaPgaXA4TvbrtgbNxX4z5208xCF8PE2Xjm8gsx8NDPfS+Fj9H8EflL8yLgzzwAjO2x3QMn3TwPfy8y9S772zMwvFUP6TylcHLVPcVjBPF4Znrqyf4fjrix5/F0KPYrnAT/JzE07aeN24J0lvc3lKJ2B4WkKPaMDd7DdS8DQksedTX1W1qwOHe3gNX+awkf8ped8SGY2l+y2s/O2WzWUWAoctJNzAYXe6r0oDI1ptxIYVfxEo7Sm0noLxRV+Dz6bmYdRGL7wduD84rr7gC0UPoE4hzKGVxT3e5DCEKBriuG6/c1eua9bx/Z+lZkzKbzpegT4t5LVhwJPZOa6ctuTtGMGZKmfKl7sc3pEDC9eePU2YCKvvgCKiBhavABqLnA/haC5MzdTGKd6PPDjkjbOjYixxWED7T1c2zqrsdj7vBD4bEQMiog3AWeUbHIjcEZEvDUiGooXWc2IiP0ojGUdDKwBthaf3ymdHW8HLo+IkcWQ+L8pfMze7nsUgti5wA2dtPEVCmOgvxsRB0Jh7HREfCXKm5LrfgpvFL4UEXsWn+NxxXVLgOMj4oCI2Av4/zppZxWwX0QMKuOYnb3m1wJfKHkuYyNiVofd/664/0QKY4vbz9sqCmNkd+v/nsxcATwKHL2T9VspDPn4eMmyp4HfAV8snrtJFD7NuKnj/hFxQkQcURyPv47CkIvSn9EbgK8DW3dxmMt3KbwxfEdxnHozcG7xZ/YDlDGbSbG+faIw3/GewGZgQ4f63gL8YhfqkrQTBmSpf0oKAeCTwFMUAuuXgY90+I//6xGxnkKw+SqFHtlTu7jg7PvADOD/ZeZzJctPBZZFxAYKF+y9p5Ne11LnULhoaS3wGUrCaDH8zCo+jzUUejcvBwYUP1L/KIUxrc8X29nZMIidmUvhAsElFC4G/FbJsVcAiymcyx32qBe3W0uhN7IV+K/i+bwDeJEyLtwqjkM9g8IwjqcoXGx2dnHdfArhc2mxzs7GxP4/YBnwbEQ818l2Xb3mX6NwHn9d3O4+Cq9PqbuLz+0O4KrM/HVxefsbppaIWNzZ8+7EN9jx+OF23+fVY77fS2HM8ErgFuAzxXPX0b7ATyj8bjxM4XmUztv8PQqfsJTVe9wuM7dQuLju74qLLqbwc9pC4U3p78psagCFqfdWUvh9eAswu2T9eymcH0kVisxKP/GS1JsUg8nnMrPLKarUuYi4HliZmZ+udS31ICLGA8uBxmqNmS4Onflv4KTM3NWLHys99h4UZkaZkpmP9uSxuxIRZwDnZeb/qnUtUl9gQJb6keJH3guBQ0ountNuKIbBJcBRmbm8ttXUh54IyLUUEX8DvD0zT+xyY0m92s4udJDUx0TEP1IYL/txw3FlIuLzwF8DXzQc9w8R8QSFCzzPrHEpknqAPciSJElSCS/SkyRJkkpUdYhFRJxK4YrnBuCbmfmlDuvfx5+m49lA4Qr6B4rrnqBwV6BtFKbUmdbV8caMGZPjx4/vtvolSZLUdy1atOi5zBzbcXnVAnJxHslrgJkUpiVaEBG3Fm8k0G458JbMfL44R+l1vHK6oBM6TBPVqfHjx7Nw4cJuqF6SJEl9XUTs8Jqcag6xOBp4LDMfL84B+QMK85Vul5m/y8zniw/vY9duxSlJkiR1u2oG5CYKk/a3W1FctjMf5JV3AEoKE9EviohLdrZTRFwSEQsjYuGaNWsqKliSJEmq5hjk2MGyHU6ZEREnUAjIbypZfFxmroyIccD8iHgkM3/zqgYzr6MwNINp06Y5JYckSZIqUs2AvALYv+TxfhRuj/kKETEJ+CbwtsxsaV+emSuL/66OiFsoDNl4VUDuSmtrKytWrGDTpnLuaKveZMiQIey33340NjbWuhRJktSHVDMgLwAOjogJQDPwHuCc0g0i4gDg3yncHvOPJcv3BAZk5vri96cAn9udIlasWMHw4cMZP348ETvq1FZvlJm0tLSwYsUKJkyYUOtyJElSH1K1gJyZWyPiMuBXFKZ5uz4zl0XEh4vrrwX+HhgNzCmG1/bp3PYBbikuGwjcnJm/3J06Nm3aZDjugyKC0aNH47hzSZLU3ao6D3JmzgPmdVh2bcn3FwEX7WC/x4Eju6sOw3Hf5OsqSZKqwTvpSZIkSSX6ZUBuaGhg8uTJTJw4kSOPPJKvfOUrtLW11aSWhQsX8tGPfnS39p0xY8YOb4wyY8YM3vCGNzBp0iQOOeQQLrvsMl544YVKS61Yab2nnXZaXdQkSZLUUb8MyHvssQdLlixh2bJlzJ8/n3nz5vHZz362JrVMmzaNq6++utvbvemmm1i6dClLly5l8ODBzJo1q+udetC8efPYe++9a12GJEnSq/TLgFxq3LhxXHfddXz9618nM3nzm9/MkiVLtq8/7rjjWLp0KVdccQUf+MAHmDFjBgcddNArQu2ZZ57J1KlTmThxItddd9325cOGDePjH/84U6dO5eSTT+b+++/fvv+tt94KwF133cXb3/52ADZs2MCFF17IEUccwaRJk/jpT38KwEc+8hGmTZvGxIkT+cxnPrNLz2/QoEF8+ctf5qmnnuKBBx4A4MYbb+Too49m8uTJfOhDH2Lbtm0A/PKXv2TKlCkceeSRnHTSSQCsXbuWM888k0mTJnHMMcewdOlSAK644gquuuqq7cc5/PDDeeKJJ3jiiSc45JBDuOCCC5g0aRJ/8Rd/wcaNG19V1/jx43nuued44oknOPTQQ7n44ouZOHEip5xyCi+//DIACxYsYNKkSRx77LFcfvnlHH744bv03CVJknZHvw/IAAcddBBtbW2sXr2aiy66iO985zsA/PGPf2Tz5s1MmjQJgEceeYRf/epX3H///Xz2s5+ltbUVgOuvv55FixaxcOFCrr76alpaCtM5v/TSS8yYMYNFixYxfPhwPv3pTzN//nxuueUW/v7v//5VdXz+859nr7324sEHH2Tp0qWceOKJAHzhC19g4cKFLF26lLvvvnt7SC1XQ0MDRx55JI888ggPP/wwP/zhD7nnnntYsmQJDQ0N3HTTTaxZs4aLL76Yn/70pzzwwAP8+Mc/BuAzn/kMRx11FEuXLuUf/uEfOP/887s83h/+8AcuueQSli5dyogRI5gzZ06n2z/66KNceumlLFu2jL333nv7G4MLL7yQa6+9lnvvvZeGhoZdes6SJEm7y4BclFm4Cd+73/1ufv7zn9Pa2sr111/P+9///u3bnH766QwePJgxY8Ywbtw4Vq1aBcDVV1/NkUceyTHHHMPTTz/No48+ChR6b0899VQAjjjiCN7ylrfQ2NjIEUccwRNPPPGqGm6//XYuvfTS7Y9HjhwJwI9+9COmTJnCUUcdxbJly3jooYd2+/ndcccdLFq0iOnTpzN58mTuuOMOHn/8ce677z6OP/747XMKjxo1CoDf/va3nHfeeQCceOKJtLS08OKLL3Z6rP3335/jjjsOgHPPPZff/va3nW4/YcIEJk+eDMDUqVN54okneOGFF1i/fj1//ud/DsA555zTWROSJEndpqrTvPUWjz/+OA0NDYwbN46IYObMmcydO5cf/ehHr7gIbvDgwdu/b2hoYOvWrdx1113cfvvt3HvvvQwdOpQZM2Zsv2tfY2Pj9qnIBgwYsH3/AQMGsHXr1lfVkZmvmrps+fLlXHXVVSxYsICRI0fy/ve/f5fvCrht2zYefPBBDj30UFavXs0FF1zAF7/4xVdsc+utt+5w2rT2YF0qIhg4cOArLmwsraljO11Nx9bxvL788ss7PK4kSVJP6PcBec2aNXz4wx/msssu2x7kLrroIs444wze/OY3b+9J3ZkXX3yRkSNHMnToUB555BHuu+++3a7llFNO4etf/zpf/epXAXj++edZt24de+65J3vttRerVq3iF7/4BTNmzCi7zdbWVj71qU+x//77M2nSJAYOHMisWbP467/+a8aNG8fatWtZv349xx57LJdeeinLly9nwoQJrF27llGjRnH88cdz00038Xd/93fcddddjBkzhhEjRjB+/Hh+/vOfA7B48WKWL1++/ZhPPfUU9957L8ceeyzf//73edOb3rTL52LkyJEMHz6c++67j2OOOYYf/OAHu9yGJEn9zdy5c2lubu50m/ahoKNHj+50u6amprq7yL+n9MuA/PLLLzN58mRaW1sZOHAg5513Hn/zN3+zff3UqVMZMWIEF154YZdtnXrqqVx77bVMmjSJN7zhDRxzzDG7XdenP/1pLr30Ug4//HAaGhr4zGc+w1lnncVRRx3FxIkTOeigg7YPXejK+973PgYPHszmzZs5+eSTmTt3LgCHHXYYV155JaeccgptbW00NjZyzTXXcMwxx3Dddddx1lln0dbWxrhx45g/fz5XXHEFF154IZMmTWLo0KF897vfBeBd73oXN9xwA5MnT2b69Om8/vWv337sQw89lO9+97t86EMf4uCDD+YjH/nIbp2Pb33rW1x88cXsueeezJgxg7322mu32pEkSX+yefPmWpdQ96IvfZQ9bdq07Dgv8MMPP8yhhx66S+2sXLmSGTNm8MgjjzBggMO0d8UTTzzB29/+dn7/+99X3NaGDRsYNmwYAF/60pd45pln+NrXvvaKbXbn9ZUkqT9rv3h+9uzZNa6k9iJiUWZO67jc9NfBDTfcwBvf+Ea+8IUvGI5r7LbbbmPy5Mkcfvjh/Od//ief/vSna12SJEnqB/rlEIvOnH/++WVNZaYdGz9+fLf0HgOcffbZnH322d3SliRJUrnsIpUkSZJKGJAlSZKkEgZkSZIkqYQBWZIkSSrhRXo94BvfvJ716zd2W3vDhw/lQxd9oNNtGhoaOOKII7Y//tnPfsb48eN3uO2wYcPYsGFDt9UnSZLUmxmQe8D69RsZf1z3zcbwxD0/7HKbPfbYgyVLlnTbMSVJkvoLh1j0Exs2bOCkk05iypQpHHHEEdvvrFfqmWee4fjjj3/F3MMAv/71rzn22GOZMmUK7373u+1tliRJfZoBuY9qv5325MmTeec738mQIUO45ZZbWLx4MXfeeScf+9jH6HgXxZtvvpm3vvWtLFmyhAceeIDJkyfz3HPPceWVV3L77bezePFipk2bxle+8pUaPStJkqTqc4hFH9VxiEVrayuf/OQn+c1vfsOAAQNobm5m1apV7Lvvvtu3mT59Oh/4wAdobW3lzDPPZPLkydx999089NBDHHfccQBs2bKFY489tsefjyRJUk8xIPcTN910E2vWrGHRokU0NjYyfvx4Nm3a9Iptjj/+eH7zm99w2223cd5553H55ZczcuRIZs6cyfe///0aVS5JktSzHGLRT7z44ouMGzeOxsZG7rzzTp588slXbfPkk08ybtw4Lr74Yj74wQ+yePFijjnmGO655x4ee+wxADZu3Mgf//jHni5fkiSpx9iD3AOGDx9a1swTu9Lernrf+97HGWecwbRp05g8eTKHHHLIq7a56667+Kd/+icaGxsZNmwYN9xwA2PHjuU73/kO733ve9m8eTMAV155Ja9//esrfh6SJEn1yIDcA7qas7gaOs40MWbMGO69995Ot73gggu44IILXrX+xBNPZMGCBd1fpCRJUh1yiIUkSZJUwoAsSZIklTAgS5IkSSUMyJIkSVIJA7IkSZJUwoAsSZIklXCatx7w7ev+lZfWr+u29vYcPoILL/nITte3tLRw0kknAfDss8/S0NDA2LFjAbj//vsZNGhQt9UiSZLUmblz59Lc3Nzldi0tLQCMHj260+2ampqYNWtWt9S2MwbkHvDS+nWcO3HXb+6xMzcu6zxsjx49miVLlgBwxRVXMGzYMP72b/92+/qtW7cycKAvvSRJqh/tNySrB6akfuL9738/o0aN4r//+7+ZMmUKw4cPf0VwPvzww/n5z3/O+PHjufHGG7n66qvZsmULb3zjG5kzZw4NDQ01fgaSJKk3Kre3d86cOQDMnj27muWUxTHI/cgf//hHbr/9dv75n/95p9s8/PDD/PCHP+See+5hyZIlNDQ0cNNNN/VglZIkSbVlD3I/8u53v7vLnuA77riDRYsWMX36dABefvllxo0b1xPlSZIk1QUDcj+y5557bv9+4MCBtLW1bX+8adMmADKTCy64gC9+8Ys9Xp8kSVI9cIhFPzV+/HgWL14MwOLFi1m+fDkAJ510Ej/5yU9YvXo1AGvXruXJJ5+sWZ2SJEk9zR7kHrDn8BFdzjyxq+1V6l3vehc33HADkydPZvr06bz+9a8H4LDDDuPKK6/klFNOoa2tjcbGRq655hoOPPDAio8pSZLUGxiQe0BncxZX2xVXXLHD5XvssQe//vWvd7ju7LPP5uyzz65iVZIkSfXLIRaSJElSCQOyJEmSVKJfBOTMrHUJqgJfV0mSVA19PiAPGTKElpYWw1Qfk5m0tLQwZMiQWpciSZL6mD5/kd5+++3HihUrWLNmTa1LUTcbMmQI++23X63LkCRJfUyfD8iNjY1MmDCh1mVIkiSpl+jzQywkSZKkXWFAliRJkkoYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkkoYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkkoYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkkpUNSBHxKkR8YeIeCwiPrGD9e+LiKXFr99FxJHl7itJkiRVQ9UCckQ0ANcAbwMOA94bEYd12Gw58JbMnAR8HrhuF/aVJEmSul01e5CPBh7LzMczcwvwA2BW6QaZ+bvMfL748D5gv3L3lSRJkqqhmgG5CXi65PGK4rKd+SDwi13dNyIuiYiFEbFwzZo1FZQrSZIkVTcgxw6W5Q43jDiBQkD++K7um5nXZea0zJw2duzY3SpUkiRJajewim2vAPYvebwfsLLjRhExCfgm8LbMbNmVfSVJkqTuVs0e5AXAwRExISIGAe8Bbi3dICIOAP4dOC8z/7gr+0qSJEnVULUe5MzcGhGXAb8CGoDrM3NZRHy4uP5a4O+B0cCciADYWhwuscN9q1WrJEmS1K6aQyzIzHnAvA7Lri35/iLgonL3lSRJkqrNO+lJkiRJJQzIkiRJUgkDsiRJklTCgCxJkiSVMCBLkiRJJQzIkiRJUomqTvMmSZJUT+bOnUtzc3On27S0FG7sO3r06E63a2pqYtasWd1Wm+qHAVmSJKnE5s2ba12CasyALEmS+o1yenznzJkDwOzZs6tdjuqUAVmSJHW7coYygMMZVJ8MyJIkqWYczqB6ZECWJEndrtzeXoczqB45zZskSZJUwoAsSZIklTAgS5IkSSUMyJIkSVIJA7IkSZJUwoAsSZIklTAgS5IkSSUMyJIkSVIJA7IkSZJUwoAsSZIklTAgS5IkSSUMyJIkSVIJA7IkSZJUwoAsSZIklTAgS5IkSSUMyJIk1al169YxZ84c1q1bV+tSpH7FgCxJUp2aP38+y5cv5/bbb691KVK/YkCWJKkOrVu3jgULFpCZLFiwwF5kqQcZkCVJqkPz588nMwFoa2uzF1nqQQZkSZLq0OLFi9m2bRsA27ZtY9GiRTWuSOo/DMiSJNWhKVOm0NDQAEBDQwNTp06tcUVS/2FAliSpDs2cOZOIAGDAgAGcfPLJNa5I6j8MyJIk1aERI0Ywffp0IoLp06czYsSIWpck9RtlBeSIODAiTi5+v0dEDK9uWZIkaebMmUyYMMHeY6mHdRmQI+Ji4CfAN4qL9gN+Vs2iJElSoRd59uzZ9h5LPaycHuRLgeOAdQCZ+SgwrppFSZIkSbVSTkDenJlb2h9ExEAgq1eSJEmSVDvlBOS7I+KTwB4RMRP4MfAf1S1LkiRJqo1yAvIngDXAg8CHgHnAp6tZlCRJklQrA8vYZg/g+sz8N4CIaCgu21jNwiRJkqRaKKcH+Q4KgbjdHoA3hJckSVKfVE5AHpKZG9ofFL8fWr2SJEmSpNopJyC/FBFT2h9ExFTg5eqVJEmSJNVOOWOQ/wr4cUSsLD5+DXB29UqSJEmSaqfLgJyZCyLiEOANQACPZGZr1SuTJEmSaqCcHmSA6cD44vZHRQSZeUPVqpIkSZJqpMuAHBHfA/4MWAJsKy5OwIAsSZKkPqecHuRpwGGZ6e2lJUmS1OeVM4vF74F9q12IJEmSVA/K6UEeAzwUEfcDm9sXZuY7qlaVJEmSVCPlBOQrql2EJEmSVC/Kmebt7og4EDg4M2+PiKFAQ/VLkyRJknpel2OQI+Ji4CfAN4qLmoCfVbMoSZIkqVbKuUjvUuA4YB1AZj4KjKtmUZIkSVKtlBOQN2fmlvYHETGQwjzIkiRJUp9TTkC+OyI+CewRETOBHwP/Ud2yJEmSpNooJyB/AlgDPAh8CJgHfLqaRUmSJEm1Us4sFm3AvxW/JEnqdebOnUtzc3On27S0tAAwevToTrdrampi1qxZ3Vab1JuV87tVrpUrVwIwZ86cituq9Pe0y4AcEQ/y6jHHLwILgSszs6WTfU8FvkZhWrhvZuaXOqw/BPg2MAX4VGZeVbLuCWA9sA3YmpnTynlCkiTtjs2bN3e9UTfqztAOBnfVRnNzM81PLWefYYMqbquxbSsAW9dWFrhXbdjS9WpftI8AACAASURBVEZdKOdGIb+gEFJvLj5+T/HfdcB3gDN2tFNENADXADOBFcCCiLg1Mx8q2Wwt8FHgzJ0c+4TMfK6MGiVJ2qlygmN7r9Xs2bOrXU7Zejq0S7tjn2GDOH/avrUuY7sbFj5bcRvlBOTjMvO4kscPRsQ9mXlcRJzbyX5HA49l5uMAEfEDYBawPSBn5mpgdUScvhu1S5LUa/XW0C71B+VcpDcsIt7Y/iAijgaGFR9u7WS/JuDpkscrisvKlcCvI2JRRFyys40i4pKIWBgRC9esWbMLzUuSJEmvVk4P8geBb0dEeyheD3wwIvYEvtjJfrGDZbsyf/JxmbkyIsYB8yPikcz8zasazLwOuA5g2rRpzs8sSZL6pO66IK47L4ZraWlhrx0lvl6u04BcHEf85sw8IiL2AiIzXyjZ5Eed7L4C2L/k8X7AynILy8yVxX9XR8QtFIZsvCogS5Ik9QfNzc08+XQzQ/eu7IbG26IQ/9asb62onY0vrKaxIWBIRc3UpU4DcmZui4hZwP/NzBd3se0FwMERMQFopnBx3znl7FjsnR6QmeuL358CfG4Xjy9JktSnDN17HBNPKCtOVd2yO2+mdX3fHN5azhCLeyLi68APgZfaF2bm4s52ysytEXEZ8CsK07xdn5nLIuLDxfXXRsS+FKaLGwG0RcRfAYcBY4BbIqK9xpsz85e7/OwkSZKkXVROQP7z4r+lPbgJnNjVjpk5j8Kd90qXXVvy/bMUhl50tA44sozaJEmSpG5Vzp30TuiJQiRJkqR60OU0bxGxT0R8KyJ+UXx8WER8sPqlSZIkST2vnHmQv0NhHPFri4//CPxVtQqSJEmSaqmcgDwmM38EtEHh4jsKt56WJEmS+pxyAvJLETGa4k0+IuIYYFenfJMkSZJ6hXJmsfgYcCvwZxFxDzAW+IuqViVJkiTVSDmzWCyKiLcAb6Bw++g/ZGZlt16RJEmS6lQ5s1g8APwfYFNm/t5wLEmSpL6snDHI7wC2Aj+KiAUR8bcRcUCV65IkSZJqosuAnJlPZuaXM3MqcA4wCVhe9cokSZKkGijnIj0iYjzwv4CzKUzx9n+qV5IkSZJUO10G5Ij4L6AR+DHw7sx8vOpVSZIkSTVSTg/yBZn5SNUrkSRJkurATgNyRJybmTcCp0XEaR3XZ+ZXqlqZJEmSVAOd9SDvWfx3eE8UIkmSJNWDnQbkzPxG8d/P9lw5kiRJUm11Os1bRJwQET+NiGXFr59ExIweqk2SJEnqcTsNyBFxOnA98HMK8x+/D5gHXL+jMcmSJElSX9DZGOTLgTMz84GSZUsiYiHwLxTCsiRJktSndDbEYt8O4RiAzFwK7FO9kiRJkqTa6Swgv7Sb6yRJkqReq7MhFn8WEbfuYHkAB1WpHkmSJKmmOgvIszpZd1V3FyJJkiTVg87mQb67JwuRJEmS6kGn8yBLkiRJ/Y0BWZIkSSphQJYkSZJKdHaRHgAR8XoKNw05sHT7zDyxinVJkiRJNdFlQAZ+DFwL/BuwrbrlSJIkSbVVTkDempn/WvVKJEmSpDpQzhjk/4iI2RHxmogY1f5V9cokSZKkGiinB/mC4r+XlyxLvJueJEmS+qAuA3JmTuiJQiSpP5g7dy7Nzc2dbtPS0gLA6NGju2yvqamJWbM6u/GpJGlXlTOLRSPwEeD44qK7gG9kZmsV65Kkfmvz5s21LkGS+rVyhlj8K9AIzCk+Pq+47KJqFSVJfVU5vb1z5hT+3M6ePbva5WzXnT3b9mpL6u3KCcjTM/PIksf/LyIeqFZBkqT6ZM+2pP6inIC8LSL+LDP/ByAiDsL5kCWpT6nXnm1JqoVyAvLlwJ0R8TgQFO6od2FVq5IkSZJqpJxZLO6IiIOBN1AIyI9kpp+zSZIkqU8qpwcZYCowvrj9kRFBZt5QtaokSZJU91pbW1nV2sYNC5+tdSnbrVq/hcFtz1XURjnTvH0P+DNgCX8ae5yAAVmSJKmHPPfcc2x8eTPL7ry51qUAsPGF1bS1tZV3X+Zeppwe5GnAYZmZ1S5GkiRJvceAAQPYZ/hAzp+2b61L2e6Ghc8ycNSYitooJyD/HtgXeKaiI0mSJGm3jRkzhlzfysQTzql1KQAsu/NmWtevoTCwoG8pJyCPAR6KiPuB7RfnZeY7qlaVJEmSVCPlBOQrql2EJEmSVC/Kmebt7p4oRJIkSaoHXV53GBFnRcSjEfFiRKyLiPURsa4nipMkSZJ6WjlDLL4MnJGZD1e7GEmSJKnWypm5bpXhWJIkSf1FOT3ICyPih8DPeOUsFv9etaokSZKkGiknII8ANgKnlCxLwIAsSZKkPqecWSwu7IlCJEmSKjF37lyam5srbmflypUAzJkzp+K2mpqamDVrVsXtqGd1GZAjYgjwQWAiMKR9eWZ+oIp1SaoT69at48Ybb+Tcc89lxIgRtS5HknaqubmZ5qeWs8+wQRW109i2FYCtaysL26s2bKlof9VOOUMsvgc8ArwV+BzwPsCL9qR+Yv78+Sxfvpzbb7+ds846q9blSKoD3dVTC93bW9vS0sI+wwZx/rR9K26rO9yw8Nlal6DdVE5Afl1mvjsiZmXmdyPiZuBX1S5MUu2tW7eOBQsWkJksWLCAk08+2V5kSTQ3N/Pk080M3XtcxW1ti0IUWbO+taJ2Nr6wmsaGKPmsW9p95QTk9p/YFyLicOBZYHzVKpJUN+bPn09mAtDW1mYvsqTthu49joknnFPrMrZbdufNtK5fU+sy1EeUMw/ydRExEvg74FbgIQo3D5HUxy1evJht27YBsG3bNhYtWlTjiiRJqr4uA3JmfjMzn8/MuzPzoMwcl5nX9kRxkmprypQpNDQ0ANDQ0MDUqVNrXJEkSdVXziwWg4F3URhWsX37zPxc9cqSVA9mzpzJggULABgwYAAnn3xyjSuSJKn6yhliMReYBWwFXir5ktTHjRgxgunTpxMRTJ8+3Qv0JEn9QjkX6e2XmafuTuMRcSrwNaAB+GZmfqnD+kOAbwNTgE9l5lXl7iupZ8ycOZNVq1bZeyxJ6jfK6UH+XUQcsasNR0QDcA3wNuAw4L0RcViHzdYCHwWu2o19JfWAESNGMHv2bHuPJUn9xk57kCPiQSCL21wYEY8Dm4EAMjMnddH20cBjmfl4sb0fUBiq8VD7Bpm5GlgdEafv6r6SJElSNXQ2xOLtFbbdBDxd8ngF8Mbu3jciLgEuATjggAN2vUpJkiSpRGdDLNYAKzPzycx8ksK9ac4CphYfdyV2sCzLrKvsfTPzusyclpnTxo4dW2bzkiRJ0o51FpB/SfGOeRHxOuBe4CDg0oj4YhltrwD2L3m8H7CyzLoq2VeSJEnabZ0F5JGZ+Wjx+wuA72fmX1K4cK6c4RcLgIMjYkJEDALeQ+FOfOWoZF9JkiRpt3U2Brl0SMOJwD8BZOaWiGjrquHM3BoRlwG/ojBV2/WZuSwiPlxcf21E7AssBEYAbRHxV8BhmbluR/vuxvOTJEmSdklnAXlpRFwFNAOvA34NEBF7l9t4Zs4D5nVYdm3J989SGD5R1r6SJElStXU2xOJi4DkK45BPycyNxeWH0WHeYkmSJKmv2GkPcma+DHS8892UzPwd8LtqFyZJkiTVQjl30iv1zapUIUmSJNWJzsYg78iO5ieWpG4zd+5cmpubO92mpaUFgNGjR3e6XVNTE7Nmzeq22iRJ/cOuBuTPVqUKSdoFmzdvrnUJkqQ+rKyAHBFNwIHA2og4HiAzf1PNwiT1T+X0+M6ZMweA2bNnV7scSVI/1GVAjoh/BM4GHgK2FRcnYECWJElSn1NOD/KZwBsy0880JUmS1OeVE5AfBxoBA7IkSWUo52LTcqxcuRL407CiSnnhqlSecgLyRmBJRNxBSUjOzI9WrSpJknqx5uZmmp9azj7DBlXUTmPbVgC2rq08bK/asKXiNqT+opyAfGvxS1If45RqUvXsM2wQ50/bt9ZlbHfDwmdrXYLUa3QZkDPzuxGxB3BAZv6hB2qSVEecUk31rh6HM7S0tLCXdw6Qeq1yZrE4A7gKGARMiIjJwOcy8x3VLk4qtW7dOm688UbOPfdcRowYUety+gSnVFNf0NzczJNPNzN073EVtbMtCv8lrlnfWlE7G19YTWNDwJCKmpFUQ+UMsbgCOBq4CyAzl0TEhCrWJO3Q/PnzWb58ObfffjtnnXVWrcuRVEeG7j2OiSecU+syAFh25820rl9T6zIkVWBAGdtszcwXOyzLahQj7cy6detYsGABmcmCBQtYt25drUuSJEl9VDkB+fcRcQ7QEBEHR8S/AL+rcl3SK8yfP5/MwvuytrY2br/99hpXJEmS+qpyAvJfAhMpTPH2fWAd8FfVLErqaPHixWzbVriR47Zt21i0aFGNK5IkSX1VlwE5Mzdm5qcyczrwRuAfM3NT9UuT/mTKlCk0NDQA0NDQwNSpU2tckSRJ6qu6DMgRcXNEjIiIPYFlwB8i4vLqlyb9ycyZM4kozJk0YMAATj755BpXJEmS+qpyhlgclpnrgDOBecABwHlVrUrqYMSIEUyfPp2IYPr06U7zJkmSqqacgNwYEY0UAvLczGzFWSxUAzNnzmTChAn2HkuSpKoqZx7kbwBPAA8Av4mIAylcqCf1qBEjRnizCkmSVHXlXKR3dWY2ZeZpWfAkcEIP1FbX1q1bx5w5c5yPV5IkqY8p51bTg4F3AeM7bP+5KtXUK3hXN0mSpL6pnDHIc4FZwFbgpZKvfsu7utVGvfba12tdkiRp95QTkPfLzLMz88uZ+c/tX1WvrI55V7faKO21rye33XYbjz/+OPPmzat1KZIkqRuUE5B/FxFHVL2SXsS7uvW8devWcf/995OZ3H///XXTW7tu3brtr//ChQvrpi5JkrT7ygnIbwIWRcQfImJpRDwYEUurXVg9865uPW/+/Pnb35Rs3bq1bnqRb7vttlc8thdZkqTer5yA/DbgYOAU4Azg7cV/+y3v6tbzOvbSL1y4sEaVvNLixYtf8dhPEyRJ6v3KmebtSWB/4MTi9xvL2a8v865uPW/kyJGdPq6V9rHoO3ssSZJ6n3KmefsMMA14A/BtoBG4ETiuuqXVt5kzZ7Jq1Sp7j3vI888/3+njWhkwYABtbW2veCxJknq3cv43fyfwDopTu2XmSmB4NYvqDdrv6mbvcc+YOnXq9mEtEcG0adNqXFHBUUcd9YrHU6ZMqVElkiSpu5QTkLdk4XPjBIiIPatbkvRqM2fOfMWFkfXSc3/66ae/IrifdtppNa5IkiRVqsshFsCPIuIbwN4RcTHwQeCb1S1LeqX2cd/33XcfRx99dN303I8YMYIpU6awaNEipk6dWjd1SVI1Pffcc2x8eTPL7ry51qVst/GF1dC2FYaUE22kznX5U5SZV0XETGAd8Hrg05lZH3NsqV+p13Hfp59+Os8//7y9x5Ik9RE7DcgRsZ7isAogSlZ9OCI2Af8DfCoz76hifdJ27eO+60291iVJ1TJmzBhyfSsTTzin1qVst+zOm2ldv4Y/RRdp9+00IGfmTi/Ei4gG4HDgpuK/kiRJUp+wW3NSZea2zHwA+JdurkeSJEmqqYpGsmfmN7qrEEmSpEq0trayqrWNGxY+W+tSAFi1fguD256rdRnaDV7qKUndZO7cuTQ3N1fczsqVKwGYM2dOxW0BNDU1MWvWrG5pS5L6AwOyJHWT5uZmnny6maF7j6uonW1R+NO8Zn1rxTVtfGF1xW1IvUVjYyPjhiTnT9u31qUAcMPCZxk4akyty9BuMCBLUjcauve4uruyX5K0a3brIj1JkiSprzIgS5IkSSUcYtFLlHPxT0tLCwCjR4/udDsv2JHUl9TbbY+95bHU+/nb24ds3ry51iVIkoC2tjZWrd9SN9ONgVOOSbvCgNxLlNPj2z4llLc9ltSf1Nttj5fdeTMb164E2mpdiqTdZECWJKmb1dt0Y+CUY9KuMCBLkiRpt63a0D3DiZ7fuBWAkUMri6erNmyhaVRltRiQJUmSeomNL6yu+ILUTRueB2DIsJEV17LnHoMZ89rXVtROu9ZNhbuIDhxVWXtNowoTElTCgCxJktQLVBr62q1cX+ipHTu8sbKGhjd168xY9XQtlQFZkiSpF+iLQbReGZA7KGe+YXDOYUmSpL7KgLybnHNYUm+wacPzrFy/dXuPUSVWriyMD+yOtuw8kFTPDMgdlPsH248nJPUGbVtbGZBb2Lq260/GutLYVhi3WGlbqzZsqbgWSaomA7Ik9XH7DBtUd/PxSlI9G1DrAiRJkqR6YkCWJEmSShiQJUmSpBIGZEmSJKlEVQNyRJwaEX+IiMci4hM7WB8RcXVx/dKImFKy7omIeDAilkTEwmrWKUmSJLWr2iwWEdEAXAPMBFYACyLi1sx8qGSztwEHF7/eCPxr8d92J2Tmc9WqUZIkSeqomj3IRwOPZebjmbkF+AHQcZLhWcANWXAfsHdEvKaKNUmSJEmdqmZAbgKeLnm8oris3G0S+HVELIqIS3Z2kIi4JCIWRsTCNWvWdEPZkiRJ6s+qGZBjB8tyF7Y5LjOnUBiGcWlEHL+jg2TmdZk5LTOnjR07dverlSRJkqhuQF4B7F/yeD9gZbnbZGb7v6uBWygM2ZAkSZKqqpq3ml4AHBwRE4Bm4D3AOR22uRW4LCJ+QOHivBcz85mI2BMYkJnri9+fAnyuirVKrzJ37lyam5u73K6lpQWA0aNHd7pdU1MTs2Z1HIbfv5R7TruycmXhvfacOXMqbgt8bSSpmsr921/u3/ae+JtdtYCcmVsj4jLgV0ADcH1mLouIDxfXXwvMA04DHgM2AhcWd98HuCUi2mu8OTN/Wa1aVXvl/PLUaxDdvHlzjx2rt2tubqb5qeXsM2xQRe00tm0FYOvaysP2qg1bKm5DkupFOf+f1lMQLTV48OAeO1ZXqtmDTGbOoxCCS5ddW/J9ApfuYL/HgSOrWZt6n54OouX+UWj/AzN79uxqltNn7DNsEOdP27fWZWx3w8Jna12CJPWong6ivfETuqoGZKlc5fzyGEQlSepcbwyj9ciALPVB3TXWF7p3vG9LSwt77WjuGkmS6ogBWeqDmpubefLpZobuPa7itrZF4c/EmvWtFbWz8YXVNDYEDKm4JEmSqsqALPVRQ/cex8QTOk4cUzvL7ryZ1vXezEeSVP+qOQ+yJEmS1OsYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkko4i4Ukqdfb+MJqlt15c0VtbNrwPABDho2suJbGBif8lnozA7IkqVdramrqlnZWrt8KwNjhjZU1NLyJlpYWVm1YV/GtzJ/fWKhp5NDK/7tetWELTaMqbkbqFwzIkqRerbturdudt7PvrrtZtm4q3Mly4KjXVtxW06juezMh9XUGZEmSulk9hnZJ5fMiPUmSJKmEAVmSJEkqYUCWJEmSShiQJUmSpBIGZEmSJKmEs1ioX+quKZgAVq4sTMPUfrV5JZqamrrt6ndJkrR7DMjql5qbm2l+ajn7DBtUcVuNbYWJ/LeurSxwr9qwpeJaJKmndMfdC8E7GKo+GZBVdd3VW9udPbUrV65kn2GDOH/avhW31V0qveOWau+5555j48ubuyU0dJdtW7fw/EZH06l7decNR7r7DoawqfKi1O8ZkFV1zc3NPPl0M0P3HldRO9ui8OO6Zn1rxTVt2rwZhlTeeyzVvUw2tm6rqzdgq9ZvYXDbc7UuQxXozqFg3XkzlDlz5lT8aZ4EBmT1kKF7j2PiCefUuoztFtzy1VqXoD5ozJgx5PrWuvpZ/6+fXMXAaKt1GZLUq/SrgFyvF2Zt2rSJIUOGVNyOF4tJ6mhAw0D22ZO6G040cNSYWpchSTvVrwJyd33UD933cX/7RQW5dXPFF4x5sZgkSVLl+lVAhvr7qH/ZnTfTun5NXV0wVk9jFSVJknqalzZLkiRJJQzIkiRJUol+N8RCkiT1Xas2bKl4qODzGwvX9IwcWllMWrVhC02jKmpCNWJAliRJfUJ33cCkdVNhVqiBo15bUTtNo7r3pirqOQZkqQ+qxzu6bXxhNbRthSH+2ZFUHd01PWl33rxEvZNjkCVJkqQSduVIfVA93tFt2Z03s3HtSlatr3x8YHfytseSpI7sQZYkSZJK2IMsqcc0NjYybkjWzU1xwNseS5JezR5kSZIkqYQBWZIkSSphQJYkSZJKOAZZ/VLbtq2sWt/mbAqSJOlV7EGWJEmSStiDrKqrx7u6ZbYxaOAAZ1OQJEmvYg+yJEmSVMIeZFVdPd7VbcEtX2Xk0FpXob5o4wurK/60ZNOG5wEYMmxkxfVs27oFGFRxO5LUnxiQJambNDU1dUs7K9dvBWDs8MaK22pdPxjIituRpP6kXwXkehwLu/GF1dC2FYb0q5dC6pNmzZrVLe3MmTMHgNmzZ3dLW1vXNlfcjiT1J45BliRJkkr0q27LehwLu+zOm9m4diWr1m+pmzl5nY9Xkqpv7ty5NDd33ru/cuVK4E+fKnSmqamp2z7FkPq7fhWQJUnqTQYPHlzrEqR+yYBcBxobGxk3JOtmTl7n45XU13Rnb2139dTa2yvVLwOyJPVxqzZ0zxCu5zcWZtcYObSy/zpWbdhC06iKy+l29tZKamdAlqQ+rLumngNo3VToYR046rUVtdM0qnvrKoe9tZJ2hQFZ/Za9arXRHee9u855ez19+bx3ZzDszunnJKmeGZDVI+rt7mJt27YSgwZX3BMGvbtXracNGjSIMa+tn3MOPX/enblA/UU5P+vQ82O/pXIYkFV19Xh3sbHDD+y2P7b2qpVvzJgx3XbzC+i757wWY2Hr8SI29Q+O/VY9MiCr6urx7mL9QXf02kP39dxvfGE1DO/bPeTl6M3B0SCjXdGbf9YlA7LUB3XnkIFu67kf3tTnh5D0ZoYZ9Rd+WqJyGJDrRD1duNTXL1rqD7wwS5J2n5+WqN8F5Hr82HnPPQbX1YVL/eFiMUlS/2SPr8rRrwJyPX/s7MVikiRJ9aGqATkiTgW+BjQA38zML3VYH8X1pwEbgfdn5uJy9t0dfuwsSZKkrlQtIEdEA3ANMBNYASyIiFsz86GSzd4GHFz8eiPwr8Aby9y3Kup13kYvKuh59fqz0J38uZIk6dWq2YN8NPBYZj4OEBE/AGYBpSF3FnBDZiZwX0TsHRGvAcaXsW9N1eMA/nqsqVy9Oaj15vNejp5+fr35Z0GS1DdUMyA3AU+XPF5BoZe4q22ayty3Kur1P9N6rasn9XRQ6w/nvLc+x77+pkSSVFvVDMixg2VZ5jbl7FtoIOIS4BKAAw44YFfqUx3prUFN3c+fBUlSrQ2oYtsrgP1LHu8HrCxzm3L2BSAzr8vMaZk5bezYsRUXLUmSpP6tmgF5AXBwREyIiEHAe4BbO2xzK3B+FBwDvJiZz5S5ryRJktTtqjbEIjO3RsRlwK8oTNV2fWYui4gPF9dfC8yjMMXbYxSmebuws32rVaskSZLULgoTSPQN06ZNy4ULF9a6DEmSJPUCEbEoM6d1XF7NIRaSJElSr2NAliRJkkoYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkkoYkCVJkqQSBmRJkiSphAFZkiRJKmFAliRJkkoYkCVJkqQSkZm1rqHbRMQa4Mla17EbxgDP1bqIfsjzXhue957nOa8Nz3vP85zXRm8+7wdm5tiOC/tUQO6tImJhZk6rdR39jee9NjzvPc9zXhue957nOa+NvnjeHWIhSZIklTAgS5IkSSUMyPXhuloX0E953mvD897zPOe14XnveZ7z2uhz590xyJIkSVIJe5AlSZKkEgZkSZIkqYQBuYYi4vqIWB0Rv691Lf1FROwfEXdGxMMRsSwi/neta+oPImJIRNwfEQ8Uz/tna11TX7WjvysRMSoi5kfEo8V/R9ayxr5mZ39XPO/VtbO/K5736ouIhoj474j4efFxnzvnBuTa+g5waq2L6Ge2Ah/LzEOBY4BLI+KwGtfUH2wGTszMI+H/b+/eQrQo4ziOf38d7IBB0dGUELKTdLBQsSxKsSiKMjIqiuwm6CI6oVFRFNFNBOVFF14kqRRK2TkkEk2KjqSZHREi6SLTonNEhf26mGdrsH3XQzs77fv+PrDMM7PPM8+fP+yz/52deYcJwLmSprQcU7dayL/XlduAlbaPAlaW/Rg8ndaV5L1ZndaV5L15NwKf1Pa7LucpkFtk+1Xg27bj6CW2N9leW9o/Uf2Aj243qu7nys9ld8/ylSeEG9BhXbkIWFTai4CZQxpUlxtgXUneGzTAupK8N0jSGOB84JHa4a7LeQrk6FmSxgInA2+3G0lvKP+SWwdsAVbYTt6HzqG2N0FVzAGHtBxP19pmXUneG9ZhXUnemzUPuBX4s3as63KeAjl6kqSRwFPATbZ/bDueXmB7q+0JwBhgsqTj244pYjBlXRl6WVeGlqQLgC2217QdS9NSIEfPkbQn1S+xx20/3XY8vcb298Bqcv/9UNosaRRA2W5pOZ6u02FdSd6HyDbrSvLenKnAhZI2AkuB6ZIeowtzngI5eookAQuAT2w/2HY8vULSwZL2L+19gBnAp+1G1VOeB2aX9mzguRZj6ToDrCvJe4MGWFeS94bYvt32GNtjgcuBVbavogtznjfptUjSEuAs4CBgM3C37QWtBtXlJJ0OvAZ8wD/3T91he3l7UXU/SSdSPbixO9Uf5k/YvrfdqLpTf+sK8CzwBHAE8AVwqe08IDxIOq0rVPchJ+8N6bSuSDqQ5L1xks4C5ti+oBtzngI5IiIiIqImt1hERERERNSkQI6IiIiIqEmBHBERERFRkwI5IiIiIqImBXJERERERE0K5IiIhkk6TNJSSZ9J+ljScklHSzpc0rJBmuM6SVeX9jWSDu/Qb6GkzyW9L2mDpMWSRv+HeWdKGl/bXy1p4q6eLyLi/yAFckREg8pLJJ4BVts+0vZ4qs/IPdT2l7Zn9TNm59ycQgAAAm1JREFUj52dx/Z824vL7jVAvwVyMdf2ScAxwHvAK5JG7OycxUxg/HZ7RUQMIymQIyKaNQ34w/b8vgO219l+TdJYSR/C31d9n5T0AvCypJGSHpX0gaT1ki4p/X7uO4+kWZIWlvY9kuZImgVMBB6XtK68YaxfrjwEfAWcV85zjqQ3Ja0t8YwsxzdKul/SO+VrnKTTgAuBB8pcR5ZTX1r6bJB0xmAlMiJiqKRAjoho1vHAmh3seyow2/Z04C7gB9sn2D4RWLUjJ7C9DHgXuNL2BNu/7sCwtcCxkg4C7gRm2D6lnOeWWr8fbU8GHgbm2X6D6hWzc8tcn5V+e5R+N1G9yS8iYljZ6X/jRUREY1bUXs86A7i87xu2v2twXpXtFKrbJV6v7gxhBPBmrd+S2vahAc73dNmuAcYOWpQREUMkBXJERLM+Av51n3EHv9TaAtxPn/qxvXc1qG2cDKwsc66wfUWHfu7Q3tZvZbuV/J6JiGEot1hERDRrFbCXpGv7DkiaJOnM7Yx7Gbi+NuaA0tws6ThJuwEXdxj7E7Df9gJT5QZgFPAS8BYwVdK48v19JR1dG3JZbdt3ZXmH5oqIGE5SIEdENMi2qQrZs8vHvH0E3AN8uZ2h9wEHSPpQ0vtUD/sB3Aa8SFV4b+owdiEwf4CH9B4o59wATAKm2f7d9tdUn4CxRNJ6qoL52Nq4vSS9DdwI3FyOLQXmSnqv9pBeRMSwpmrtjoiI6EzSRmCi7W/ajiUiomm5ghwRERERUZMryBERERERNbmCHBERERFRkwI5IiIiIqImBXJERERERE0K5IiIiIiImhTIERERERE1fwG8eGuZ3uS3ngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load your data\n", + "df1 = pd.read_csv(\"results_with_jsd_2025-05-29T11:13:43.csv\")\n", + "df2 = pd.read_csv(\"results_with_jsd_2025-05-29T11:23:25.csv\")\n", + "df = pd.concat([df1, df2], ignore_index=True)\n", + "\n", + "# Filter to noisy runs\n", + "df_noisy = df[df[\"use_noise\"] == True]\n", + "\n", + "# Set pastel style\n", + "sns.set_palette(\"pastel\")\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(data=df_noisy, x=\"circuit_depth\", y=\"jsd_vs_ideal\", hue=\"use_dd\")\n", + "plt.title(\"JSD vs Ideal by Circuit Depth (Noisy Runs)\")\n", + "plt.xlabel(\"Circuit Depth\")\n", + "plt.ylabel(\"Jensen-Shannon Divergence\")\n", + "plt.legend(title=\"Dynamical Decoupling\")\n", + "plt.tight_layout()\n", + "# Save the figure\n", + "plt.savefig(\"pennylane_jsd_boxplot.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Boxplot: Execution Time vs Circuit Depth" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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rupXAXnIkCEsXLiQBx98kNmzZ3PXXXfxmc98ppRampubueqqq3p8vTfeeCOLFy9m8eLF7L333kyePLnHt7E77rrrLvbff/+yy5AkSdpl/SogVxs9ejTXXnstX/3qV8lMXve617Fw4cLWx0899VQWL17Mpz/9ad7xjncwadIkXvnKV+4UaqdMmcIJJ5zA0UcfzbXXXts6f+jQoXz0ox/lhBNO4IwzzuD+++9vff4dd9wBwL333ss555wDwKZNm7j44os59thjGT9+PN/73vcAeO9730tzczNHH300n/pU254ondtrr734l3/5Fx577DEWLVoEwMyZMznppJOYOHEif/M3f8MLL7wAwI9+9COOP/54JkyYwOmnV3q3PPnkk0yZMoXx48dz8skns3jxYgA+/elP88UvfrF1O8cccwzLly9n+fLlvOpVr2LatGmMHz+eN7/5zTz33HMvqWvcuHGsW7eO5cuXc9RRR/Hud7+bo48+mrPOOovNmzcDMHfuXMaPH88pp5zCZZddxjHHHNOtfZckSaqnfhuQAV75yleyY8cO1qxZw7ve9S6uv/56AH73u9+xdetWxo8fD8BDDz3Ef/3Xf3H//ffzmc98hm3btgHwzW9+k/nz5zNv3jyuuuoq1q9fD8Czzz7LpEmTmD9/PsOGDeOKK65g9uzZ3HbbbXzyk598SR2f/exn2W+//XjggQdYvHgxr3/96wH43Oc+x7x581i8eDE/+clPWkNqrZqampgwYQIPPfQQS5Ys4eabb+a+++5j4cKFNDU1ceONN7J27Vre/e53873vfY9Fixbx3e9+F4BPfepTHHfccSxevJh//Md/5MILL+xye0uXLuWSSy5h8eLFDB8+nKuvvrrT5ZctW8b73vc+HnzwQfbff//WDwYXX3wx//Ef/8EvfvELmpqaurXPkiSp/9mwYQNXX301GzZsKLsUoJ8HZKiMqQtw7rnncuedd7Jt2za++c1vctFFF7Uu84Y3vIG9996bkSNHMnr0aFavXg3AVVddxYQJEzj55JN5/PHHWbZsGVBpvT377LMBOPbYY/nTP/1TBg0axLHHHsvy5ctfUsPdd9/N+973vtbpESNGAHDLLbdw/PHHc9xxx/Hggw/y29/+dpf3b86cOcyfP58TTzyRiRMnMmfOHB5++GF++ctfctppp7WOJ3zAAQcA8POf/5wLLrgAgNe//vWsX7+eZ555ptNtvfzlL+fUU08FYOrUqfz85z/vdPnDDjuMiRMnAnDCCSewfPlynn76aTZu3MhrX/taAM4777xu77MkSepfZs+ezSOPPMLdd99ddilAnUexKNvDDz9MU1MTo0ePJiI488wzmTVrFrfccstOJ8HtvfferfebmprYvn079957L3fffTe/+MUv2GeffZg0aVLruLyDBg1qHYZswIABrc8fMGAA27dvf0kdmfmSYcseeeQRvvjFLzJ37lxGjBjBRRdd1O1xf1944QUeeOABjjrqKNasWcO0adP4p3/6p52WueOOO9odMq0lWFeLCAYOHLjTiY3VNbVdT1dDsbU9rps3b253u5IkqXFt2LCBuXPnkpnMnTuXM844g+HDh5daU79tQV67di3vec97eP/7398a5N71rnfxgQ98gBNPPLG1JbUjzzzzDCNGjGCfffbhoYce4pe//OUu13LWWWfx1a9+tXX6qaeeYsOGDey7777st99+rF69mv/8z//s1jq3bdvGxz72MV7+8pczfvx4Tj/9dG699VbWrKlcmPDJJ5/k0Ucf5ZRTTuEnP/kJjzzySOt8gNNOO40bb7wRqPSXHjlyJMOHD2fcuHEsWLAAgAULFrQ+D+Cxxx7jF7/4BQDf/va3+ZM/+ZNuH4sRI0YwbNiw1uP5ne98p9vrkCRJ/cfs2bNbz5vavn17n2hF7lcBefPmza3DvJ1xxhmcddZZO538dsIJJzB8+HAuvvjiLtd19tlns337dsaPH88nPvEJTj755F2u64orruCpp57imGOOYcKECdxzzz1MmDCB4447jqOPPpp3vOMdrV0XunL++eczfvx4jjnmGJ599llmzapciPDVr341V155JWeddRbjx4/nzDPPZNWqVYwaNYprr72Wv/7rv2bChAm89a1vBSon482bN4/x48dz+eWXc8MNNwDwpje9iSeffJKJEydyzTXXcMQRR7Ru+6ijjuKGG25g/PjxPPnkk7z3ve/dpePxjW98g0suuYRTTjmFzGS//fbbpfVIkqQ934IFC1q/Yc5M5s+fX3JFEHvCV97Nzc3ZdlzgJUuWcNRRR3VrPStXrmTSpEk89NBDDBjQrz4b1N3y5cs555xz+M1vfrPb69q0aRNDhw4F4POf/zyrVq3iK1/5ykuW25XfsSRJ2rNMnz59p4EKJkyY0Hqe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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Set pastel style again (in case another style is applied elsewhere)\n", + "sns.set_palette(\"pastel\")\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(data=df_noisy, x=\"circuit_depth\", y=\"execution_time\", hue=\"use_dd\")\n", + "plt.title(\"Execution Time vs Circuit Depth (DD vs No-DD)\")\n", + "plt.xlabel(\"Circuit Depth\")\n", + "plt.ylabel(\"Execution Time (s)\")\n", + "plt.legend(title=\"Dynamical Decoupling\")\n", + "plt.tight_layout()\n", + "# Save the figure\n", + "plt.savefig(\"pennylane_execution-time_boxplot.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Compute mean execution times\n", + "mean_exec = (\n", + " df_noisy.groupby([\"circuit_depth\", \"use_dd\"])[\"execution_time\"]\n", + " .mean()\n", + " .reset_index()\n", + ")\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "for dd in [True, False]:\n", + " sub = mean_exec[mean_exec[\"use_dd\"] == dd]\n", + " label = \"DD\" if dd else \"No-DD\"\n", + " plt.plot(sub[\"circuit_depth\"], sub[\"execution_time\"], marker=\"o\", label=label)\n", + "\n", + "plt.yscale(\"log\") # log scale to visualize exponential growth\n", + "plt.title(\"Mean Execution Time vs Depth (Log Scale for Exponential Growth)\")\n", + "plt.xlabel(\"Circuit Depth\")\n", + "plt.ylabel(\"Execution Time (s, log scale)\")\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "# Save the figure\n", + "plt.savefig(\"pennylane_execution-time_log.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Summary Table by Depth" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
depthmean_no_ddmean_ddmean_improvementpercent_improvementp_value
010.0024300.0021210.00030912.7320540.75
120.0014630.003218-0.001755-119.9010350.50
230.0017840.0010400.00074441.7154400.50
3100.0120760.0075390.00453737.5736700.25
4200.0160910.0132380.00285217.7258360.75
5300.0097240.0080890.00163516.8127920.25
6400.0583320.060970-0.002638-4.5221540.75
\n", + "
" + ], + "text/plain": [ + " depth mean_no_dd mean_dd mean_improvement percent_improvement p_value\n", + "0 1 0.002430 0.002121 0.000309 12.732054 0.75\n", + "1 2 0.001463 0.003218 -0.001755 -119.901035 0.50\n", + "2 3 0.001784 0.001040 0.000744 41.715440 0.50\n", + "3 10 0.012076 0.007539 0.004537 37.573670 0.25\n", + "4 20 0.016091 0.013238 0.002852 17.725836 0.75\n", + "5 30 0.009724 0.008089 0.001635 16.812792 0.25\n", + "6 40 0.058332 0.060970 -0.002638 -4.522154 0.75" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "depths = sorted(df_noisy[\"circuit_depth\"].unique())\n", + "summary_stats = []\n", + "\n", + "for depth in depths:\n", + " sub_df = df_noisy[df_noisy[\"circuit_depth\"] == depth]\n", + " grouped = sub_df.groupby(\"run_number\")\n", + "\n", + " pairs = []\n", + " for _, group in grouped:\n", + " if set(group[\"use_dd\"]) == {True, False}:\n", + " no_dd = group[group[\"use_dd\"] == False][\"jsd_vs_ideal\"].values[0]\n", + " dd = group[group[\"use_dd\"] == True][\"jsd_vs_ideal\"].values[0]\n", + " pairs.append((no_dd, dd))\n", + "\n", + " if pairs:\n", + " no_dd_vals, dd_vals = zip(*pairs)\n", + " stat, p = wilcoxon(no_dd_vals, dd_vals)\n", + " mean_no_dd = np.mean(no_dd_vals)\n", + " mean_dd = np.mean(dd_vals)\n", + " improvement = mean_no_dd - mean_dd\n", + " percent = 100 * improvement / mean_no_dd if mean_no_dd != 0 else 0\n", + " summary_stats.append((depth, mean_no_dd, mean_dd, improvement, percent, p))\n", + "\n", + "summary_df = pd.DataFrame(summary_stats, columns=[\"depth\", \"mean_no_dd\", \"mean_dd\", \"mean_improvement\", \"percent_improvement\", \"p_value\"])\n", + "summary_df\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Summary Table by Depth and Qubit Count" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
depthn_qubitsmean_no_ddmean_ddmean_improvementpercent_improvementp_value
0130.0024300.0021210.00030912.7320540.75
1140.0026840.002985-0.000301-11.2170411.00
2150.0046410.0042210.0004199.0347191.00
3160.0127440.0108260.00191815.0484470.50
4170.0117780.012637-0.000859-7.2918661.00
5180.0286350.0272240.0014104.9255900.50
6190.0264200.029291-0.002871-10.8686400.75
71100.0620060.0602350.0017712.8566401.00
8230.0014630.003218-0.001755-119.9010350.50
9240.0067980.007733-0.000935-13.7499060.25
10250.0077430.0072410.0005026.4826810.75
11260.0115820.012937-0.001355-11.6994790.50
12270.0221420.022931-0.000789-3.5623860.75
13280.0398970.040122-0.000225-0.5631121.00
14290.0273640.0261720.0011924.3574340.75
152100.0774780.0744160.0030623.9515761.00
16330.0017840.0010400.00074441.7154400.50
17340.0042390.0039880.0002515.9174051.00
18350.0083820.009308-0.000926-11.0477631.00
19360.0177740.0148380.00293616.5192401.00
20370.0284430.0267810.0016625.8443720.50
21380.0385680.040112-0.001544-4.0027760.75
22390.0626780.0590360.0036425.8104920.50
233100.0930910.0886510.0044394.7687940.50
241030.0120760.0075390.00453737.5736700.25
251040.0089460.0075920.00135415.1372820.25
261050.0138800.0119430.00193713.9521920.75
271060.0259260.0252730.0006532.5176201.00
281070.0339910.0322500.0017415.1205420.50
291080.0594330.0502640.00916915.4280830.25
301090.0776370.077979-0.000343-0.4413121.00
3110100.1114650.1068450.0046204.1446260.50
322030.0160910.0132380.00285217.7258360.75
332040.0348670.0314480.0034199.8046960.25
342050.0378260.043070-0.005244-13.8621520.50
352060.0459910.0453310.0006611.4367110.75
362070.0760070.078159-0.002152-2.8309830.50
372080.0881230.091676-0.003553-4.0316260.25
382090.0858240.0822550.0035694.1588140.75
3920100.1480460.156624-0.008579-5.7945690.50
403030.0097240.0080890.00163516.8127920.25
413040.0094820.0088740.0006086.4083640.75
423050.0377910.0314200.00637016.8571150.25
433060.0576250.059296-0.001671-2.8995530.75
443070.0855710.0813870.0041844.8894770.50
453080.0990210.101091-0.002071-2.0910501.00
463090.1144240.1107550.0036693.2066380.50
4730100.1863420.189741-0.003398-1.8237360.25
484030.0583320.060970-0.002638-4.5221540.75
494040.1124310.1109660.0014651.3026090.75
504050.0592340.060488-0.001255-2.1178881.00
514060.0520600.0506000.0014612.8059510.75
524070.1207840.121569-0.000785-0.6496750.75
534080.1407590.144321-0.003562-2.5308261.00
544090.1656310.1629490.0026821.6190630.50
5540100.2280530.2208000.0072533.1803650.50
\n", + "
" + ], + "text/plain": [ + " depth n_qubits mean_no_dd mean_dd mean_improvement \\\n", + "0 1 3 0.002430 0.002121 0.000309 \n", + "1 1 4 0.002684 0.002985 -0.000301 \n", + "2 1 5 0.004641 0.004221 0.000419 \n", + "3 1 6 0.012744 0.010826 0.001918 \n", + "4 1 7 0.011778 0.012637 -0.000859 \n", + "5 1 8 0.028635 0.027224 0.001410 \n", + "6 1 9 0.026420 0.029291 -0.002871 \n", + "7 1 10 0.062006 0.060235 0.001771 \n", + "8 2 3 0.001463 0.003218 -0.001755 \n", + "9 2 4 0.006798 0.007733 -0.000935 \n", + "10 2 5 0.007743 0.007241 0.000502 \n", + "11 2 6 0.011582 0.012937 -0.001355 \n", + "12 2 7 0.022142 0.022931 -0.000789 \n", + "13 2 8 0.039897 0.040122 -0.000225 \n", + "14 2 9 0.027364 0.026172 0.001192 \n", + "15 2 10 0.077478 0.074416 0.003062 \n", + "16 3 3 0.001784 0.001040 0.000744 \n", + "17 3 4 0.004239 0.003988 0.000251 \n", + "18 3 5 0.008382 0.009308 -0.000926 \n", + "19 3 6 0.017774 0.014838 0.002936 \n", + "20 3 7 0.028443 0.026781 0.001662 \n", + "21 3 8 0.038568 0.040112 -0.001544 \n", + "22 3 9 0.062678 0.059036 0.003642 \n", + "23 3 10 0.093091 0.088651 0.004439 \n", + "24 10 3 0.012076 0.007539 0.004537 \n", + "25 10 4 0.008946 0.007592 0.001354 \n", + "26 10 5 0.013880 0.011943 0.001937 \n", + "27 10 6 0.025926 0.025273 0.000653 \n", + "28 10 7 0.033991 0.032250 0.001741 \n", + "29 10 8 0.059433 0.050264 0.009169 \n", + "30 10 9 0.077637 0.077979 -0.000343 \n", + "31 10 10 0.111465 0.106845 0.004620 \n", + "32 20 3 0.016091 0.013238 0.002852 \n", + "33 20 4 0.034867 0.031448 0.003419 \n", + "34 20 5 0.037826 0.043070 -0.005244 \n", + "35 20 6 0.045991 0.045331 0.000661 \n", + "36 20 7 0.076007 0.078159 -0.002152 \n", + "37 20 8 0.088123 0.091676 -0.003553 \n", + "38 20 9 0.085824 0.082255 0.003569 \n", + "39 20 10 0.148046 0.156624 -0.008579 \n", + "40 30 3 0.009724 0.008089 0.001635 \n", + "41 30 4 0.009482 0.008874 0.000608 \n", + "42 30 5 0.037791 0.031420 0.006370 \n", + "43 30 6 0.057625 0.059296 -0.001671 \n", + "44 30 7 0.085571 0.081387 0.004184 \n", + "45 30 8 0.099021 0.101091 -0.002071 \n", + "46 30 9 0.114424 0.110755 0.003669 \n", + "47 30 10 0.186342 0.189741 -0.003398 \n", + "48 40 3 0.058332 0.060970 -0.002638 \n", + "49 40 4 0.112431 0.110966 0.001465 \n", + "50 40 5 0.059234 0.060488 -0.001255 \n", + "51 40 6 0.052060 0.050600 0.001461 \n", + "52 40 7 0.120784 0.121569 -0.000785 \n", + "53 40 8 0.140759 0.144321 -0.003562 \n", + "54 40 9 0.165631 0.162949 0.002682 \n", + "55 40 10 0.228053 0.220800 0.007253 \n", + "\n", + " percent_improvement p_value \n", + "0 12.732054 0.75 \n", + "1 -11.217041 1.00 \n", + "2 9.034719 1.00 \n", + "3 15.048447 0.50 \n", + "4 -7.291866 1.00 \n", + "5 4.925590 0.50 \n", + "6 -10.868640 0.75 \n", + "7 2.856640 1.00 \n", + "8 -119.901035 0.50 \n", + "9 -13.749906 0.25 \n", + "10 6.482681 0.75 \n", + "11 -11.699479 0.50 \n", + "12 -3.562386 0.75 \n", + "13 -0.563112 1.00 \n", + "14 4.357434 0.75 \n", + "15 3.951576 1.00 \n", + "16 41.715440 0.50 \n", + "17 5.917405 1.00 \n", + "18 -11.047763 1.00 \n", + "19 16.519240 1.00 \n", + "20 5.844372 0.50 \n", + "21 -4.002776 0.75 \n", + "22 5.810492 0.50 \n", + "23 4.768794 0.50 \n", + "24 37.573670 0.25 \n", + "25 15.137282 0.25 \n", + "26 13.952192 0.75 \n", + "27 2.517620 1.00 \n", + "28 5.120542 0.50 \n", + "29 15.428083 0.25 \n", + "30 -0.441312 1.00 \n", + "31 4.144626 0.50 \n", + "32 17.725836 0.75 \n", + "33 9.804696 0.25 \n", + "34 -13.862152 0.50 \n", + "35 1.436711 0.75 \n", + "36 -2.830983 0.50 \n", + "37 -4.031626 0.25 \n", + "38 4.158814 0.75 \n", + "39 -5.794569 0.50 \n", + "40 16.812792 0.25 \n", + "41 6.408364 0.75 \n", + "42 16.857115 0.25 \n", + "43 -2.899553 0.75 \n", + "44 4.889477 0.50 \n", + "45 -2.091050 1.00 \n", + "46 3.206638 0.50 \n", + "47 -1.823736 0.25 \n", + "48 -4.522154 0.75 \n", + "49 1.302609 0.75 \n", + "50 -2.117888 1.00 \n", + "51 2.805951 0.75 \n", + "52 -0.649675 0.75 \n", + "53 -2.530826 1.00 \n", + "54 1.619063 0.50 \n", + "55 3.180365 0.50 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "depths = sorted(df_noisy[\"circuit_depth\"].unique())\n", + "qubits = sorted(df_noisy[\"n_qubits\"].unique())\n", + "dq_stats = []\n", + "\n", + "for d in depths:\n", + " for q in qubits:\n", + " sub_df = df_noisy[(df_noisy[\"circuit_depth\"] == d) & (df_noisy[\"n_qubits\"] == q)]\n", + " grouped = sub_df.groupby(\"run_number\")\n", + "\n", + " pairs = []\n", + " for _, group in grouped:\n", + " if set(group[\"use_dd\"]) == {True, False}:\n", + " no_dd = group[group[\"use_dd\"] == False][\"jsd_vs_ideal\"].values[0]\n", + " dd = group[group[\"use_dd\"] == True][\"jsd_vs_ideal\"].values[0]\n", + " pairs.append((no_dd, dd))\n", + "\n", + " if pairs:\n", + " no_dd_vals, dd_vals = zip(*pairs)\n", + " stat, p = wilcoxon(no_dd_vals, dd_vals)\n", + " mean_no_dd = np.mean(no_dd_vals)\n", + " mean_dd = np.mean(dd_vals)\n", + " improvement = mean_no_dd - mean_dd\n", + " percent = 100 * improvement / mean_no_dd if mean_no_dd != 0 else 0\n", + " dq_stats.append((d, q, mean_no_dd, mean_dd, improvement, percent, p))\n", + "\n", + "dq_df = pd.DataFrame(dq_stats, columns=[\"depth\", \"n_qubits\", \"mean_no_dd\", \"mean_dd\", \"mean_improvement\", \"percent_improvement\", \"p_value\"])\n", + "dq_df\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Global Wilcoxon Test Across All Experiments" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Global Wilcoxon p-value = 0.04496 (N=168 pairs)\n" + ] + } + ], + "source": [ + "\n", + "all_pairs = []\n", + "\n", + "for _, group in df_noisy.groupby([\"circuit_depth\", \"n_qubits\", \"run_number\"]):\n", + " if set(group[\"use_dd\"]) == {True, False}:\n", + " no_dd = group[group[\"use_dd\"] == False][\"jsd_vs_ideal\"].values[0]\n", + " dd = group[group[\"use_dd\"] == True][\"jsd_vs_ideal\"].values[0]\n", + " all_pairs.append((no_dd, dd))\n", + "\n", + "all_no_dd, all_dd = zip(*all_pairs)\n", + "stat, p_value = wilcoxon(all_no_dd, all_dd)\n", + "print(f\"Global Wilcoxon p-value = {p_value:.5f} (N={len(all_pairs)} pairs)\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_with_dd.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_with_dd.png new file mode 100644 index 0000000..485d439 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_with_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_without_dd.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_without_dd.png new file mode 100644 index 0000000..fff3f93 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/circuit_without_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_boxplot.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_boxplot.png new file mode 100644 index 0000000..1faf915 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_boxplot.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_log.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_log.png new file mode 100644 index 0000000..d084434 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_execution-time_log.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_jsd_boxplot.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_jsd_boxplot.png new file mode 100644 index 0000000..1b74c5e Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Pennylane_Dynamic-Decoupling/plots/pennylane_jsd_boxplot.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/dd-qiskit.py b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/dd-qiskit.py new file mode 100644 index 0000000..0d8f26d --- /dev/null +++ b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/dd-qiskit.py @@ -0,0 +1,273 @@ +import collections +import os +import time +from time import sleep +import copy +import csv + +import numpy as np +from qiskit.circuit.library import EfficientSU2 +from qiskit.circuit.library import XGate, YGate, ZGate, HGate +from qiskit import QuantumCircuit +from qiskit.quantum_info import SparsePauliOp +from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager +from qiskit_aer import AerSimulator +from qiskit_aer.primitives import EstimatorV2 +from qiskit.visualization import circuit_drawer +from qiskit_aer.noise import NoiseModel, phase_damping_error, thermal_relaxation_error +from pilot.pilot_compute_service import ExecutionEngine, PilotComputeService + +RESOURCE_URL_HPC = "ssh://localhost" +WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + +pilot_compute_description_ray = { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] +} + +DD_SEQUENCES = { + "XY4": [XGate(), YGate(), XGate(), YGate()], +} + +def start_pilot(pilot_compute_description_ray): + pcs = PilotComputeService(execution_engine=ExecutionEngine.RAY, working_directory=WORKING_DIRECTORY) + pcd = pcs.create_pilot(pilot_compute_description=pilot_compute_description_ray) + pcd.wait() + time.sleep(60) + return pcs + +def create_circuit_and_observable(num_qubits=7): + circuit = EfficientSU2(num_qubits, entanglement="linear", reps=2).decompose() + print("Unique gate names in circuit:", set(instr.operation.name for instr in circuit.data)) + circuit.assign_parameters([0.4] * len(circuit.parameters), inplace=True) + + # Create an observable based on the number of qubits + pauli_strings = [] + for i in range(min(3, num_qubits)): # Use at most 3 observables + pauli_str = ['I'] * num_qubits + pauli_str[i] = 'Z' + pauli_strings.append(''.join(pauli_str)) + + observable = SparsePauliOp(pauli_strings) + print(f"Created observable: {pauli_strings}") + + return circuit, observable + +def get_noise_model(noise_strength=0.05): + noise_model = NoiseModel() + phase_error = phase_damping_error(noise_strength) # Adjust probability as needed + + # Apply to all common 1-qubit gates + noisy_gates = ['x', 'y', 'z', 'h', 'sx', 'rz', 'u1', 'u2', 'u3'] + noise_model.add_all_qubit_quantum_error(phase_error, noisy_gates) + + return noise_model + +def apply_dd(circuit, dd_sequence_type="XY4", logger=None): + if dd_sequence_type not in DD_SEQUENCES: + raise ValueError(f"Unknown DD sequence type: {dd_sequence_type}. Choose from {list(DD_SEQUENCES.keys())}") + + dd_sequence = DD_SEQUENCES[dd_sequence_type] + + num_qubits = circuit.num_qubits + new_circuit = QuantumCircuit(circuit.qubits) + + last_gate_layer = [-1] * num_qubits + current_layer = 0 + + for instr_tuple in circuit.data: + instr = instr_tuple.operation + qargs = instr_tuple.qubits + cargs = instr_tuple.clbits + + involved_qubits = [circuit.find_bit(q).index for q in qargs] + + for q in range(num_qubits): + if q in involved_qubits: + idle_time = current_layer - last_gate_layer[q] + if last_gate_layer[q] != -1 and idle_time > 1: #aanpassen naar 2 + print(f"[DD] Inserting {dd_sequence_type} on qubit {q} at layer {current_layer} (idle for {idle_time} layers)") + for gate in dd_sequence: + new_circuit.append(gate, [q]) + new_circuit.barrier(q) + last_gate_layer[q] = current_layer + + new_circuit.append(instr, qargs, cargs) + current_layer += 1 + + # Optional final DD + for q in range(num_qubits): + idle_time = current_layer - last_gate_layer[q] + if last_gate_layer[q] != -1 and idle_time > 1: + print(f"[DD] Final DD on qubit {q} at end (idle for {idle_time} layers)") + for gate in dd_sequence: + new_circuit.append(gate, [q]) + new_circuit.barrier(q) + + return new_circuit + +def run_noisy_circuit(observable, backend_options, circuit, noise_model): + backend_opts = backend_options.copy() + backend = AerSimulator(noise_model=noise_model, **backend_opts["backend_options"]) + estimator = EstimatorV2(options={"backend_options": backend.options}) + result = estimator.run([(circuit, observable)]).result() + return result[0].data.evs + +def analyze_noise_model(noise_model): + print("\nNOISE MODEL ANALYSIS") + print(f"Basis gates: {noise_model.basis_gates}") + print(f"Instructions with noise: {noise_model.noise_instructions}") + + # Describe the noise model based on how it was created + print("\nNoise model description (based on creation function):") + print("- Phase damping error on idle gates (probability 0.05)") + +def write_dd_results_to_csv(results, filename="dd_effectiveness_results.csv"): + if not results: + print("No DD results to write.") + return + + fieldnames = list(results[0].keys()) + with open(filename, mode='w', newline='') as file: + writer = csv.DictWriter(file, fieldnames=fieldnames) + writer.writeheader() + for row in results: + writer.writerow(row) + print(f"DD effectiveness results written to: {filename}") + +if __name__ == "__main__": + pcs = None + num_nodes = [1] + for nodes in num_nodes: + start_time = time.time() + try: + # Start Pilot + pilot_compute_description_ray["number_of_nodes"] = nodes + pcs = start_pilot(pilot_compute_description_ray) + logger = pcs.get_logger() + + # Create circuit and observable + circuit, observable = create_circuit_and_observable(num_qubits=7) + + # Define backend options + backend_options = { + "backend_options": { + "shots": 4096, + "device": "CPU", + "method": "density_matrix", # more realistic noise propagation than statevector + "blocking_enable": True, + "batched_shots_gpu": True, + "blocking_qubits": 25 + } + } + + # Create noise model + noise_model = get_noise_model() + backend = AerSimulator(noise_model=noise_model, **backend_options["backend_options"]) + + print("\nUsing the following noise model:\n") + print(noise_model) + + # Analyze the noise model parameters + analyze_noise_model(noise_model) + + # Transpile the circuit + print("*********************************** Transpiling circuit ***********************************") + pass_manager = generate_preset_pass_manager(optimization_level=1, backend=backend) + transpiled_circuit = pass_manager.run(circuit) + print("*********************************** Transpiling done ***********************************") + + # Print and draw the transpiled circuit + print("\n--- Transpiled circuit ---") + print(transpiled_circuit.draw()) + try: + circuit_drawer(transpiled_circuit, output='mpl').show() + except: + pass # Ignore if running headless + + # Apply DD + dd_sequence_type = "XY4" + dd_circuit = apply_dd(transpiled_circuit, dd_sequence_type, logger) + + # Print and draw the DD circuit + print("\n--- Circuit with DD ---") + print(dd_circuit.draw()) + try: + circuit_drawer(dd_circuit, output='mpl').show() + except: + pass # Ignore if running headless + + # Print depth info + print(f"Original circuit depth: {transpiled_circuit.depth()}") + print(f"Circuit depth after applying {dd_sequence_type} DD: {dd_circuit.depth()}") + + # Run noisy circuit without DD + print("\n*********************************** Running noisy circuit without DD ***********************************") + noisy_task = pcs.submit_task( + run_noisy_circuit, + observable, + backend_options, + transpiled_circuit, + noise_model, + resources={'num_cpus': 1, 'num_gpus': 2, 'memory': None} + ) + + # Run noisy circuit with DD + print("\n*********************************** Running noisy circuit with DD ***********************************") + dd_noisy_task = pcs.submit_task( + run_noisy_circuit, + observable, + backend_options, + dd_circuit, + noise_model, + resources={'num_cpus': 1, 'num_gpus': 2, 'memory': None} + ) + + # Get results + results_list = pcs.get_results([noisy_task, dd_noisy_task]) + noisy_result = results_list[0] + noisy_with_DD = results_list[1] + + # Print results + print("\n----- RESULTS -----") + print(f"Noisy result (without DD): {noisy_result}") + print(f"Noisy result (with DD applied): {noisy_with_DD}") + + # Calculate DD effectiveness + dd_results = [] + if noisy_result is not None and noisy_with_DD is not None: + error_diff = abs(noisy_result - noisy_with_DD) + print(f"Difference between noisy and DD results: {error_diff}") + + # Record results + result_entry = { + "sequence": dd_sequence_type, + "noisy": noisy_result, + "noisy_dd": noisy_with_DD, + "dd_effect_magnitude": error_diff, + "qubit_count": transpiled_circuit.num_qubits, + "gate_depth": transpiled_circuit.depth() + } + dd_results.append(result_entry) + + # Write results to CSV + write_dd_results_to_csv(dd_results) + else: + print("Error: Failed to evaluate DD effect because one or both results are None.") + + # Print execution time + end_time = time.time() + print(f"Total execution time: {end_time - start_time} seconds") + + except Exception as e: + print(f"Error: {e}") + finally: + if pcs: + pcs.cancel() \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/notebook/dd_qiskit.ipynb b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/notebook/dd_qiskit.ipynb new file mode 100644 index 0000000..3322932 --- /dev/null +++ b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/notebook/dd_qiskit.ipynb @@ -0,0 +1,646 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sequencequbit_countphase_damping_errornoisy_expectation_valuenoisy_dd_expectation_valuenoisy_execution_secsnoisy_dd_execution_secsnoisy_gate_depthnoisy_dd_gate_depth
0XY430.051.5772491.6478050.00700.0045723
1XY430.051.5772491.6478050.00580.0041723
2XY430.051.5772491.6478050.00640.0050723
3XY440.051.4031591.4660310.00670.0047828
4XY440.051.4031591.4660310.00750.0046828
\n", + "
" + ], + "text/plain": [ + " sequence qubit_count phase_damping_error noisy_expectation_value \\\n", + "0 XY4 3 0.05 1.577249 \n", + "1 XY4 3 0.05 1.577249 \n", + "2 XY4 3 0.05 1.577249 \n", + "3 XY4 4 0.05 1.403159 \n", + "4 XY4 4 0.05 1.403159 \n", + "\n", + " noisy_dd_expectation_value noisy_execution_secs noisy_dd_execution_secs \\\n", + "0 1.647805 0.0070 0.0045 \n", + "1 1.647805 0.0058 0.0041 \n", + "2 1.647805 0.0064 0.0050 \n", + "3 1.466031 0.0067 0.0047 \n", + "4 1.466031 0.0075 0.0046 \n", + "\n", + " noisy_gate_depth noisy_dd_gate_depth \n", + "0 7 23 \n", + "1 7 23 \n", + "2 7 23 \n", + "3 8 28 \n", + "4 8 28 " + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv(\"dd_qiskit_0.05 - Sheet1.csv\")\n", + "df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Set global seaborn style and color palette\n", + "sns.set(style=\"whitegrid\")\n", + "palette = sns.color_palette(\"Set2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "grouped = df.groupby(\"qubit_count\").mean(numeric_only=True).reset_index()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Execution Time:\n", + "t-statistic: 0.656\n", + "p-value: 0.516\n", + "No statistically significant difference in execution time.\n", + "\n", + "Expectation Value:\n", + "t-statistic: -101.83\n", + "p-value: 7.0e-45\n", + "DD improves expectation values significantly.\n", + "Note: Expectation values are based on three Pauli observables (e.g., ZIZ, IZZ, etc.)\n" + ] + } + ], + "source": [ + "from scipy.stats import ttest_rel\n", + "\n", + "# Paired t-test: Noisy vs Noisy + DD execution times\n", + "exec_ttest = ttest_rel(df[\"noisy_execution_secs\"], df[\"noisy_dd_execution_secs\"])\n", + "\n", + "# Paired t-test: Noisy vs Noisy + DD expectation values\n", + "expect_ttest = ttest_rel(df[\"noisy_expectation_value\"], df[\"noisy_dd_expectation_value\"])\n", + "\n", + "print(\"Execution Time:\")\n", + "print(f\"t-statistic: {exec_ttest.statistic:.3f}\")\n", + "print(f\"p-value: {exec_ttest.pvalue:.3f}\")\n", + "if exec_ttest.pvalue < 0.05:\n", + " print(\"Statistically significant difference in execution time.\\n\")\n", + "else:\n", + " print(\"No statistically significant difference in execution time.\\n\")\n", + "\n", + "print(\"Expectation Value:\")\n", + "print(f\"t-statistic: {expect_ttest.statistic:.2f}\")\n", + "print(f\"p-value: {expect_ttest.pvalue:.1e}\")\n", + "if expect_ttest.pvalue < 0.05:\n", + " print(\"DD improves expectation values significantly.\")\n", + "else:\n", + " print(\"No statistically significant difference in expectation values.\\n\")\n", + "\n", + "print(\"Note: Expectation values are based on three Pauli observables (e.g., ZIZ, IZZ, etc.)\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAGkCAYAAAA2STNEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXSU5cH+8e9k3whLSEJI2JFFUKhUAaEEKZtsgUApqFhfLYIibhWLrFZlEXnF14W6lGqrVkS2ICBuKAoq2qholEWBhEyALEASsk0yy+8PfoxECJOEmXkyyfU5p+cwzzwzz5W5ezxX7txzPyaHw+FARERERKSB8jM6gIiIiIiIkVSIRURERKRBUyEWERERkQZNhVhEREREGjQVYhERERFp0FSIRURERKRBUyEWERERkQYtwOgAIiK/ZrVa+ec//8nbb78NgN1u55prruHuu++madOmF32t2Wxm9OjRfPPNN+c998Ybb3D69Gluv/123nrrLcrLy7nxxhsv+D4bNmxg9erVlJWVUVFRQa9evZg1axaRkZGX/gP+SmZmJsuWLeOZZ55x6/uazWaGDBlCp06dznvurbfeIigoyK3Xq8q5n/W5Y3CpJk2aRGlpKRUVFRw+fNj5c3bs2JGQkBBGjhzJtddee8nXEZH6T4VYROqcWbNmYbfbee2112jcuDEVFRW88sorTJo0iXXr1hEREVGr9508ebLz36mpqVx22WUXPO/555/nk08+4bnnnqN58+ZUVFSwePFipk+fzn/+859aXftijh49yuHDh93+vgAhISGkpKR45L2r69zP+twxuFSrV68GfvklyOifU0R8l5ZMiEid8t133/HVV1+xdOlSGjduDEBgYCBTp06lffv2vPHGGwAMGjSI77//3vm6cx/b7Xbmzp3L2LFjmTBhAt9++y0AzzzzDI888gjvv/8+27dv55VXXuH111+vdP2SkhJeeOEFFi9eTPPmzZ3Xf/DBB5k0aRLl5eVUVFTw6KOPMmLECEaPHs3cuXMpKiq6aC6z2czgwYN59NFHmTBhAkOHDuX999/HZrMxb948jhw5wm233VYpy+HDh+nduzfl5eUA2Gw2fve733Hw4EHee+89xo0bR3JyMn/4wx/46quvavxZP/vss0yaNAmbzUZubi79+/fniy++AM7M6iYnJzN27FhuueUWDh48CEBxcTEPPfQQw4YNY8SIETz55JM4HA5mz57NqlWrnO999vGvP+uzYwDw008/MWXKFEaPHs2YMWPYuHEjALt372bSpEnMmjWLsWPHMmrUKFJTU2v0s02ZMoVt27ZhNpv5/e9/z4IFC0hOTiYpKYkPP/yQ22+/ncGDB3Pvvfdit9sB+Prrr7nhhhsYN24c48eP56OPPqrxZyoivkmFWETqlK+//pru3bsTGhp63nP9+vXj66+/dvkeZWVl9OvXj40bN3Lvvfdyzz33OEslwJAhQxg0aBC33HLLeUsmDh06REhICG3btq10PDQ0lDFjxhAUFMTf//53cnJySElJISUlBbvdzrJly1zmyszMpH///qxdu5a//OUvLF68GH9/fx577DFat25dqVACtGvXjssuu4zt27cDsHPnThISEujQoQPLli1j4cKFrF+/nnvuuYfdu3dX+VkkJSVV+t/f/vY3AO644w4CAgJYtWoVDz74IDfddBN9+vThyy+/ZOPGjbz++uts3LiRP//5z9x1110APP3001gsFrZu3crGjRv5+uuv+fLLL6v8mav6rK1WK3fccQdTpkzh7bff5qWXXuLJJ590LnX57rvvuPXWW9m4cSPJycmsWLHC5edbFbPZTGJiIuvXr6dnz54sWrSIJ598ki1btvDf//6Xb7/9loKCAh566CGWLVvGhg0bWLlyJQ8//DBHjx6t9XVFxHdoyYSI+BSHw+HynMjISEaMGAFA//79gTNFtzr8/PycM4ZV+eSTT7jvvvsIDAwEzsxGzpgxw+V7BwYGkpiYCMDll19Ofn6+y9dMmDCBDRs2MHz4cNavX8/EiRMBGDlyJHfddReJiYn069ePqVOnXvD1F1sy4e/vz/Llyxk9ejTdunVj2rRpAHz88cdkZGQwadIk57mFhYXk5+fz2Wef8dBDD+Hv74+/vz+vvfYacGbNdU2kp6djsVgYOnQoALGxsQwdOpRPP/2U3r1707JlS7p27Qqc+axq+v7nCgwMZNCgQQC0bt2a3/zmN85lNzExMRQUFPDtt9+Sm5tbaRxNJhP79++nZcuWtb62iPgGzRCLSJ1y1VVX8f3331NaWgpAeXk5p06dAuCLL76gR48eznPPLcfnzgD7+VX+T5vdbneWV1c6duyI1WolPT290nGLxcLUqVPJzs7GbrdjMpkqvX9FRYXLXIGBgc5s577+Yq6//nr27NnDwYMH+eqrrxg+fDgA9913H//5z3/o3r0769evr/LLga5kZWURHBzMkSNHKCgocP48SUlJzhnwDRs2sG7dOho3bkxAQECl7MeOHePUqVOYTKZKP/e5n8eF2Gy28z4Dh8OB1WoFzhT5s3793jUVGBhY6VoX+v+CzWajQ4cOzp85JSWFN9980/kLlYjUbyrEIlKnXHnllfTu3ZvZs2dTUFBAZmYmN954IzNnzmT//v3O4tesWTPS0tKAM2tOc3Nzne+Rn5/vXP+5fft2QkJCaNOmTaXr+Pv7O8vXuYKCgpg6dSpz584lLy8POFNqFy9eTGlpKbGxsfzud7/jjTfeoKKiArvdzuuvv06/fv1c5qqKv79/lQUyODiYkSNHMnv2bIYOHUpoaChWq5VBgwZRWlrK5MmTWbhwIfv3769UvqujsLCQWbNmsXTpUkaNGsXcuXOBM7PqW7ZsIScnBzizO8ef/vQnAPr27cuGDRuw2+2Ul5dz991389VXX9G0aVPnz52dnV1pGcWFPuv27dsTEBDAe++953zNu+++a9iuED179iQjI8O5Fnvv3r0MGzaM7OxsQ/KIiHdpyYSI1DlPPPEE//znP7npppuAM7ON/v7+hIeH8+GHHzJu3DgeeOABHn74Yd588026detGt27dnK+Piorivffe46mnniI0NJRnnnmGgIDK/7kbMGAAS5cuBXAuFThr+vTphIaGOr/kZrFYuOaaa1i5ciVwZu3t448/ztixY7FarVx55ZXMnz8f4KK5qtKxY0eCg4OZMGECb7311nkzp3/4wx947bXXePjhhwEICAhgzpw5PPDAA84Z28WLF19wG7Wza4h/benSpfz9739n4MCB9O/fn2uuuYYJEybw+uuvc+ONNzJ16lRuvfVWTCYTERERPPvss5hMJu666y4WLVpEUlISNpuNESNGMHToUK644goeeOABhg0bRkJCAn369LngZ31WYGAgK1eu5LHHHuOZZ57BZrMxY8YM+vTpU+V6aE9q1qwZTz/9NMuWLcNiseBwOFi2bBkJCQlezyIi3mdyXMrfoUREvKiwsJC0tDTtLSsiIm6lQiwiIiIiDZrWEIuIiIhIg6ZCLCIiIiINms9/qc5ut1NcXHzetjoiIiIiInBmW8eKigrCw8PP25oT6kEhLi4u5sCBA0bHEBEREZE6rlOnTjRq1Oi84z5fiM9usN6pU6cLbjkkNZeWlkb37t2NjiHVoLHyLRov36Lx8i0aL9/i7fEqLy/nwIEDVd6kyecL8dllEkFBQQQHBxucpv7QZ+k7NFa+RePlWzRevkXj5VuMGK+qltfqS3UiIiIi0qCpEIuIiIhIg+bzSyYupqKiArPZTFlZmdFRfEpAQAB79+6t9etDQkJISEiocp2OiIiISF1Srwux2WymUaNGtG3bVluy1UBxcTHh4eG1eq3D4eDEiROYzWbatWvn5mQiIiIi7levl0yUlZURFRWlMuxFJpOJqKgozcqLiIiIz6jXhRiq/jaheI4+cxEREfEl9b4Qi4iIiIhcjAqxF5nNZjp37syuXbsqHR80aBBms/mCr8nOzmbq1KneiCciIiLSINXrL9XVxu6cw2xM38NJSwnNgsMY27YHvWPc9+WwwMBA5s+fz6ZNm4iIiHB5fmxsLC+99JLbri8iIiIilWmG+By7cw7z2k9fctJSAsBJSwmv/fQlu3MOu+0aMTExXHvttTz++OPnPff8888zYsQIRo8ezdKlS7HZbJjNZgYNGgTA22+/TVJSEsnJydx9991YLBZmzZrFmjVrnO8xZcoU9uzZ47a8IiIiIvVdg5kh/jz7EJ9lH7roOYcK87A67JWOldtt/PvAbnYeP1jl666NbU/f2PbVzjJ79mxGjx7Nrl276NevHwCffPIJ27dvZ926dQQGBjJz5kxWr15NYmKi83VPPfUUa9asISoqiscff5xDhw4xfvx4nnnmGSZOnEhWVhYnT56kR48e1c4iIiIi4i2V/hL/Zabb/xJfW5ohPsevy7Cr47UVERHBo48+yvz58ykqKgLgiy++YOTIkYSGhhIQEMD48eP5/PPPK73uuuuuY/LkySxbtoxhw4bRtWtXevfuTU5ODmazmY0bN5KUlOTWrCIiIiLu4I2/xNdWg5kh7luNWdyHvtzoHKRzNQsO4y9XDnZrnv79+1daOmG3n1+6rVZrpcfz5s1j37597Nixg1mzZnHXXXeRlJTE2LFj2bJlC++88w6rVq1ya04RERERd9iYvocrc8wkZR2iWXkZJ4NCSIlvz8bAYMNniTVDfI6xbXsQ5Odf6ViQnz9j23pmCcLs2bPZuXMnOTk59OnThy1btlBWVobVamXdunX06dPHea7VamXo0KE0bdqUadOmkZSU5Ly9cnJyMqtXryYuLo7Y2FiPZBURERG5FO2zDnJjxj6iysswAVHlZdyYsY/2WVUvS/UWjxbioqIiRo0a5dxS7JtvvmHixImMHDmS+++/n/LycgD27t1LcnIyw4YNY+7cuefNjHpL75h23HTZNTQLDgPOzAzfdNk1Hvut5ezSiYqKCgYOHMjAgQMZP348I0eOpGXLltx0003OcwMCArj77ru59dZbSU5OZs+ePc7t2OLi4oiLi2PcuHEeySkiIiJyqcYdPUzwr/4iHmy3M+5oPV4ysWfPHubNm0d6ejpwphzPnDmTf/zjH3Tp0oX777+ftWvXcsMNNzBr1iwee+wxevbsyZw5c1izZg033HCDp6JdVO+Ydh4rwAkJCWzfvr3Ssf79+7N//34A7rzzTu68884qXzNq1ChGjRpV6XmHw0FOTg55eXkMHuzeZR0iIiIi7tLEUlqj497ksRniNWvWsHDhQmJiYgDYtWsXPXv2pEuXLsCZ9bBDhgwhKyuLsrIyevbsCZz58/+2bds8Faveeffdd0lKSuL+++8nKCjI6DgiIiIiF2RqFFWj497ksRniRYsWVXqckZFBWFgY9913H4cOHeKqq65i9uzZ/Pjjj0RHRzvPi46OJjs7u8bXS0tLO+9YQEAAxcXFNQ/vQ373u9/x4YcfArj1Z73U9yovLyc1NdVNaeRi9Dn7Fo2Xb9F4+RaNV90W1vJKOu7/qNJsrN0vgCPxvyHf4LHz2i4TNpuNnTt38uabb9KyZUvmzp3Liy++yLXXXovJZHKe53A4Kj2uru7duxMcHFzp2N69ewkPD7/k7A1NcXHxJX9uQUFB2g/ZC1JTU+nVq5fRMaSaNF6+RePlWzRedd/3J2Kw7v+YgIBATNZyTI2i8O8/jg5d+3r82haL5YKTp2d5bZeJ5s2b06NHD1q1aoW/vz/XX3893333HS1atCA3N9d5Xl5ennOZhYiIiIjUD7lHfyYIB/brJrEn8U78py7DzwtluDq8Voj79+/PDz/8wLFjxwD46KOP6NatG/Hx8QQHBzv/zJGSksKAAQO8FUtEREREvMB69Mz2akEtLzM4yfm8tmQiLi6ORx55hOnTp2OxWOjatSt//etfAVi+fDnz5s2jqKiIbt26cfPNN3srloiIiIh4mMPhICzPTHlAICHNWkD6MaMjVeLxQnzuNmNn99r9tS5durB27VpPRxERERERA+SVFRF/Op+SqHhCTXXvvnB1L5HB7Hs/x/bSg9ievA3bSw9i3/u5W97XbDbTuXNndu3aVen4oEGDnDcuuZDs7GznDTg8affu3fzmN78hKSmJP/7xjwwbNozFixc7d5s49/kxY8ac97yIiIhIVdJPHSe+pAj/uA5GR7kgFeJz2Pd+juP9f8PpE2cOnD6B4/1/u60UBwYGMn/+fIqKiqr9mtjYWF566SW3XN+V7t27k5KSwptvvsnmzZs5deoUDz/88HnPb9q06YLPi4iIiFxIoXk//jho1KqL0VEuyGtriI1m//EzHGk7L37SsYNg+9Vto63lON57Bdv3n1b5MlP3/vhdfq3LDDExMVx77bU8/vjjPProo+c9//zzz7Np0yb8/f3p168fs2bN4tixY9x8881s376dt99+m3/84x/4+/uTkJDAE088wbx587j66quZOHEiAFOmTOGBBx644JZnU6ZMYcmSJSQkJLjMGhgYyIMPPsjAgQOZP3++y+cjIyNdvqeIiIg0UNlnbs/s11IzxHXfr8uwq+O1MHv2bHbu3Hne0okdO3awfft21q1bx4YNG8jIyGD16tWVznnqqaf45z//yfr164mPj+fQoUOMHz+elJQUALKysjh58qTb9v+Njo4mMjLSefvtmj4vIiIiYrPbiTxxnOLQCEzhjY2Oc0ENZobY7/JrwcUsru2lB39ZLnGuRlH4T3zQLTkiIiJ49NFHmT9/Pps2bXIe/+KLLxg5ciShoaEAjB8/no0bN5KYmOg857rrrmPy5MkMHjyYYcOG0bVrVxwOB/Pnz8dsNpOSkkJSUtJ517ztttvIy8vjyJEj3H777QQGBvLII49UqzibTCaCg4MpLb3wfcbPPi8iIiJyIVkl+bQuyqe8RTujo1RJM8TnMPUfBwFBlQ8GBJ057kb9+/d3Lp04y263n3ee1Vp5ZnrevHk8/fTTNG7cmFmzZpGSkoLJZGLs2LFs2bKFd95554KFeNWqVaSkpNC9e3defPFFUlJSqlWG8/LyOH36NK1bt67V8yIiIiLm3CM0Ly8jOL6T0VGqpEJ8Dr+ufTENuRkaRZ050CgK05CbPXIXlbNLJ3JycgDo06cPW7ZsoaysDKvVyrp16+jTp4/zfKvVytChQ2natCnTpk0jKSmJvXv3ApCcnMzq1auJi4sjNjbWLfnKy8tZtmwZ48aNc85a1+R5EREREYAS834AwhM6G5ykag1myUR1+XXtC164jeDZpRO33XYbcGY5xN69exk/fjxWq5X+/ftz0003cfz4cQACAgK4++67ufXWWwkODiYqKoqlS5cCZ256EhcXx7hxF5/JfvXVVy/6fFpaGklJSdjtdhwOB3369OHBBx8873kAm8123vMiIiIivxaQnYHdZCKgRVujo1RJhdhLEhISKt2kBM4sndi/f7/z8Z133smdd95Z5etGjRrFqFGjKj3vcDjIyckhLy+PwYMH1zpf7969+eabbwAoLi4mPDy8yudFREREqqPMWkHz/FyKIqNoGlh3v3OkJRM+7t133yUpKYn777+foKAg1y8QERER8ZKM03m0KS7EFtvW6CgXpRliHzd8+HCGDx9udAwRERGR8+QcO0hHm5WAOrx+GBrADLHD4TA6QoOjz1xEREQAyrN+BiAkoe7uMAH1vBD7+/tTUVFhdIwGp6KigoAA/fFBRESkoQvJy6TCPwCatTQ6ykXV60LcpEkTsrOzL7jHr3iG3W4nOzubxo3r5p1oRERExDsKykuJKzhBUVQcJr+6XTnr9TRe8+bNMZvNlXZyENfKy8sv6Qt64eHhNG/e3I2JRERExNdk5B+nc2kRRR2vMjqKS/W6EPv5+ekuarWQmpparTvZiYiIiFTlpHk/AQ4HjVp1MTqKS3V7/lpEREREfJLj2CEAAlteZnAS11SIRURERMSt7A4HEXlHKQkJw9SoqdFxXFIhFhERERG3yik9TUJRPmXNE4yOUi0qxCIiIiLiVpl5mcRYSgmMr/vLJUCFWERERETcrChzH4BPfKEOVIhFRERExM38s9NxAH4t2hkdpVpUiEVERETEbSrsNpqcyqYwshmmoFCj41SLCrGIiIiIuE1W0SnaFBdijfade0GoEIuIiIiI2xw7dpAIawWhrTobHaXaVIhFRERExG0sWQcACI9XIRYRERGRBigoJ5MK/wBM0b6xBzGoEIuIiIiIm5RYy4kuyOV001hMfv5Gx6k2FWIRERERcYuM/BxalRRBbFujo9SICrGIiIiIuMUJ834CHXYiWnU1OkqNqBCLiIiIiFvYjh0EICShk8FJasajhbioqIhRo0ZhNpsrHX/ttdeYMmWK8/HevXtJTk5m2LBhzJ07F6vV6slYIiIiIuJmDoeDsDwzpcGh0KiZ0XFqxGOFeM+ePUyePJn09PRKx3/++WdefPHFSsdmzZrFggULePfdd3E4HKxZs8ZTsURERETEA/LLS2l5+hTFUfGYTCaj49SIxwrxmjVrWLhwITExMc5j5eXlLFiwgLvvvtt5LCsri7KyMnr27AlAcnIy27Zt81QsEREREfGAI3lmWpSVEBDXwegoNRbgqTdetGjRecf+93//l/Hjx5OQ8Mu+dDk5OURHRzsfR0dHk52dXePrpaWl1S6oXFBqaqrREaSaNFa+RePlWzRevkXjZaysnO/pDuSUB5JejbGoS+PlsUL8a7t27eLYsWM89NBD7N6923ncbrdXmlZ3OBy1mmbv3r07wcHBbsna0KWmptKrVy+jY0g1aKx8i8bLt2i8fIvGy3glGz8FoMuAYZiCwy56rrfHy2KxXHTy1GuFePPmzfz0008kJSVRUlJCXl4e9957L7NmzSI3N9d5Xl5eXqVlFiIiIiJSt9kddhqfPE5hRBOauijDdZHXCvGSJUuc/969ezfPPvssTz31FADBwcHO3xRSUlIYMGCAt2KJiIiIyCU6XlxA66J8ylr71v7DZ3mtEF/M8uXLmTdvHkVFRXTr1o2bb77Z6EgiIiIiUk1Hjx/iN9YKiL/M6Ci14vFCvH379vOO9e7dm969ezsfd+nShbVr13o6ioiIiIh4QIl5PwCNfOwOdWfpTnUiIiIickkCc49g9fPDL7qV0VFqRYVYRERERGqt3GYl6lQOhU1iMPnXidW4NaZCLCIiIiK1lnk6j1bFp7HHtjU6Sq2pEIuIiIhIreWZ9xPksBPRqovRUWpNhVhEREREaq0i62cAwhJUiEVERESkAQrJy6Q0MBgaNzc6Sq2pEIuIiIhIrRRVWIgtOElR83hMJpPRcWpNhVhEREREauXIiSxalBXj16Kd0VEuiQqxiIiIiNRKfuY+/IDI1pcbHeWSqBCLiIiISK04jh8EILhlR4OTXBoVYhERERGpMYfDQaMTxygMj8QUGmF0nEuiQiwiIiIiNXairIiE06coa+6bt2s+lwqxiIiIiNRYVvZhGleUE+jjyyVAhVhEREREaqE4cx8ATdt0MzjJpVMhFhEREZEa88vOwGrywy+mtdFRLpkKsYiIiIjUiM1hp+mpbAobN8cUEGh0nEumQiwiIiIiNXL09ElaFRdgjW1jdBS3UCEWERERkRrJMR8g2G4nNKGz0VHcQoVYRERERGrEcvQAAJGtuhqcxD1UiEVERESkRoJyMykLCMLUNNboKG6hQiwiIiIi1WaxWYnJz6OwWRwmk8noOG6hQiwiIiIi1ZZ56hhxpUUQ187oKG6jQiwiIiIi1XbqyF78qD/rh0GFWERERERqwHrsIABh9WSHCVAhFhEREZEaCM/LojC0EaawRkZHcRsVYhERERGplsLyUloWnqS0ebzRUdxKhVhEREREqsWcnU7TCgv+LTsYHcWtVIhFREREpFpOZ+4DoEmbbgYncS8VYhERERGpFlP2YWwmE0Gx9WfLNVAhFhEREZFqcDgcND5xjPzIKEyBQUbHcSsVYhERERFxKbekkPiiAspjWhsdxe08WoiLiooYNWoUZrMZgDfffJNRo0YxevRoHnroIcrLywHYu3cvycnJDBs2jLlz52K1Wj0ZS0RERERq6HjWfkLtNkLiLzM6itt5rBDv2bOHyZMnk56eDsDhw4dZtWoVq1evZtOmTdjtdv7zn/8AMGvWLBYsWMC7776Lw+FgzZo1noolIiIiIrVQYj4AQNN69oU68GAhXrNmDQsXLiQmJgaAoKAgFi5cSEREBCaTiU6dOnH06FGysrIoKyujZ8+eACQnJ7Nt2zZPxRIRERGRWgjMOUJZQCB+zeKMjuJ2AZ5640WLFlV6HB8fT3z8mU2cT548yeuvv86SJUvIyckhOjraeV50dDTZ2dmeiiUiIiIiNWS122ien0Nh01jCTfXvK2geK8RVyc7O5s9//jPjx4+nd+/epKamYjKZnM87HI5Kj6srLS3NnTEbvNTUVKMjSDVprHyLxsu3aLx8i8bLc05UFDGwpIgDzdpw1E2fc10aL68W4oMHD/LnP/+ZKVOmcOuttwLQokULcnNznefk5eU5l1nURPfu3QkODnZb1oYsNTWVXr16GR1DqkFj5Vs0Xr5F4+VbNF6e9c2e7fjjoNUVfWjc9dI/Z2+Pl8ViuejkqdfmvIuKirjtttu45557nGUYziylCA4Odv6WkJKSwoABA7wVS0RERERcKD/2MwCNWnU1OIlneG2GeO3ateTl5fHyyy/z8ssvAzBo0CDuueceli9fzrx58ygqKqJbt27cfPPN3oolIiIiIi6E5popDAmnaUQTo6N4hMcL8fbt2wG45ZZbuOWWWy54TpcuXVi7dq2no4iIiIhIDZVaK2hRcILi6FY0NTqMh9S/rwmKiIiIiNtk5WYQVV6GX1wHo6N4jAqxiIiIiFQp/8heAJq0vtzgJJ6jQiwiIiIiVTt2CDsmQuM7Gp3EY1SIRURERKRKESePciqyKabA+ru9rQqxiIiIiFxQflkR8afzsTRPMDqKR7ncZeLkyZPs2LGDw4cP4+fnR/v27Rk0aBARERHeyCciIiIiBjma9ROdbVZK4i8zOopHVTlDXF5ezuOPP86YMWN47733KC0txWKx8MEHHzBy5EieeOIJysrKvJlVRERERLyo2LwPgKZtuhucxLOqnCGeMT4y4/cAACAASURBVGMGo0aN4r777iMoKKjScxUVFWzevJkZM2awatUqj4cUEREREe8LyM7A4h9AaENdMvHUU08RHh5+wecCAwMZN24cw4YN81gwERERETGO3eGgyals8pvEEOZXv792VuVPd24ZzszMBODjjz/mueee4/Tp0wCEhYV5OJ6IiIiIGCHn9AlalpzGGtvG6Cge57LuL1iwgJdeeomDBw8yb948zGYzc+bM8UY2ERERETFI7pEfCXA4CE/obHQUj3NZiNPS0nj44Yd5//33GTduHEuWLCErK8sb2URERETEIJajPwHQpE03g5N4nstC7HA48PPzY9euXfTp0wdAu0uIiIiI1HPBOZmcDg7Fv1Ezo6N4nMtC3Lp1a6ZOnYrZbOaaa67hL3/5C5071/+pcxEREZGGqsJuI7ogj9NRLY2O4hUub8yxZMkS3n//fXr16kVgYCC//e1vGTt2rDeyiYiIiIgBjuaZSbCUcrRFO6OjeEWVhfjo0aPOf1999dXOY4mJiZw6dYrQ0FDPpxMRERERrzuV8QMJQOPWlxsdxSuqLMQjR47EZDLhcDgoKysjLCyMgIAACgsLiYqKYufOnd7MKSIiIiJeYjt+CDsQEd/J6CheUWUh/uabb4Az26717t2bkSNHAvDhhx/ywQcfeCediIiIiHhdeF4WpyKaEBPcMFYEVGvbtbNlGOD3v/89+/bt82goERERETFGcbmFuMKTlNbz2zWfy2Uhttvt7N692/n4k08+wWQyeTSUiIiIiBjj6LGfiLBZCWzZ0egoXuNyl4l58+Zx7733EhgYiN1uB+DZZ5/1eDARERER8b6izL0ANG0AN+Q4y2Uh/u1vf8tHH33EgQMHAOjcuTMBAS5fJiIiIiI+yHQ8nXI/f0Ji2xgdxWtcNtu8vDxWr15Nfn5+pePz5s3zWCgRERER8T6Hw0Hjk8c52SSaeD9/o+N4jctCPGvWLEJCQrj88su1dlhERESkHjtVWkBccQHHExrGdmtnuSzEx48f55133vFGFhEREREx0PGMvXR2OAhtIPsPn+Vyl4mWLVtSUlLijSwiIiIiYqCyrDPfGWvWgL5QB9WYIY6JiWHs2LFcc801hISEOI9rDbGIiIhI/RKUc4SioBAiG0cbHcWrXBbi+Ph44uPjvZFFRERERAxid9iJys+hoFkLGjew7425LMR33XUXxcXF/PDDD1itVq688koiIiK8kU1EREREvOT4qePElpVgjm1rdBSvc1mIv/vuO+68806aN2+OzWYjOzub559/nquuusob+URERETEC05m/EAsENGqq9FRvM5lIX788cdZvnw5ffr0AeDzzz9n6dKlrFmzxuPhRERERMQ7rEd/xg40ad3wCrHLXSaKi4udZRigb9++lJaWVuvNi4qKGDVqFGazGYDPPvuM0aNHM3ToUFasWOE8b+/evSQnJzNs2DDmzp2L1Wqt6c8hIiIiIpcgNNdMfngk/iHhRkfxOpeF2GQykZWV5XxsNpvx93d955I9e/YwefJk0tPTASgrK2POnDmsXLmSrVu3kpaWxo4dO4AzN/9YsGAB7777Lg6HQ7PPIiIiIl5Ubq0gtvAERVENcyMFl4V4xowZ/PGPf2TWrFk8+OCDTJw4kTvuuMPlG69Zs4aFCxcSExMDnFmL3KZNG1q1akVAQACjR49m27ZtZGVlUVZWRs+ePQFITk5m27Ztl/hjiYiIiEh1HT1+iEbWCgLi2hsdxRAu1xAPHjyY9u3b88UXX2C325k2bRodOnRw+caLFi2q9DgnJ4fo6F/2tIuJiSE7O/u849HR0WRnZ9fkZxARERGRS1CY+SMATdp0NziJMVwW4n379vHkk0/y4osvsn//fu6//35WrFhB+/Y1+w3CbrdjOmdPO4fDgclkqvJ4TaWlpdX4NVK11NRUoyNINWmsfIvGy7dovHyLxqv2rIf3UmHy48CxfMj2zudYl8bLZSF++OGHue222wDo3LkzM2fOZOHChbz66qs1ulCLFi3Izc11Ps7NzSUmJua843l5ec5lFjXRvXt3goODa/w6OV9qaiq9evUyOoZUg8bKt2i8fIvGy7dovC7N4W9Wc7Jxc3pdfY1Xruft8bJYLBedPHW5hri0tJQhQ4Y4Hw8ePJiioqIaB+nRoweHDx8mIyMDm83G5s2bGTBgAPHx8QQHBzt/S0hJSWHAgAE1fn8RERERqbmismJanM6nLLqV0VEM43KG2GQysW/fPrp06QLAwYMH8fNz2aPPExwczNKlS5k5cyYWi4XExESGDx8OwPLly5k3bx5FRUV069aNm2++ucbvLyIiIiI1dzxzL+0cdoLjLzM6imFcFuJ77rmHKVOm0KlTJ0wmEwcPHmT58uXVvsD27dud/+7bty+bNm0675wuXbqwdu3aar+niIiIiLhHceY+AKIa6BfqoBqF+LrrrmPbtm18/fXX+Pv706NHD6KioryRTUREREQ8zD/nCMWBwTRq1sLoKIap1tqHr776irS0NPr27cvnn3/u6UwiIiIi4gUOh4Nmp7LJbxpTq12+6guXhfjFF1/kjTfeYNu2bZSVlfHss8/y3HPPeSObiIiIiHjQicI8okuLsMa2NTqKoVwW4i1btvDSSy8RGhpK06ZNWbNmDZs3b/ZGNhERERHxoLz0NPyA8FadjY5iKJeFOCAggKCgIOfjyMhIAgJcLj0WERERkTrOcvQnAJq3brhfqINqFOK4uDg+/vhjTCYT5eXl/P3vfyc+Pt4b2URERETEg0JyzZwMa4R/WCOjoxjKZSGeP38+L7/8Mvv376dnz5588sknzJ8/3xvZRERERMRDbDYb0QW5nG4WZ3QUw7lc+xAbG8u//vUvSktLsdlsREREeCOXiIiIiHhQdm4GsRXlFMS1NzqK4VzOEB88eJC33nqLkJAQ5s+fz+DBg/niiy+8kU1EREREPORUxo8ANG59ucFJjOeyEC9cuJDg4GA+/vhjjh8/zqJFi1ixYoU3somIiIiIh9iPHcRq8qNJy4Z7y+azXBZii8XCmDFj2LlzJ9dffz29e/emoqLCG9lERERExEPCTxwlL7IZfoFBrk+u51wW4vLycvLy8vj444+59tprycvLw2KxeCObiIiIiHhAWUUZLU6fpLR5gtFR6gSXhfiPf/wj1113Hb169aJjx45MmDCBP/3pT97IJiIiIiIecDxzP8F2O4EtOxgdpU5wucvEDTfcwKRJk/DzO9OdN2zYQNOmTT0eTEREREQ843TmXgCi2jTsG3KcVeUM8Zw5c8jNzT1zkt8vp50twzk5OTz00EMejiciIiIi7uafnU5JQCDh0a2MjlInVDlDPGXKFKZNm0arVq247rrraN26NXa7nczMTD755BPS09N59NFHvZlVRERERNyg8cnjnGwSQyOTyegodUKVhbhr166sW7eOd955h23btnH48GEA2rVrx/Dhwxk+fHilmWMRERERqfsKik4RU3KajLZaLnHWRdcQm0wmRowYwYgRI7yVR0REREQ8KDcjjXZAaEIno6PUGZriFREREWlAyrJ+AqB52ysNTlJ3qBCLiIiINCBBOUc4GRJOcEQTo6PUGSrEIiIiIg2Ew+EgKj+Hwqg4o6PUKdUqxN999x2rV6+mvLycb775xtOZRERERMQD8vIyaVJuwRHb1ugodYrLQrx+/Xoeeugh/vGPf3D69GnuvPNO1qxZ441sIiIiIuJGJzN+ACCy9eUGJ6lbXBbiV199lTfffJOIiAiioqJYv349//rXv7yRTURERETcyHr0IFaTiahWXYyOUqe4LMR+fn5EREQ4H8fFxeHv7+/RUCIiIiLifqF5WeRFNMU/MNjoKHWKy0LcpEkT9u7di+n/38lk06ZNNG7c2OPBRERERMR9rNYKYgtPUNI83ugodc5Fb8wBMGfOHO655x6OHDlC//79CQ4OZuXKld7IJiIiIiJucjzrAHF2G/5xHYyOUue4LMQdOnQgJSWF9PR0bDYb7dq1IzAw0BvZRERERMRNTmfuJQ5o2qab0VHqHJeFuKysjA8//JD8/HwAvvrqKwBuvPFGzyYTEREREfc5fphS/wAax7YxOkmd47IQT58+ncLCQhISEpzHTCaTCrGIiIiID4k8cYy8JtG09dPmCL/mshBnZ2ezdetW55fqRERERMS3lJYWEV1cyGFtt3ZBLneZ6NSpE3l5ed7IIiIiIiIekJ2Rhj8OQuIvMzpKneRyhnj48OFcf/31dOrUiYCAX07/97//XeuLpqSk8OKLLwIwYMAA/vrXv/LZZ5+xZMkSLBYL119/Pffdd1+t319EREREflFq3g9A87bdDU5SN7ksxM899xzTpk2jdevWbrlgaWkpixYtYtu2bURGRjJ58mS2b9/OI488wquvvkpcXBzTpk1jx44dJCYmuuWaIiIiIg2Zf04G+cGhRDWONjpKneSyEIeGhjJ16lS3XdBms2G32yktLSUsLAyr1UpERARt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o/gslzPEjz32mPPfDoeDH374gfbta/+Bv//++4wYMYIWLVoAsGLFCjIyMmjTpg2tWrUCYPTo0Wzbto3ExMRaX0dERESkIcg/8iONgSZtNENcWy4L8blbrgGMGTOGMWPG1PqCGRkZBAYGMn36dI4dO8bAgQO57LLLiI6Odp4TExNDdnZ2jd43LS2t1pnkfKmpqUZHkGrSWPkWjZdv0Xj5loY6XiGHf6QwIIgs80mOHc03Ok611aXxclmIp02bxjvvvMOYMWPIzc1ly5YthIWF1fqCNpuN//73v7z66quEhYVxxx13EBISgslkcp7jcDgqPa6O7t27ExwcXOtc8ovU1FR69epldAypBo2Vb9F4+RaNl29pyOOV89Wr5DZpztVXX210lGrz9nhZLJaLTp66XEP8yCOP8PHHH5852c+P1NRUFi9eXOtAzZs3p2/fvjRr1oyQkBAGDx7MZ599Rm5urvOc3NxcYmJian0NERERkYbAVlpEVMlpyqJbGR3Fp7ksxN988w1PPvkkAFFRUfzf//0fu3fvrvUFr7vuOnbu3ElhYSE2m41PP/2U4cOHc/jwYTIyMrDZbGzevJkBAwbU+hoiIiIiDUFexplZz6CWHQ1O4ttcLpmoqKigvLycoKAgAKxW6yVdsEePHvz5z3/mhhtuoKKign79+jF58mTat2/PzJkzsVgsJCYmMnz48Eu6joiIiEh9V2zeT3Mgum13o6P4NJeFeODAgdx2220kJSVhMpnYvHnzJe/+MGHCBCZMmFDpWN++fS94RzwRERERuTC/7AxyQsJpERnt+mSpkstC/OCDD/L666/z4YcfEhAQwJAhQ5g0aZI3somIiIhIFRwOB01PHiereTxxNdyMQCpzWYj9/f2ZOHEivXv35rLLLsNiseDnV+P7eYiIiIiIG1nyc4iosGCNbWN0FJ/nstl+++23DB48mGnTppGTk8PAgQP5+uuvvZFNRERERKqQl/49AGEJnQ1O4vtcFuJly5bxyiuv0KRJE1q0aMGyZctYtGiRN7KJiIiISBXKsw5QYfKjReuuRkfxeS4LcVlZGR07/rKVR2JiIjabzaOhREREROTignLNHI9oTERIhNFRfJ7LQhwQEEBBQYHzznGHDh3yeCgRERERqZrDbiOqII/CqDijo9QLLr9UN336dG666Sby8vK4//772bVrF4888og3somI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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_execution_secs\"], marker='o', label=\"Noisy\", color=palette[0])\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_dd_execution_secs\"], marker='o', label=\"Noisy + DD\", color=palette[1])\n", + "plt.title(\"Qubit Count vs Execution Time\")\n", + "plt.xlabel(\"Qubit Count\")\n", + "plt.ylabel(\"Execution Time (seconds)\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"qiskit_dd_exec_time.png\", dpi=300)\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_execution_secs\"], marker='o', label=\"Noisy\", color=palette[0])\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_dd_execution_secs\"], marker='o', label=\"Noisy + DD\", color=palette[1])\n", + "plt.yscale('log')\n", + "plt.title(\"Qubit Count vs Execution Time (Log Scale)\")\n", + "plt.xlabel(\"Qubit Count\")\n", + "plt.ylabel(\"Execution Time (log seconds)\")\n", + "plt.legend()\n", + "plt.grid(True, which='both')\n", + "plt.tight_layout()\n", + "plt.savefig(\"qiskit_dd_exec_time_log.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_expectation_value\"], marker='o', label=\"Noisy\", color=palette[0])\n", + "plt.plot(grouped[\"qubit_count\"], grouped[\"noisy_dd_expectation_value\"], marker='o', label=\"Noisy + DD\", color=palette[1])\n", + "plt.title(\"Qubit Count vs Expectation Value (Sum of 3 Pauli Observables)\")\n", + "plt.xlabel(\"Qubit Count\")\n", + "plt.ylabel(\"Expectation Value\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"qiskit_dd_expectation_value.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAGkCAYAAAA2STNEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeWCU1aH+8e+ZyU7CFggEwiKbBpEEqUpMJCQgBpCGRa17WxHhUrFyFUQLV63egsu9WGtbi8X2ilbUH6CIFmsJRFlEQbZAWGQJhCWEsCSQkGXm/P6YGkkhhEAmk+X5/EXeeWfeJ3lJ8nA4c46x1lpERERERBoph68DiIiIiIj4kgqxiIiIiDRqKsQiIiIi0qipEIuIiIhIo6ZCLCIiIiKNmgqxiIiIiDRqKsQiUmPKysqYPXs2w4cPZ/jw4QwbNoxnn32W48ePV/nc7Oxs+vTpc97H3n33XWbPng3ABx98wDvvvFPp6yxcuJCf/OQnpKamMnToUKZPn05+fv6lfUJV2L9/PxMnTvTKaxcXF/PKK68wYsQIUlNTGT58OLNnz+b7lTJ/9atfsWrVqhq51tKlS3n++ecBWL58Ob/97W/Pe15ycjK33HILqamp/PjHP2b48OH88Y9/pKys7LKu/9prr/HPf/4TgKlTpzJnzpyLet6pU6cYM2YMZ86cuazrX45//vOf/P73v/fZ9UWkZvj5OoCINByTJ0/G7Xbz9ttv06xZM0pLS/nrX//KnXfeyfz58wkNDb2k173rrrvK/7xu3Tq6d+9+3vNef/11vvjiC37/+9/TqlUrSktL+c1vfsP48eP529/+dknXvpCDBw+yZ8+eGn9day0TJkzgiiuu4L333iMwMJDjx48zbtw4CgsLefTRR/nv//7vGrvewIEDGThwIACbN2/m5MmTlZ778ssvc8011wBQWFjI448/zowZM5g+ffolX3/NmjV069at2s97+eWXuf322wkKCrrka1+uQYMG8c4775CZmUl0dLTPcojI5VEhFpEasWnTJr755hs+//xzgoODAfD392fs2LF8++23vPvuu4wdO5bk5GR++9vflpeq7z9u0aIFbrebX/3qV2zZsgU/Pz+mTZtGbGwsv/vd7zh+/DhxcXGkpaWxcuVKgoKCuOeee8qvX1hYyJ/+9CcWLlxIq1atyq8/ZcoUPv/8c0pKSjDGMHPmTFavXo3T6aR37948+eSThIaGXjDXz372MxITE9m4cSP5+flMnjyZ5ORkpk2bRk5ODmPGjKkwqrlnzx7uvPNOvvzySwICAnC5XAwYMIC//vWv7Nq1iz/+8Y8YY3A6nUyZMoXrrruuwtfym2++Yffu3cyePRun0wlAixYtePHFFzlw4AAA9913H/fccw+9evXinnvuoWvXrhw4cIC5c+eyZcsWXnnlFdxuNyEhITz77LOEhoYyfPhw1q9fD3hG5L//eMGCBXz22WdMmDCBefPm4XK5CAsLY9KkSRe85yEhIfzXf/0XgwYNYtKkSYSGhvLBBx/w7rvv4na7ad68OdOnT6dr165MnTqVwMBAtm3bRl5eHvHx8UybNo3333+fjIwMXnzxxfLPdf369dx5550cPXqU7t278z//8z+EhIRUuPahQ4dYtmwZ06ZNAzwjy0FBQezYsYO8vDySk5Np3rw5y5YtIzc3l+eff564uDhKSkp4+eWX+eabb3C5XPTs2ZNp06YRGhrKsmXL+NOf/kRJSQnHjh1jxIgRPProo6xZs4ZZs2bRoUMHdu7cSVlZGc8++yx9+/YF4LbbbuO1117TSLFIPaYpEyJSI7799lt69epVXobPFh8fz7ffflvla5w5c4b4+Hg+/PBDHn30UX75y19SUlJS/vjNN99McnIyP/vZzyqUYYDdu3cTFBRE586dKxwPDg7mxz/+MQEBAfzxj3/kyJEjfPTRR3z00Ue43W5efPHFKnPt37+fhIQE/t//+3889thj/OY3v8HpdPL888/TsWPHc/6L/4orrqB79+6kpaUBsGLFCqKioujatSsvvvgiTz/9NAsWLOCXv/wla9asOed6GRkZ9O7du7wgfq9z587Ex8efc/7hw4eZMGECn332GQ6Hg8mTJzNjxgw+/vhjxowZw8svv1zl5wgQExPDnXfeydChQ6ssw99r27YtoaGh7N69m6+//poPP/yQd955hw8//JAHH3yQhx9+uPzcTZs28eabb/Lpp5+ya9cu3nvvvfJSP2XKFG6++WYAcnJy+Mtf/sJnn31GTk4O//jHP8657tKlS4mLi8PP74dxna1bt/J///d/vP3227z55puEhIQwb9487r//ft544w2A8n9kLFiwgEWLFhEREcHLL7+MtZY333yTmTNnsmDBAt577z1mz57NsWPHyrM/8MADfPjhh4waNYpZs2aVXzc+Pp4vvvjCp1M3ROTyaIRYRGrFxewS37RpU4YOHQpAQkIC4Cm6F8PhcOB2uy94zhdffMGkSZPw9/cHPKOsv/jFL6p8bX9/fxITEwHo2bMnJ06cqPI5t912GwsXLiQlJYUFCxZwxx13ADBs2DAefvhhEhMTiY+PZ+zYsef9XC7m6/U9Pz8/YmNjAc8/TLp3707Pnj0BGDx4MIMHDyY7O/uiX6+6jDEEBwezZMkSsrKyuPPOO8sfy8/PL/96jRw5kiZNmgCQmprK0qVLuffee895vUGDBpX/w6p79+7lpfRsu3fvpmPHjhWOJSUl4e/vT+vWrQkJCeGmm24CoGPHjuUZli9fTkFBQfn869LSUsLDwzHG8Prrr7N8+XIWL17Mrl27sNZSVFQEQLt27cqnRPTs2ZOFCxeWX7d58+YEBgZy4MABunbteglfQRHxNY0Qi0iNuPbaa9m8eXN5gSgpKSl/M91XX31FTExM+blnl72zR4Adjoo/ktxud3l5rUq3bt0oKytj7969FY4XFxczduxYcnJycLvdGGMqvH5paWmVufz9/cuznf38CxkyZAgbN25k165dfPPNN6SkpAAwadIk/va3v9GrVy8WLFhwzkg3eEZqN2/ejMvlqnB806ZNTJ48+ZzzAwICykdKnU5nhYzWWrZt24YxpsLnd/bnfTkOHDhAYWEhHTt2xO12k5qaWj4Cv3DhQubPn0+zZs3Ks52d69/v9/fOHvX999xnH//3fwAFBARU+jrfc7vdPPXUU+UZP/jgA377299SWFjIyJEj2bJlCz179mTKlCn4+fmVX/vsecrny+R0Os8Z0ReR+kOFWERqRO/evbnhhhuYOnUqJ0+eZP/+/dxzzz1MnDiR7du3lxe/li1bkpGRAXjeTJWbm1v+GidOnGDZsmUApKWlERQURKdOnSpcx+l0nndVg4CAAMaOHcuvfvUrjh49CnhK7W9+8xuKiopo06YNN910E++++y6lpaW43W7eeeed8ikIF8pVGafTWWmxDAwMZNiwYUydOpXBgwcTHBxMWVkZycnJFBUVcdddd/H000+zffv2CuUboE+fPnTp0oUZM2ZQXFwMwNGjR3n++eeJioq6YKaYmBh27drFzp07Ac/UgsmTJ9O0aVNKS0v57rvvAPjkk08q/ZwudtWI/Px8nnvuOe655x4CAwNJSEjgk08+4ciRI4BndZCf/vSn5ef//e9/p6SkhOLiYhYuXEhSUlK1r/m9K664gv3791frOeD5n4d33nmHkpIS3G4306dP53//93/Jysri1KlTPProoyQnJ7NmzZryc6pSUFBASUkJ7dq1q3YeEakbNGVCRGrMSy+9xJtvvln+3+ClpaU4nU6aNGnC0qVLGTlyJI8//jjPPPMM7733HldffTVXX311+fPDw8P5xz/+wSuvvEJwcDC/+93vzhnl69+/PzNnzgRg3LhxFR4bP348wcHBjBkzBvCMDl9//fX84Q9/AOA//uM/eOGFFxgxYgRlZWX07t27fHWEC+WqTLdu3QgMDOS2227jgw8+OGf0+Pbbb+ftt9/mmWeeATwjlk899RSPP/44fn5+GGP4zW9+c87IJsCrr77KrFmzGDVqFE6nE7fbzYgRI8o/t8q0atWKl19+mSeeeAKXy0VoaCizZs0iLCyMyZMnM3bsWFq2bFk+Yv3v+vXrx+OPP85zzz133pUjHn/8cYKCgnA6nbhcLgYPHsz48eMBT9kcO3YsDzzwAMYYQkNDee2118q/LkFBQdx9993k5+dzyy23MHr0aMDzBsb//d//rdao9aBBg/jzn/+My+Wq1sjshAkTeOGFFxg5ciQul4vo6GimTp1KSEgIAwYMYMiQIQQEBNCjRw+6detGVlbWee/P2VasWMGAAQOqPE9E6i5jqzNRTUTkEuTn55ORkcGNN97o6yjiI1OnTqV79+5VFvrqmD59OnFxceXzzn3l/vvv56mnnuKqq67yaQ4RuXSaMiEiXte0aVOVYalxkydP5oMPPvDp6g6ff/45P/rRj1SGReo5jRCLiIiISKOmEWIRERERadRUiEVERESkUas3q0y43W5Onz6Nv7//Ra8DKiIiIiJiraW0tJQmTZqcdw30elOIT58+zY4dO3wdQ0RERETqqR49ehAWFnbO8XpTiL/frapHjx5a67GGZGRk0KtXL1/HkGrQPat/dM/qH92z+kf3rH7xxf0qKSlhx44dle5+Wm8K8ffTJAICAggMDPRxmoZDX8v6R/es/tE9q390z+of3bP6xVf3q7Jpt159U91HH33EsGHDGDZsGC+88AIAq1atYvjw4QwePJhZs2Z58/IiIiIiIlXyWiEuKiriv//7v5k7dy4fffQRa9euJS0tjaeeeoo//OEPfPrpp2RkZJCenu6tCCIiIiIiVfLalAmXy4Xb7aaoqIiQkBDKysoIDQ2lU6dOdOjQAYDhw4ezZMkSEhMTL/k6brebo0ePcuLECVwuV03FbxT8/PzIzMy85OcHBQURFRVV6XwcERERkfrAa4U4NDSUX/7ylwwZMoTg4GCuu+46jhw5QuvWrcvPiYiIICcn57Kuk52djTGGzp07a0m2ajp9+jRNmjS5pOdaa8nLyyM7O5srrriihpOJiIiI1B6vFeJt27Yxf/58li1bRlhYGI8//jh79+6tUFittdUusBkZGRU+9vPzo0uXLpSWllJaWloj2RuT06dPX/Jzg4KCyM7OZt26dTWYSKqir3f9o3tW/+ie1T+6Z/VLXbtfXivEK1asIC4ujvDwcABGjRrFnDlzcDqd5efk5uYSERFRrdft1atXhXcmZmZmnnc9Oana5YwQfy8wMJDo6OgaSiRVWbduHX379vV1DKkG3bP6R/es/tE9q198cb+Ki4vPGVQ9m9feVHfVVVexatUqCgsLsdaSlpZGTEwMe/bsISsrC5fLxeLFi+nfv7+3IoiIiIiIVMlrhTghIYFhw4YxatQofvzjH1NWVsbEiROZOXMmEydOZOjQoXTp0oWUlBRvRfCZ7OxsrrzySlauXFnheHJyMtnZ2ed9Tk5ODmPHjq2NeCIiIiJyFq9uzPHQQw/x0EMPVTgWFxfHokWLvHnZi7LmyB4+3LuRY8WFtAwMYUTnGG6IqLk3h/n7+zN9+nQWLVpEaGholee3adOGN954o8auLyIiIiIXx6sbc9RVa47s4e2dX3OsuBCAY8WFvL3za9Yc2VNj14iIiODGG28s35DkbK+//jpDhw5l+PDhzJw5E5fLRXZ2NsnJyQB8/PHHpKamMmrUKB555BGKi4uZPHky77//fvlr3HfffWzcuLHG8oqIiIg0VvVm6+aLtTpnN6tydl/wnN35Rymz7grHStwu3tqxhhWHd1X6vBvbdCGuTZeLzjJ16lSGDx/OypUriY+PB+CLL74gLS2N+fPn4+/vz8SJE5k3b16FtZhfeeUV3n//fcLDw3nhhRfYvXs3o0eP5ne/+x133HEHBw4c4NixY8TExFx0FhERERFfcmeuxq5YSExBHq5vwzEJI3FEx/k6FtBIR4j/vQxXdfxShYaG8txzzzF9+nROnToFwFdffcWwYcMIDg7Gz8+P0aNHs3r16grPS0pK4q677uLFF1/klltuITo6mhtuuIEjR46QnZ3Nhx9+SGpqao1mFREREfEWd+Zq7OdvQUEeBqAgD/v5W7gzV1f11FrR4EaI4y5iFPfJrz8sny5xtpaBITzWe1CN5klISKgwdcLtPrd0l5WVVfh42rRpbNu2jfT0dCZPnszDDz9MamoqI0aM4JNPPuHvf/87c+bMqdGcIiIiIt5iVyyEspKKB8tKPMfrwChxoxwhHtE5hgCHs8KxAIeTEZ29MwVh6tSprFixgiNHjtCvXz8++eQTzpw5Q1lZGfPnz6dfv37l55aVlTF48GBatGjBuHHjSE1NLd9eedSoUcybN4/IyEjatGnjlawiIiIiNcmeOAIFeed/sLLjtazBjRBfjO9Xk/DmKhNn+37qxJgxYxgwYAD5+fmMHj2asrIyEhISuPfeezl8+DDg2XnvkUce4YEHHiAwMJDw8HBmzpwJQGRkJJGRkYwcOdIrOUVERERqgrVu2LsF94alsKfyDTEIC6+9UBfQKAsxeEqxtwpwVFQUaWlpFY4lJCSwfft2ACZMmMCECRMqfc6tt97KrbfeWuFxay1Hjhzh6NGjDBpUs9M6RERERGqCPVOI3boSuyENThyBJs0w/YZjg5vAl/MrTpvwC8Ak1I1BvkZbiOubzz77jGeeeYZnnnmGgIAAX8cRERERKWdzs7Eb07BbV3tKb7tumBtHYLr3xTg9ddMd1AS7YiG2IA8TVrdWmVAhridSUlIa5K5+IiIiUj9ZVxns2oB7QxpkbwenPya6HyY2CRPR6ZzzHdFxEB3HunXr6Nu3rw8SV06FWEREREQumj19Erv5C+ymdDh1HJq2wvS/HXN1Aia46t156yIVYhERERG5IGstHNqN3ZCG3fENuF3Q6Wocg+6DztdgHPV74TIVYhERERE5L1tagt3xtedNcjlZEBCMiRmAiUnGtGzr63g1RoVYRERERCqw+UexG5djN38JZ05BeDvMwHs9c4QDgn0dr8apEIuIiIiIZ1rEvkzP2sG7NwIGuvXBEZsMUVdijPF1RK9ptIXYnbnas11gQR7U4NIf2dnZDBw4kDfffJP4+Pjy48nJybz11ltERUWd93k5OTlMmzaNN95447IzXMiaNWsYP348HTt2xOVyUVpaSmJiIr/85S9p0qRJhcettRQXF1d4XERERBoWW1yE3boKu3EZHDsEwaGY64Z6pkaEtfR1vFpRv2dAXyJ35mrs52/9sF1gQR7287dwZ66ukdf39/dn+vTpnDp16qKf06ZNG6+X4e/16tWLjz76iPfee4/Fixdz/PhxnnnmmXMeX7Ro0XkfFxERkfrP5h3EvfQd3LMfwy77GwQEYVLG4Bj7Mo6EUY2mDEMDHCF2b12FzVhx4ZMO7QJXWcVjZSXYf/wV1+YvK32a6ZWAo+eNVWaIiIjgxhtv5IUXXuC555475/HXX3+dRYsW4XQ6iY+PZ/LkyRw6dIj777+ftLQ0Pv74Y/785z/jdDqJioripZdeYtq0aVx33XXccccdANx33308/vjjxMTEnPP69913HzNmzKh0NPps/v7+TJkyhQEDBjB9+vQqH2/atGmVrykiIiJ1k3W7YPdGz9rB+zLB6Ye58npMTBImsouv4/lMoxwhPqcMV3X8EkydOpUVK1awcuXKCsfT09NJS0tj/vz5LFy4kKysLObNm1fhnFdeeYU333yTBQsW0L59e3bv3s3o0aP56KOPADhw4ADHjh07bxm+FK1bt6Zp06bs3bv3kh4XERGRus0WFeD++lPcc6biXvR7OJ6DSRjlGQ1OGdOoyzA0wBFiR88boYpRXNcbU36YLnG2sHCcd0ypkRyhoaE899xzTJ8+nUWLFpUf/+qrrxg2bBjBwZ53aI4ePZoPP/yQxMTE8nOSkpK46667GDRoELfccgvR0dFYa5k+fTrZ2dl89NFHpKamnnPNMWPGcPToUfbt28dDDz2Ev78/v/71ry+qOBtjCAwMpKio6IKPi4iISP1hD+/FbliK3f61Z+Cvw1U4BtwFXWMwDqev49UZDa4QXwyTMNIzh7is5IeDfgGYhJE1ep2EhITyqRPfc7vd55xXVlZxZHratGls27aN9PR0Jk+ezMMPP0xqaiojRozgk08+4e9//ztz5sw553W+P1adKRMAR48epaCggI4dO3LixIkLPi4iIiJ1my0rxe5Y61k7+PBu8A/E9LoJE5uMCW/n63h1UqOcMuGIjsPcfD+EhXsOhIVjbr6/RlaZ+HffT504cuQIAP369eOTTz7hzJkzlJWVMX/+fPr161d+fllZGYMHD6ZFixaMGzeO1NRUMjMzARg1ahTz5s0jMjKSNm3a1Ei+kpISXnzxRUaOHFk+al2dx0VERKRusAXHcK9cgPuNydglf4bi05iku3E89DKOgfeqDF9AoxwhBk8pxgsF+N99P3VizJgxgGc6RGZmJqNHj6asrIyEhATuvfdeDh8+DICfnx+PPPIIDzzwAIGBgYSHhzNz5kwAIiMjiYyMZOTIC49kz50794KPZ2RkkJqaitvtxlpLv379mDJlyjmPA7hcrnMeFxERkbrBWgvZOzxrB3+3HqyFrjGetYM7RmNMoxz7rLZGW4i9JSoqirS0tArHEhIS2L59e/nHEyZMYMKECZU+79Zbb+XWW2+t8Li1liNHjnD06FEGDRp0yfluuOEG1q9fD8Dp06fPWVv47MdFRESkbrIlZ7DbvsKuT4O8AxDUBNN3sGe1iGatfB2v3lEhric+++wznnnmGZ555hkCAgJ8HUdERER8wB7PwW5cht2yAoqLIKIjZvDPPUun+asfXCoV4noiJSWFlJQUX8cQERERL/v33XSJH4EjqIln7eC9GeBwYnr8CBObDJFdG/SWyrWlQRRia63+MviAtdbXEURERBqU8t10v18JqyAPlszBDdCkOebGEZhr+mOaNPNlzAan3hdif39/ioqKCAkJ8XWURqe0tBQ/v3r/V0hERKTOsCsWVlwW9nvBoTgefAHj1O9db6j3bz2MiIjgwIEDFBYWasSyFrndbnJycmjWTP9CFRERuVzWVYZ7+9fn3zgMoOiUyrAX1fuvbNOmTQE4ePAgpaWlPk5Tv5SUlFzWG/SaNGlCq1Z6J6uIiMilsqdOYDenYzelw+mTYBxgz93Eq3zvBPGKel+IwVOKvy/GcvHWrVt3Uds6i4iISM2x1sLB77Ab0rA714HbDVf0whE7EHdRAfxzrtd305WKGkQhFhEREanrbGkxdtvX2A1LIXc/BIZg+gzE9B6AaeHZgdYJuI2psMqESRjpld105QcqxCIiIiJeZE/ketYOzvgSiguhVRRm0P2Y6H4Y/8Bzzq+t3XTlByrEIiIiIjXMWjdkbfWsHbx7ExiD6d7Xs3Zw++5aLraOUSEWERERqSG2uBC7ZSV2wzI4kQMhTTH9bsVck4gJa+HreFIJFWIRERGRy2SPZmM3LMNmrobSYmjXDXNjqmdUWMul1Xm6QyIiIiKXwLpd8N16z7SI7O3g9MdcdQMmNhnTppOv40k1qBCLiIiIVIMtzMdu/gK7cTmcOg5NW2Fuuh3TKwETHOrreHIJvFaIP/jgA95+++3yj7Ozs0lNTWXQoEHMmDGD4uJihgwZwqRJk7wVQURERKRGWGvh8B7shqXYHWvBVQadrsYx8F64ojfGUe83/23UvFaIb7/9dm6//XYAdu7cyS9+8QvGjh3LXXfdxdy5c4mMjGTcuHGkp6eTmJjorRgiIiIil8yWlWK3f43dkAY5eyEgCNM7EROTjGnZ1tfxpIbUypSJZ555hkmTJrF//346depEhw4dABg+fDhLlixRIRYREZE6xeYfxW5Mx27+As6cgvB2mIH3etYODgj2dTypYV4vxKtWreLMmTMMGTKExYsX07p16/LHIiIiyMnJ8XYEERERkSpZa2F/Ju71abB7g+dg1z44YgdChyu1dnAD5vVCPG/ePH7+858D4Ha7K/xlstZW+y9XRkZGjeZr7NatW+frCFJNumf1j+5Z/aN7Vv9czj1zlJXQMmc7rQ5mEFR4nDL/II526ENe5NWUBoVB7mnI/bYG00pd+x7zaiEuKSnhm2++YebMmQC0bduW3Nzc8sdzc3OJiIio1mv26tWLwMBztzmU6lu3bh19+/b1dQypBt2z+kf3rP7RPat/LvWe2WOHsBvSsFtXQckZaHsFpv8oAnpcR3s/f9p7Iav45nusuLj4goOqXi3E27dvp3PnzoSEhAAQExPDnj17yMrKIioqisWLFzN69GhvRhAREREpZ91u2L3Rs3bwvq3g9MNceT0mJgkT2cXX8cRHvFqI9+/fT9u2P7wDMzAwkJkzZzJx4kSKi4tJTEwkJSXFmxFEREREsEUF2M1fYjcth/w8CGuJSRiF6XUTJqSpr+OJj3m1EA8dOpShQ4dWOBYXF8eiRYu8eVkRERERAGzOXs+0iG1rPGsHd7gKR+Kd0DUG43D6Op7UEdqpTkRERBoUW1aK3bkOu2EpHNoN/oGekeCYJEwrzQyWc6kQi4iISL3kzlyNXbGQmII8XN+Gw48GYwoLPGsHF+ZDizaYpLsxPeMwgSG+jit1mAqxiIiI1DvuzNXYz9+CshIMQEEeLHsXC9A1FkdMEnTqiTHaUlmqpkIsIiIi9Y5dMR/KSs59oElznKkTaz+Q1GsqxCIiIlJv2OM52I3LoOD4+U84faJ2A0mDoEIsIiIidZq1btiz2bN28N4McDjBL+D8I8Rh4bUfUOo9FWIRERGpk2zRKeyWlZ4R4ZO50KQZJi4Vc01/7P7M8jnE5fwCMAkjfRdY6i0VYhEREalTbO5+7PqlnrWDy0qgfXdMwmhMtz4Yp6e6mOg43IBdsRBbkIcJC8ckjMQRHefb8FIvqRCLiIiIz1lXGfa7b7Eb0uDATs9ob3Q/TGwypnWH8z7HER0H0XGsW7eOvn371nJiaUhUiEVERMRn7KkT2M3p2E3pcPokNGuNSbwDc3UCJqiJr+NJI6FCLCIiIrXKWgsHv/NsqbxzHbhd0PkaHDcnwxW9tHaw1DoVYhEREakVtrQYu+1rz5bKufshMNgzJSImCdOija/jSSOmQmTGl/oAACAASURBVCwiIiJeZU/kYjcuw2Z8CcWF0CoKM+h+zxxh/0BfxxNRIRYREZGaZ60bsrZ61g7evQmMwXS/FhObDO17YIzxdUSRcirEIiIiUmNscaFn7eANy+BEDoQ0xdxwK6Z3Iiasha/jiZyXCrGIiIhcNns0G7thGTZzNZQWQ2RXTNyPMd37Yvz8fR1P5IJUiEVEROSSWLcLvlvvmRaRvR2cfpirbvC8Ua5NZ1/HE7loKsQiIiJSLbYwH7v5S8+WyqeOQ9NwzE23YXolYILDfB1PpNpUiEVEROSi2EO7PWsH7/gGXGXQqSeOgffCFb0xDq0dLPWXCrGIiIhUypaVYrd/7dlSOWcvBARhrknExCZhWkb6Op5IjVAhFhERkXPY/DzspuXYzV9A0SloGYlJvgfTMw4TEOzreCI1SoVYREREgH9tqbx/m+dNcrvWew527YMjNhk6XKW1g6XBUiEWERFp5GxJEXbras+0iGOHIDgUc90QTO8BmKbhvo4n4nUqxCIiIo2UPXbIs3bw1pVQcgbadMakjMH0uE5rB0ujokIsIiLSgLkzV2NXLISCPAgLh/gROAKCPdMi9m31rB3c4zrP2sGRXXwdV8QnVIhFREQaKHfmauznb0FZiedAQR4smYMbILQFJn4k5pr+mJCmvowp4nMqxCIiIg2UXbHwhzJ8tuBQHA++gHE4az+USB2kQiwiItLAWFcZdsdaz4jw+RSdUhkWOYsKsYiISANhC45jN6VjN6dDYT4YB1j3uSeGaeUIkbOpEIuIiNRj1lo4sMOzpfLOb8Fa6NIbR2wy7sJ8+OfcitMm/AIwCSN9F1ikDlIhFhERqYdsaTE28yvP2sFHsyEwBHPtzZiYJEzz1gA4AbcxFVaZMAkjcUTH+Ta8SB2jQiwiIlKP2OM52I3LsFtWQHERtO6AuflnmKuux/gHnnO+IzoOVIBFLkiFWEREpI6z1g17MjxrB+/dDA4npntfTGwytOumLZVFLpMKsYiISB1lz5zGblmB3bAMTuZCk2aYuB9jrknEhDb3dTyRBkOFWEREpI6xufs9b5LL/Mrzhrj23TEJozDdrsU49atbpKbpu0pERKQOsK4y7HfrsRuWwoGdntUgrrrBs6VyREdfxxNp0FSIRUREfMiePulZO3jTcjh9Epq1xvS/A3N1PCY41NfxRBoFrxbitLQ0XnvtNYqKioiPj2fatGmsWrWKGTNmUFxczJAhQ5g0aZI3I4iIiNQ51lo4tAu7Pg27cy24XdC5F46bfwqdr8E4HL6OKNKoeK0Q79+/n6effpoPPviA8PBwfvrTn5Kens7TTz/N3LlziYyMZNy4caSnp5OYmOitGCIiInWGLS3Bbl/jWTv4yD4IDPZMiYhJwrRo4+t4Io2W1wrx559/ztChQ2nbti0As2bNIisri06dOtGhQwcAhg8fzpIlS1SIRUSkQbMnc7Ebl2MzvoQzpyG8PWbQfZir+mECgnwdT6TR81ohzsrKwt/fn/Hjx3Po0CEGDBhA9+7dad26dfk5ERER5OTkeCuCiIiIz1jrhqytnrWDd28CY6BbHxyxAyGqh9YOFqlDvFaIXS4Xa9euZe7cuYSEhPAf//EfBAUFVfgBYK2t9g+EjIyMmo7aqK1bt87XEaSadM/qH92z+udy7pmjrJiWh7fT6mAGQUUnKPUPJq/jteS1u5rSwFA4cgqOfFuDaQX0fVbf1LX75bVC3KpVK+Li4mjZsiUAgwYNYsmSJTidzvJzcnNziYiIqNbr9urVi8DAc7emlOpbt24dffv29XUMqQbds/pH96z+udR7Zo8ewG5Mw25dDaXFENkFM+B2Arv3pb2fP+29kFU89H1Wv/jifhUXF19wUNVrhTgpKYknnniC/Px8mjRpwpdffklKSgqzZ88mKyuLqKgoFi9ezOjRo70VQURExKus2wW7NnimRezfBk4/z9rBMcmYtp19HU9ELpLXCnFMTAwPPvggd999N6WlpcTHx3PXXXfRpUsXJk6cSHFxMYmJiaSkpHgrgoiIiFfYwnzs5i+xG5fBqeMQ1hKTMBpzzU2Y4DBfxxORavLqOsS33XYbt912W4VjcXFxLFq0yJuXFRER8Qp7aLdnS+Ud34CrDDr2xJF8D3SJ0drBIvWYdqoTERG5AFtWit3xDXZ9GuTsAf9AzDX9PWsHh7fzdTwRqQEqxCIiIoA7czV2xUJiCvJwfRsOfW/GFOZjN38BRaegZSQm+R5MdBwmMNjXcUWkBqkQi4hIo+fOXI39/C0oK8EAFOTB8nlYgK59cPRJhg7RWjtYpIFSIRYRkUbPrpgPZSXnPhDaHGfqw7UfSERqlQqxiIg0WvbYYeyGNCg4fv4TTp2o3UAi4hMqxCIi0qhYtxv2bMK9YSlkbQWHE/wCzj9CHBZe+wFFpNapEIuISKNgi05hM/61dnB+HoS2wMSPxPS6Cbtva/kc4nJ+AZiEkb4LLCK1RoVYREQaNJuThd2wFLvta3CVQtSVOPrfAd36YBxOAEx0HG7ArliILcjDhIVjEkbiiI7zbXgRqRUqxCIi0uBYVxl2x1rP/OBDuzyjvVfHY2KTMK2izvscR3QcRMexbt06+vbtW8uJRcSXVIhFRKTBsAXHsZvSsZvToTAfmrfBDLgT0zMeExTi63giUkepEIuISL1mrYUDOzxbKu/8FqyFLr1xxCZDp54Yoy2VReTCVIhFRKResqXF2MyvPNMijmZDYAjm2ps9Wyo3b+3reCJSj6gQi4hIvWKP52A3LsNuWQHFRdC6A+bmn2Guuh7jH+jreCJSD6kQi4hInWetG/Zk4N6QBns3g8OJ6d4XE5sM7bppS2URuSwqxCIiUmfZM6exW1ZgNyyHk0egSTNM3I8x1yRiQpv7Op6INBAqxCIiUufY3P2eN8llfuXZLKN9d0zCSEy3azFO/eoSkZqlnyoiIlInWFcZ9rv12A1L4cBOz9rBV92AiU3GRHT0dTwRacBUiEVExKfs6ZOetYM3pcPpE9CsFab/HZ6NNIJDfR1PRBoBFWIREal11lo4tAu7Pg27cy24XdC5F46b74fO12AcWjtYRGqPCrGIiNQaW1qC3b7Gs3bwkX0QEOyZEhEzANOira/jiUgjpUIsIiJeZ0/mYjcux2Z8CWdOQ3g7zKD7MFf1wwQE+TqeiDRyKsQiIuIV1roha6tn7eDdm8AY6NbHs6Vy1JVaO1hE6gwVYhERqVG2uBC7ZRV2Yxocz4GQppgbhmJ6D8CEtfR1PBGRc6gQi4hIjbBHD2A3pmG3robSYojsghky1rOjnJ+/r+OJiFRKhVhERC6aO3M1dsVCKMiDsHCIH4HDP9AzLWL/NnD6Ya68HhM7ENO2s6/jiohcFBViERG5KO7M1djP3/LsHAeeUrxkDm6AsJaYhNGYXjdhQsJ8GVNEpNpUiEVE5KLYFQt/KMNnCw7FMWYmxuGs/VAiIjVAhVhERC7IlpVid3zjGRE+n6JTKsMiUq+pEIuIyHnZgmPYjcuwm7+AolPgcIDbfe6JYeG1H05EpAapEIuISDlrLezfjnvDUti13nOwSwyO2IG4T5+Ef75VcdqEXwAmYaRvwoqI1BAVYhERwZYUYbeuxm5cBnkHISgU86MUz9rBzVoB4ATchgqrTJiEkTii43wbXkTkMqkQi4g0YvbYYeyGNOzWlVByBiI6YW75OabH9Rj/gHPOd0THgQqwiDQwKsQiIo2MdbthzybPtIisreBwYnpch4lN9mymoS2VRaSRUSEWEWkkbNEpbMYKz7SI/KMQ2gJz4wjMNf0xTZr5Op6IiM+oEIuINHA2J8szLWLbGnCVQtSVOPrfDl1jMU79GhAR0U9CEZEGyLrKsDvWekaDD37nWQ3i6hsxMcmY1lG+jiciUqeoEIuINCC24Dh2Uzp2czoU5kPzCMyAOzE94zFBIb6OJyJSJ3m1EN93330cO3YMPz/PZX79619z+vRpZsyYQXFxMUOGDGHSpEnejCAi0uBZa+HATuyGpdid34K1cMU1OGKTofPVGOPwdUQRkTrNa4XYWsvevXtZtmxZeSE+c+YMKSkpzJ07l8jISMaNG0d6ejqJiYneiiEi0mDZ0mJs5lfYDWlwNBsCQzDXDsLEJGGaR/g6nohIveG1Qrx7924AHnjgAU6cOMEdd9xBjx496NSpEx06dABg+PDhLFmyRIVYRKQa7PEc7Kbl2IwVUFwIrTtgbv4p5qobMP6Bvo4nIlLveK0Q5+fnExcXx/Tp0yktLeX+++/nwQcfpHXr1uXnREREkJOT460IIiINhrVu2LvFs3bwngxwODDdr8XEDoR23bR2sIjIZTDWWlsbF/rrX//KW2+9Rd++fXnppZcAWLlyJW+++SZz5syp8vnFxcVkZGR4O6aISJ3iLD1Dy5zttDqwmcAz+ZQGhJAX2ZOjkVdTFtjE1/FEROqVXr16ERh47v+keW2EeO3atZSWlhIX59ni01pL+/btyc3NLT8nNzeXiIjqzXOr7BOR6lu3bh19+/b1dQypBt2z+udS75nN3Y/dsAybuRrKSjyjwLF3Eti9L+2dfrT3Qlbx0PdZ/aN7Vr/44n5VNbDqtUJcUFDAq6++yrx58ygtLWXhwoU8++yzPProo2RlZREVFcXixYsZPXq0tyKIiNQr1lUGu9bjXp8GB3aA0x8T3Q8Tm4SJ6OTreCIiDZbXCnFSUhIbN25kxIgRuN1u7r77bvr06cPMmTOZOHEixcXFJCYmkpKS4q0IIiL1gj19Erv5C+zG5XD6BDRrhel/O+bqBExwqK/jiYg0eF5dh/jRRx/l0UcfrXAsLi6ORYsWefOyIiJ1nrUWDu3ybKm8Yy24XdCpF46b74fO12AcWjtYRKS2VFmId+/ezZtvvkleXh5nv//u9ddf92owEZGGyJaWYLd/7Vk7+EgWBAR71g2OTcK0aOvreCIijVKVhfjxxx+nb9++3HzzzVrWR0TkIrkzV2NXLCSmIA/Xt+Fw7SDM6ZPYjC/hzGkIb4cZeJ9njnBAkK/jiog0alUW4tLSUn71q1/VRhYRkQbBnbka+/lbUFaCASjIg/T3sADd+3q2VI66UoMMIiJ1RJWT1Nq1a8f+/ftrI4uISINgv5zvWSrt34U2xzl8AqbDVSrDIiJ1SKUjxOPHjwc8awXfdtttXHPNNfj5/XC65hCLiFRk8w565gafOn7+E06dqN1AIiJyUSotxLfccktt5hARqZes2wW7Nnq2VN6/DZx+4BcIZcXnnhwWXvsBRUSkSpUW4pEjRwLwyiuvnLN02vPPP1/+uIhIY2QLC7AZ/1o7uOAYhLXEJIzG9LoJm5VRPoe4nF8AJkE/N0VE6qJKC/Grr75Kfn4+n376KadOnSo/XlpayooVK5g2bVqtBBQRqUvs4T2etYO3fw2uMugYjSPpLugSg3E4ATDRcbgBu2IhtiAPExaOSRiJIzrOt+FFROS8Ki3EMTExbN68GYfDQfPmzcuPO51OXn755VoJJyJSF9iyUuyObzzzgw/vAf9ATK/+nrWDw9ud9zmO6DiIjmPdunX07du3lhOLiEh1VFqIExMTSUxMpH///vTu3bs2M4mI1Am24Bh243Ls5i+gqABatMUk3Y3peSMmMNjX8UREpIZUuQ5xZGQkjzzyCCtXrsTpdJKcnMyTTz5Js2bNaiOfiEitstbC/u2eN8ntWu852CUGR+xA6Bit5dJERBqgKgvx1KlT6dmzJ5MnT8blcvHee+8xffp0Xn311drIJyJSK2zJGWzmas+0iLyDENQE86MUTO8BmGatfB1PRES8qMpCfPjwYebMmVP+8RNPPMHQoUO9GkpEpLbYY4exG9OwW1ZBSRFEdMLc8nNMj+sx/gG+jiciIrWgykLcrl079u3bR8eOHQE4cuQIERERXg8mIuIt1u2GPZtwb0iDrC3gcGJ6XIeJTYbILpoWISLSyFRZiB0OByNGjCAhIQGn08nq1atp27Zt+U522rFOROoLW3QKm7ECu3EZ5B+F0BaYG0dgrumPaaL3RYiINFZVFuKUlBRSUlLKP+7fv79XA4mI1DR7JAu7Pg27bQ24SiHqShz9b4eusRhnlT8GRUSkgavyN8HIkSM5fPgw27dvJyEhgZycHNq1O/+6myIidYV1lWF3rvO8Se7gd56d4q6+EROTjGkd5et4IiJSh1RZiNPT03n66adxOBzMmzePYcOG8dJLLzFo0KDayCciUi321HHspnTspnQozIfmEZgBd2J6xmOCQnwdT0RE6qAqC/Frr73G+++/z0MPPURERAR/+9vfeOKJJ1SIRaTOsNbCgZ2eLZW/+xbcbrjiGhyxydD5aoxx+DqiiIjUYVUWYpfLVWFViehoLUwvInWDLS3GZn7lmRZxNBsCQzB9BmJikjDNtRqOiIhcnCoLcXBwMAcPHiwvwWvXriUwMNDrwUREKmNPHMFuXIbNWAHFhdAqCnPzTzFX3YDx188nERGpnioL8WOPPcYDDzxAbm4uP/nJT9i7dy+/+93vaiObiEg5a92wd4tnS+U9GeBwYLpfi4kdCO266X+uRETkklVZiK+99lref/991q9fj9vtJiYmhpYtW9ZGNhER7JlC7JZ/rR184gg0aYbpNxzTuz8mtIWv44mISANwwUJsrWXlypXs2LGDoKAgevTooTIsIrXC5u7HbliGzVwNZSWeUeAbR2C699XawSIiUqMq/a1y9OhRHnzwQYqKirjqqqswxvCXv/yFli1bMnv2bJo1065OInL53JmrsSsWQkEehLWErn0gdz8c2AFOf0x0P0xsEiaik6+jiohIA1VpIX7ttdcYMmQI48aNO+f4Sy+9xPPPP+/1cCLSsLkzV2M/f8szAgxQcAw2LIWgUEz/2zFXJ2CCQ30bUkREGrxKF+dcu3btOWUYYMKECWzevNmroUSk4bPWYtPf/6EMn80/AMePUlSGRUSkVlQ6Quznd/6HHA4HDocWuReRS2NLS7Dbv/asHVyYf/6TCo7VbigREWnUKi3EWsJIRGqSPXn0X2sHfwlnTkN4Owhq4vnzvwsLr/2AIiLSaFVaiPPy8vjLX/5y3seOHdPojYhUzVoL+zI9awfv3ggY6NbHs6Vy1JXYbV9VnEMM4BeASRjps8wiItL4VFqI4+Pj2bFjx3kfu/HGG70WSETqP1tchN26yjMt4vhhCA7DXD8U03sAJuyHpRtNdBxuOGuViXBMwkgc0XG+Cy8iIo1OpYV4xowZtZlDRBoAm3cQuyENu3UVlBZD2y6YlAcxPX6E8fM/73Mc0XGgAiwiIj6k1e1F5LJYtwt2b8S9fins3wZOP8yV12NikzFtr/B1PBERkSqpEIvIJbGFBdiMLz1bKhccg7CWmIRRmF79MSFhvo4nIiJy0VSIRaRa7OG92A1Lsdu/BlcZdIzGkXQXdInBOJy+jiciIlJtF1WIlyxZQmZmJuPHj2fp0qXceuut3s4lInWILSvF7ljreZPc4d3gH+gZCY5NwoS383U8ERGRy1JlIZ49ezYrV67k8OHD/OxnP+O1114jKyuLX/ziF7WRT0R8yBYcw25ajt30BRQVQIs2mKS7MT1vxAQG+zqeiIhIjahyy7lPPvmEN954g+DgYFq0aMH777/P4sWLL/oCL7zwAlOnTgVg1apVDB8+nMGDBzNr1qxLTy0iXmOtxe7fhuvjP+D+8xPYNZ9Cu644Rv8njp89j6PPQJVhERFpUKocIfbz8yMgIKD846ZNm1a6rfO/W716NQsXLmTAgAGcOXOGp556irlz5xIZGcm4ceNIT08nMTHx0tOLSI2xJWewmV9hNyyFvIMQ1ATTdzAmJgnTrJWv44mIiHhNlc02MjKS5cuXY4yhpKSEOXPm0L59+ypf+MSJE8yaNYvx48ezbds2Nm3aRKdOnejQoQMAw4cPZ8mSJSrEIj5mjx/GbliG3bISSoogohNm8M89S6f5B1T9AiIiIvVclYV4+vTpTJkyhe3btxMbG0tMTAz/8z//U+UL/9d//ReTJk3i0KFDABw5coTWrVuXPx4REUFOTs5lRBeRS2Xdbti7Gff6NMjKAIfTs3lGbDJEdsUY4+uIIiIiteai5j783//9H0VFRbhcLkJDQ/nuu+8ueP4HH3xAZGQkcXFxLFiwAAC3213hl6y19pJ+6WZkZFT7OVK5devW+TqCVNPl3DNn6RlaHs6k1cEtBJ7JpySgCXmdrycvsidlASFw6CQc+rYG0wro+6w+0j2rf3TP6pe6dr8qLcQnTpwAYOzYscydO7e8wB49epSHH36YJUuWVPqin376Kbm5uaSmpnLy5EkKCws5cOAATucPa5Tm5uYSERFR7cC9evUiMDCw2s+Tc61bt46+ffv6OoZUw6XeM3skyzMtIvMrcJVC+x44+txNUNc+RDn9iPJCVvHQ91n9o3tW/+ie1S++uF/FxcUXHFSttBA/9thjrFy5EoAbbrjhhyf4+XHLLbdc8KJ/+ctfyv+8YMECvv76a5599lkGDx5MVlYWUVFRLF68mNGjR1/0JyIi1WNdZdid6zxrBx/8DvwCPMulxSZhWnfwdTwREZE6o9JCPGfOHACefPJJZsyYcdkXCgwMZObMmUycOJHi4mISExNJSUm57NcVkYrsqePYTV9gN6fD6ZPQLAKT+BPM1fGYoCa+jiciIlLnVDmHeMaMGZw4cYKioiKstbhcLvbt20d8fPxFXWDUqFGMGjUKgLi4OBYtWnR5iUXkHNZaOPidZ0vlnd+C2w1X9MIROxA6X40xVS45LiIi0mhVWYhfffVV/vSnPwHgdDopLS2lW7dufPzxx14PJyIXZkuLsdvWeKZF5O6HwBBMn4GY3gMwLdr4Op6IiEi9UGUh/vDDD1m2bBkzZ85kypQpfPXVV6Snp9dGNhH5F3fmauyKhcQU5OH6NhyuHYg5dQKbsQKKC6FVFGbQ/Zjofhh/velURESkOqosxC1btiQiIoIuXbqwbds2RowYwRtvvFEb2USEf5Xhz9+CshIMQEEepL+PBUyP6zxrB7fvrrWDRURELlGVEwv9/PzYt28fXbp0Ye3atZSVlVFcXFwb2UQEsF/Oh7KScx8IbY7j1vGYqB4qwyIiIpehykI8btw4pk+fzoABA/jHP/7BgAED6NevX21kE2nUbG427n++BaeOn/+EUydqN5CIiEgDVeWUiaSkJJKSkgD46KOPyMrK4sorr/R6MJHGyLrKYNcG3BvSIHs7OP3BPxBKz/O/MmHhtR9QRESkAbpgIT58+DCFhYV06dKFWbNmcfr0aRwOB4899ph2ixOpQfb0SezmL7Cb0j0jwk1bYW66HdMrAbt3c/kc4nJ+AZiEkb4LLCIi0oBUOmVi06ZNjBw5snybu7///e80b96c7777jnfeeafWAoo0VNZa7MFduD99A/cbk7GrPoTwdjhSJ+J4YAaO61IwwaE4ouMwN98PYeFYgLBwzM3344iO8/WnICIi0iBUOkL829/+llmzZpXPF27SpAkPP/wwBw4c4JFHHuGBBx6otZAiDYktLcHu+NqzdnBOFgQEYWIGYGKSMS3bnvc5jug4iI7zyf7vIiIiDV2lhXj//v0V3jxnrQWgffv2nDx50vvJRBoYm38Uu3E5dvOXcOYUhLfDDLzXs3ZwQLCv44mIiDRalRbigICACh+fPU2iadOm3ksk0oBYa2FfJu4NS2H3Rs/Brn08Wyp3uFLLpYmIiNQBlRbikJAQDh8+TNu2nv/CbdKkCQCHDh0iKCiodtKJ1FO2uAi7dRV24zI4dgiCQzHXDcX0TsQ01eoQIiIidUmlhfiOO+7gscce49VXXyU83PML/OTJkzz55JPcfffdtRZQpD6xeQexG5Zht670LJXW9gpMyhjPjnJ+/r6OJyIiIudRaSG+7bbb2LdvHwMHDqRr164YY9i9ezf3338/t956a21mFKnTrNsFuzd61g7elwlOP8yV12NikjCRXXwdT0RERKpwwXWI//M//5Of/vSnrF+/HoDevXsTERFRK8FE6jpbVIDd/KVnWkTBMQhriUkYhenVHxMS5ut4IiIicpGq3KkuPDycQYMG1UYWkXrBHt6L3bAUu/1rcJVBh6twDLgLusZgHE5fxxMREZFqqrIQiwjYslLsjrWetYMP7wb/QEyvmzCxyZjwdr6OJyIiIpdBhVjkAmzBMeym5dhNX0BRAbRog0m6G9MzDhMY4ut4IiIiUgNUiEX+jbUWsrd73iT33XqwFrrG4IhNho7RGFPpjuciIiJSD6kQi/yLLTmDzfwKu2Hp/2/v3qOrrO98j3+efc8VISSAgEARRhSNwliagkaxZXExcvMcsdozdhwrM11UPZ1pLbXarqV46cxxRq3TsUPbQamXahEWx+L0CEUQhBoLIaKCQhAKDRHEJCTZt+d3/tjJTnayd7hl58nOfr/WcmVn7+TZ3+1T9NOfv9/3Kx07LAXyZE2eERurPKDY6fIAAECaEIiR9cxnf4n1Dn7vLSnULJVcIGvGN2Kt07y+U18AAABkNAIxspKxbalml+w/rZcOVEsut6zxfy3r8unSsLGMVAYAIIsQiJFVTHOjzHubY72DP/9UyjtP1pfnybr0all5A5wuDwAAOIBAjKxgjn4is2O9zPtvS9GwNHy8XFfdKI29QpabPwYAAGQzkgD6Ffv9rTKbV0kNx6SCQdIXSqW6g9LhjySPT9bFX5Z1+bWyikc6XSoAAOgjCMToN+z3t8r8foUUCcWeaDgu7dwg5RTIKr9J1iVTZQXynC0SAAD0OQRi9AvGGJmNL7WH4Y48Xrkmz+j9ogAAQEYgECOjmXBQ5oNtsZHKTfXJf6jheO8WBQAAMgqBGBnJnKiT2blepnqzFGySBo+QAnlSy8muP1xQ1PsFAgCAjEEgRsYwxpZq3ouNVN6/S7IsWeMmx3oHDx8n88HbiXuIpdhBumnznSsaAAD0eQRi9HmmpUlm91uxbREnjkq5n7/YwgAAIABJREFUhbK+dL2sS8tlFQyM/5w1oUy21KHLRJGsafPlmlDmXPEAAKDPIxCjzzJ1h2LbInZvja36nn9hbIjGuMkpewe7JpRJBGAAAHAGCMToU0w0In28I7Yt4tCHktsr66Ipsi6fLmvIKKfLAwAA/RCBGH2COfm5zK43Zao2So2fSYWDZV31P2RNnCYrJ9/p8gAAQD9GIIZjjDHSkX2xkcp7/ijZUWnUJXJdd6s05jJZLpfTJQIAgCxAIEavM+GQzJ7tsUNytQckX0BW6TWySqfLGjTU6fIAAECWIRCj15j6T2V2/kFm1yappVEqOl/WdbfKmvAlWb4cp8sDAABZKq2B+N/+7d/0+uuvy7Is3XjjjfrGN76hLVu26OGHH1YwGNSsWbN0zz33pLMEOMwYI33yvuwdb0j7dsaeHHuFXJdfJ438K1mW5WyBAAAg66UtEG/fvl1vv/221qxZo0gkotmzZ6usrExLly7Vs88+q2HDhunOO+/Uxo0bVV5enq4y4BATbJbZvUVm5wbp+BEpJ1/WlbNlXVYuq5DJcQAAoO9IWyD+4he/qBUrVsjj8ai2tlbRaFT19fUaNWqURo4cKUmqqKjQunXrCMT9iDl2WGbHBpndb0nhoDR0jKyZt8saf6Usj9fp8gAAALpI65YJr9erJ554Qr/4xS80c+ZMHT16VMXFxfHXS0pKVFtbe0bXrK6u7ukys1plZeW5X8TYGnCsRoP/XK2CE4dkWy6dKBmnT8+fqKbCIVKzpJ1V5/4+kNRD9wy9inuWebhnmYd7lln62v1K+6G6b3/727rjjju0ePFi1dTUJOwZNcac8R7SiRMnyu/393SZWamyslKTJ08+6983zQ0yuzbFtkU0HJcKBsmatkCeiVepOLdQxae+BM7Qud4z9D7uWebhnmUe7llmceJ+BYPBbhdV0xaIP/74Y4VCIU2YMEE5OTmaMWOG1q1bJ7fbHf+Zuro6lZSUpKsEpIn5S43MjjdkPtwuRSPSyIvkuuZmaWypLJf7lL8PAADQl6QtEB86dEhPPPGEnn/+eUnSG2+8oUWLFumxxx7TgQMHNGLECK1du1YLFy5MVwnoQSYSltnzTqx38F/2SV6/rIlXySq9Vtbg4U6XBwAAcNbSFojLy8tVVVWlefPmye12a8aMGZozZ44GDRqkJUuWKBgMqry8XDNnzkxXCegBpuG4TNUfZKrelJobpIFDZF37NVkXl8ny5zpdHgAAwDlL6x7iJUuWaMmSJQnPlZWVac2aNel8W5wjY4x0aE+sd/BHf5KMkcaWylV6rTTqYlkWI5UBAED/waQ6xJlQi8wHb8v8ab107M9SIE/W5BmxscoDOCIHAAD6JwJxFrLf3yqzeZVKG44p+m6RdMV0WY0nZN7bLAWbpZILZM34hqy/+qIsr8/pcgEAANKKQJxl7Pe3yvx+hRQJyZKkhmPSm7+RkRULwFdMl4aNZaQyAADIGgTiLGM2vSJFQl1fyD9Prjnf7P2CAAAAHEYgzhLm6CexlmmNnyX/gVTPAwAA9HME4n7MRCMyH70bC8J/3it5fJLXL4WDXX+4oKj3CwQAAOgDCMT9kGk8IbNro0zVRunk59KAYlnl/1PWJdNk9lfF9xDHeXyyps13rmAAAAAHEYj7CWOMdPgjmR3rZfZWSnZUGn2pXF+dLo2ZGO8dbE0oky3JbF4l03BMVkGRrGnz5ZpQ5uwHAAAAcAiBOMOZcFDmg+0yO96Q6g5K/hxZl0+PjVQeOCTp77gmlEkTylRZWanJkyf3csUAAAB9C4E4Q5kTdTI7N8hUb5KCTdLgEbK+8r9kTfiSLK/f6fIAAAAyBoE4gxhjSwd2y96xXtpXJVmWrHGTZF0+XRo+nt7BAAAAZ4FAnAFMsEnmvbdkdmyQTtRKuYWyplwv67JyWQUDnS4PAAAgoxGI+zDz6SGZHRtk3t8aa5U2bKysshtkjZssy+N1ujwAAIB+gUDcxxg7Kn30p9i2iEMfSm6PrIumxA7KDRntdHkAAAD9DoG4jzBN9TK73pTZ+YfY1LjCIllX3Shr4lWycvKdLg8AAKDfIhA7yBgj/WW/zI43ZPa8I0Uj0qiL5bruVmnMZbJcLqdLBAAA6PcIxA4wkbDMh9tjI5VrayRfQNal5bIuv1bWoGFOlwcAAJBVCMS9yNR/KrNzo8yuN6WWRmnQMFnTb5F1cZksX47T5QEAAGQlAnGaGWOkg+/L/tN6ad+O2JNjr5Dr8unSyIvoHQwAAOAwAnGamFCzzO6tsW0Rx49IOfmyrpwl67JrZBUWOV0eAAAAWhGIe5g5fkRmx3qZ3VukUIs0ZLSsmbfLGn8lvYMBAAD6IAJxDzC2Le3bGesd/MnuWO/g8VfGegcP+4LT5QEAAKAbBOJzYJobZHZtkqn6g1R/TMofKGvqAlmXXiUrt9Dp8gAAAHAaCMRnwdTWxLZFfLAt1jt45EVyld8kjb1clsvtdHkAAAA4AwTibtjvb5XZvEpqOCYVDJLGlEp1B6Qj+ySvX9bEabJKp8saPNzpUgEAAHCWCMQp2O9vlfn9CikSij3RcFyq2iDlFMq65mZZl3xZlj/X2SIBAABwzgjEKZjNq9rDcEcej1yTvtL7BQEAACAtXE4X0Gc1HEvx/PHerQMAAABpRSBOpSDF8IxUzwMAACAjEYhTsKbNlzy+xCc9vtjzAAAA6DfYQ5yCa0KZbKlDl4kiWdPmyzWhzOnSAAAA0IMIxN1wTSiTCMAAAAD9GlsmAAAAkNUIxAAAAMhqBGIAAABkNQIxAAAAshqBGAAAAFktrYH4qaee0pw5czRnzhw99thjkqQtW7aooqJCM2bM0OOPP57OtwcAAABOKW2BeMuWLdq8ebNWrVqlV199Ve+9957Wrl2rpUuX6umnn9Zrr72m6upqbdy4MV0lAAAAAKeUtkBcXFyse++9Vz6fT16vV2PHjlVNTY1GjRqlkSNHyuPxqKKiQuvWrUtXCQAAAMAppW0wx7hx4+KPa2pq9Lvf/U633nqriouL48+XlJSotrb2jK5bXV3dYzVCqqysdLoEnCHuWebhnmUe7lnm4Z5llr52v9I+qW7v3r2688479d3vfldut1s1NTXx14wxsizrjK43ceJE+f3+Hq4yO1VWVmry5MlOl4EzwD3LPNyzzMM9yzzcs8zixP0KBoPdLqqm9VBdZWWlbrvtNn3nO9/R/PnzNXToUNXV1cVfr6urU0lJSTpLAAAAALqVtkB85MgRfetb39I///M/a86cOZKk0tJS7d+/XwcOHFA0GtXatWt19dVXp6sEAAAA4JTStmVi+fLlCgaDeuSRR+LPLVq0SI888oiWLFmiYDCo8vJyzZw5M10lAAAAAKeUtkB833336b777kv62po1a9L1tgAAAMAZYVIdAAAAslrau0wAAAAA247u16s1O3U82KRB2w9q3uhSTSkZ43RZkgjEAAAASLOttfu08qM/KmxHJUnHg016bu92SeoToZhADAAAgDNiG1snwyE1hINqCLe0/hV73BgOqiHUovq2x+EWnYyEulwjZEf1as1OAjEAAACcZ4xRU6RjwG39GuoUdFvDb2M4JCPT5TqWpFyPX4Vev/K9AZ2fN0AF3iHaeGRv0vc9HmxK8yc7PQRiAACAPiRhr60/96z22hpj1BKNJK7edgi3iQE39tU2XQOuJOV6vCrwBpTvDagkp0BjC4tV4PWrwBuIffUF4o/zvH65ra49G3Yd/3PS8DvIn3tGnytdCMQAAAB9xLaj+/Xc3u0KJdlre3nRyC6rtu2rty2qbw29bUE3Yuyk7xFwe1oDrl9F/jyNyi9Sga9DwPW2B9x8r18el/ucP9e80aUJn0uSfC635o0uPedr9wQCMQAAgAPCdrTLqu2LH1cmhEYpttf2Fx9ulbQ16XW8LrcKWwPsef4cjcgfmLiC2xZwW0OvtwcC7plqW+E+15XvdCEQAwAA9ICIHW1dne160KwhFGxdxY091xhuUUs0ckbXnz/68vaA62sPun53ZsS5KSVjNKVkjCorKzV58mSny0mQGX8HAQAAelnU2DrZMeAm2arQFm4bwi1qioSTXsdlWQmrtcWBfOW3htlCn7/1cey1/1P1hj4LJd9rO3Pkxen+yFmLQAwAADLSmQ56sOOdFFKF244tw4JqigST9FGQLFnK9/rjIXZk3kDlJ4TbQLzLQoE3oFyPV5ZlndZnmj+mb++17a8IxAAAIOMkO3y2Ys82ffBZrQbn5MfDbX2oPeg2hoOyk0ZcKc/THnCH5Q7QeF/bobKAClsPoLWt6OZ6fHIl6aTQE/r6Xtv+ikAMAAD6BGOMgtFI8j24rftw28LtoZMnuvTBjRhbW47ukxRrFda2QpusVVhsRbf7VmFOadtri95DIAYAAGkTShZwQ0nahbUG3XCnDgtt/K2twgq8fg305+rgyc9SvudPp97UI63CkD0IxAAA9GM9MeSho3C8k0Liqm3n0NvY+lrQTt5Joa1VWL7Xr0JvQMNzByQMeCjo8Fq+1y9fp04K39/+aspBD4RhnCkCMQAA/VR3Qx7aQnHUttUYie21bUy6VaFt2ENsJbclmryTgsdyxUNsgS+gITkFCQMeOk41y/f65Xd5TvugWTJ9fdADMguBGACAfsQ2thrDITWGW/SbfX9KOuRhxZ5t+r+fvNfaKiyU9Dqu1k4Kha2rtkWBosRw60sMugH36XdS6AkcPkNPIhADANCHtbUKa1uhbduKUN+6/7bzSu7JFK3COooYWyPyzktYte08sjfH45OrFwPu2ejLgx6QWQjEAAD0ImOMWqLh2MSy+PSy9uEOHSebtR00S90qzBcf6jAsp1DjCosTwu0LH1eqIdzS5fcG+XP1zQnT0v1RgYxBIAYAQGc+5KGNMUZBO5J0NG99h0EPHVdyo8ZOeq2A26vC1hXbwTn5GlPYaZtCh5G9+R6/3K7uW4VFjc0+W+A0EIgBAFkv2eGzZ/du16fNjbqgYFBswEOHFd3Oh85StgpzeVTQOr3sPH+OLsgfmDCmty3cth1G8/ZwdwT22QKnh0AMAOj3InY0aS/ctq4K2+sOdAm1YTuqNZ/sSnjOY7kSWoMNyx3Q7T7czq3CnMCQB+DUnP+TCgDAGYoau71FWKhrq7D212LPNadoFeayLBV6AylXeCXpe6Uz4kHX7z63VmEA+iYCMQDgtPX0kIc2trF1MhxKOuChbSW3497ckylahVmyWsfyxgLsqIKi+OOCzl99AeW0tgrrbsjDFwoHn/PnA9C3EYgBAKfldIY8tLGNUXOkc8BtO1zWdSW3MRySSdJJwZKU5/HHtyQMzxugAu+QpMMeCrwB5Z5lqzCGPADZjUAMADglY4xW7d+ZdMjDyo/+qF3HD8cDbn2oRY2RoGyTvFVYrscb32dbklOgCwuL21dxOw17yPP65ba676TQEzh8BmQ3AjEAZKG2VmFdW4IlX9FtDAcVSdEqLBiNqKbhmPK9fhX58zQ66TaFQHwrg6eHOyn0FIY8ANmLQAwA/UQoGonvtW3sGGo7HC6Lr+KGW1IeJPO53PEAe54/RyPyB6rA69fmIx+pKcnhtEH+XD145Q3p/ngAkDYEYgBIg7Md8tBRW6uwtnCbfMhD++NgNJL0Oh7LldDzdlhuYWvf21joLfQFOqzoxjopJDMi7zz22QLolwjEANDDUh0+s43RxQOHte+zbQ2zqVZ0u2sV1nE7QnEgPx5wC1uHQBR4/SpsfS7QQ63C2GcLoL8iEAPAWbKNUVMkqPpQ4laE1TXJD5/9as/bSa9jyWpdoY0F3AvyBqpgYHvgzfcGVOhtC7oB5Xq8jvXCZcgDgP6IQAwArYwxaoqEW8Nti+rD7WN66+Mje9tXchvDwaStwrpz89i/7nDALLaim+vxn1WrMABAzyAQA+i3jDFqiUZaw237toT2cNs14EZTdFLI9XjjK7QlOQUaW1ictA9ugdevh3e8nnLIwzXnj0/3xwYAnCECMQBHnenks1A00incJtl/26FlWKpWYQG3J77XdpA/T6Pyi+KHzs61VRhDHgAgsxCIAThm29H9enbv9nj7r+PBJv3Xnm2qPnZYAwN5XcJtQ7ily97cNl6XW4Xxw2Q5Gp43sOuo3g4B15eik0JP4PAZAGQWAjGAHhW1bTVGggkrt126KLSG27qWxq6/b2xt//RAvFVYfut2hKE5BfEtC/GA6zt1qzCnMOQBADJH3/o3CIA+xza2GsOhhC4KjeEWNYQ6b1OIfW2KhJJep3OrsKJAUdJA3OapqTc51kkBAJBd0hqIGxsbtWjRIv3sZz/TiBEjtGXLFj388MMKBoOaNWuW7rnnnnS+PdBv9MSQhzaxVmGheBeFhlCnoNtpJfdkJJi0j0KsVZgvvkI7Iu+8pAfM2r7meHxdOil8XF+X8vAZYRgA0FvSFoh37typ++67TzU1NZKklpYWLV26VM8++6yGDRumO++8Uxs3blR5eXm6SgD6hVRDHqTYf5Y3xqg5Gm4d5hBsD7qdA26HXrl2ilZheZ72gDssp1DjB5TEJ5gVejtOM/Mrz+uTy3Kd02fj8BkAoC9IWyB+6aWX9MADD+i73/2uJKmqqkqjRo3SyJEjJUkVFRVat24dgRjoxBijYDQSD7Ivffxu0iEP/7Vnm367f4caumkVluP2tq7W+lWck68vFA5WfnyCWWvQbR3bm+/xy+06t4B7pjh8BgDoC9IWiB966KGE748ePari4uL49yUlJaqtrT3j61ZXV59zbWhXWVnpdAlZIWJsNZuomk1ELYqq2UTV0vp9/LEirc9FFT2NYQ9RY2tI1KfR7hwFLLdyLLdyLE/ssdwKWG6521ZwI61/Nbd90yipUU2Sum5Y6F0eSTe6R0q5rU8cPK7Kg8edLKnH8ecs83DPMg/3LLP0tfvVa4fqbNtO2BNojDmrPYITJ06U3+/vydKyFqffz17YjnbompB4wKxtCETb44ZQUEE7kvQ6Xpc7vs92qLewtXNCIL6KW+AN6L/2vK36cEuX3x3kz9X//uKcdH9UnCP+nGUe7lnm4Z5lFifuVzAY7HZRtdcC8dChQ1VXVxf/vq6uTiUlJb319sgSZzrkoU1bq7DEcNt5ilmLGkKx/bkt0XDS67gtV8JBsiE5BQnhtn27QqxlmN/lOeX/MbzxC1ewzxYAgDTqtUBcWlqq/fv368CBAxoxYoTWrl2rhQsX9tbbIwskO3z27J5tOnLyc43IH9ipB25i0D2ZqlWYrPaDZD6/RhUUxQNvvjegQq8/Hm4LvQEF3N4e747APlsAANKr1wKx3+/XI488oiVLligYDKq8vFwzZ87srbdHhrONUXMklLhq22kld+exQ13G9IaNrd8d2h3/3pKU5/HHD5qNyDuvaxcFX3vQzU3SKswJDHkAACB90h6I169fH39cVlamNWvWpPstkQGMMWqJhtsnmCWs2rY/bgy3TzxL1Sos1+NTgdffJQx3dP+k2a2ruufeKgwAAPQvTKrLQj055KGNMUZBO9KhD26nUb2t+287Bt1UATbg9rZPM/PnaXRBUaf9t+17dPO9fnlcbknS97e/mnLIw/C8887p8wEAgP6LQJxlTjXkoaNQNBKfYJY4trdtRTdxL264U6/cNj6XO9494Tx/jkbmD+x60MzXHnS9rQH3TDHkAQAAnA0CcRaJ2FH9dv+OpEMeVu79o96p+yRhy0IwmrxVmMdyxffgFngDGpY7oMNBs1i4Leiwkut3987/zDh8BgAAzgaBOINFjd2+LaHDWN6OK7odOys0p2gVJklBO6LjwZMq8AZUHMiPr+gmBN3WFV2/+9StwpzSdvgMAADgdBGI+xDb2DoZDqU8XBbrgdsedFO1CrPircJiYfaCvIEqGBgLt//vzx+qKcnvDfLn6oeTZqf7IwIAAPQ5BOJunO2QhzbGGDVFQgn7bJMdLmuIr+iGZJJ0UrAk5Xr88VZg5+cNUIF3SIcBEK0rua0rurkef8pWYYMD+eyzBQAA6IBAnEKqw2ehaFR/dd6QFEMeunZWsE2qVmHe+HCHkpwCjS0sTphwVuBrD7p5Xr/cPdQqjH22AAAAiQjEKbxaszPp4bPnPtqe9OcDbk98r22RP0+j8otU4OsQcDus5HZsFeYEhjwAAAC0IxCnkKyfbZvbxn+pPeD6zq1VGAAAAJxFIE5hkD835ZCHsiFfcKAiAAAApAMzbFOYN7pUvk6rvhw+AwAA6H9YIU6Bw2cAAADZgUDcDYY8AAAA9H9smQAAAEBWIxADAAAgqxGIAQAAkNUIxAAAAMhqBGIAAABkNQIxAAAAshqBGAAAAFmNQAwAAICsRiAGAABAViMQAwAAIKtlzOhmY4wkKRQKOVxJ/xIMBp0uAWeIe5Z5uGeZh3uWebhnmaW371dbfmzLk51ZJtUrfUxDQ4P27NnjdBkAAADIUOPHj1dBQUGX5zMmENu2rZMnT8rr9cqyLKfLAQAAQIYwxigcDisvL08uV9cdwxkTiAEAAIB04FAdAAAAshqBGAAAAFmNQAwAAICsRiAGAABAViMQAwAAIKsRiAEAAJDVCMQAAADIagTiLPboo4/q3nvvdboMnIb169drwYIFmjVrlh588EGny8FpWL16tebMmaM5c+bo0UcfdbocdKOxsVHXX3+9Dh06JEnasmWLKioqNGPGDD3++OMOV4dkOt+zF198Uddff70qKir0/e9/Pz6mF31D5/vV5rnnntPXv/51h6pKRCDOUlu3btWqVaucLgOn4eDBg3rggQf09NNPa82aNdq9e7c2btzodFnoRnNzsx566CE9++yzWr16td555x1t2bLF6bKQxM6dO3XzzTerpqZGktTS0qKlS5fq6aef1muvvabq6mr+vPUxne/Z/v37tXz5cr3wwgtas2aNbNvWr3/9a2eLRFzn+9Xmo48+0jPPPONMUUkQiLPQiRMn9Pjjj2vx4sVOl4LT8Pvf/16zZ8/W0KFD5fV69fjjj6u0tNTpstCNaDQq27bV3NysSCSiSCQiv9/vdFlI4qWXXtIDDzygkpISSVJVVZVGjRqlkSNHyuPxqKKiQuvWrXO4SnTU+Z75fD498MADys/Pl2VZGj9+vA4fPuxwlWjT+X5JUigU0v33369vf/vbDlaWyON0Aeh9999/v+655x4dOXLE6VJwGg4cOCCv16vFixfryJEjuuaaa3T33Xc7XRa6kZ+fr7vuukuzZs1STk6OrrzySk2aNMnpspDEQw89lPD90aNHVVxcHP++pKREtbW1vV0WutH5ng0fPlzDhw+XJB0/flwrV67Uww8/7ERpSKLz/ZKkf/mXf9HChQs1YsQIBypKjhXiLPOb3/xGw4YNU1lZmdOl4DRFo1Ft3bpVy5Yt04svvqiqqiq2u/RxH3zwgV555RVt2LBBmzZtksvl0vLly50uC6fBtm1ZlhX/3hiT8D36rtraWv3N3/yNFi5cqClTpjhdDlJ46623dOTIES1cuNDpUhIQiLPMa6+9prfeektz587VE088ofXr12vZsmVOl4VuDB48WGVlZRo0aJACgYC+8pWvqKqqyumy0I3NmzerrKxMRUVF8vl8WrBggbZv3+50WTgNQ4cOVV1dXfz7urq6hP/Ui77p448/1qJFizR//nx961vfcrocdGPt2rXau3ev5s6dq/vuu0/V1dV94r96smUiy/zyl7+MP/7tb3+r7du3a+nSpQ5WhFO59tpr9b3vfU/19fXKy8vTpk2bdN111zldFrpx0UUX6Sc/+YmampqUk5Oj9evX69JLL3W6LJyG0tJS7d+/XwcOHNCIESO0du3aPreShUSNjY26/fbbdffdd2vevHlOl4NT6LidZdu2bXrqqaf0r//6rw5WFEMgBvq40tJS/d3f/Z2+9rWvKRwOa+rUqfwLuo+bNm2adu/erQULFsjr9erSSy/VN7/5TafLwmnw+/165JFHtGTJEgWDQZWXl2vmzJlOl4VuvPzyy/r000/1y1/+Mr7oM336dN11110OV4ZMYhljjNNFAAAAAE5hDzEAAACyGoEYAAAAWY1ADAAAgKxGIAYAAEBWIxADAAAgqxGIAQAAkNUIxADQgyKRiJ555hlVVFSooqJCc+bM0Y9//GN99tlnp/zdQ4cO6Yorrkj62vPPP69nnnlGUmwE+8qVK1NeZ9WqVbrppps0d+5czZ49Wz/84Q9VX19/dh/oFA4ePKglS5ak5doA0FsYzAEAPeif/umfZNu2nnvuOQ0YMEDhcFi/+tWvtGjRIr3yyivKz88/q+vefPPN8ceVlZUaN25c0p/72c9+pjfffFM//elPNXjwYIXDYS1btkyLFy/Wr3/967N67+4cPnxY+/fv7/HrAkBvcv/oRz/6kdNFAEB/UFVVpZ///OdasWJFPPi63W5NnjxZW7Zs0bFjxzR58mRNnz5dkyZN0pAhQyQp/n1OTo5WrlypQ4cO6cknn9TLL7+s8ePHa+jQoXryySf1+uuvKxQKafny5aqurpbf79dll10Wf/+mpib9wz/8g37+85/r/PPPj7//lClTlJubqzFjxsi2bS1btkyPPvqoXnjhBb333nuaMmWKfD5fyrrC4bAWLFigAwcO6Mknn9R//ud/aujQoRo9erT+9m//VocPH9Y777yjuXPn9vLfcQDoGWyZAIAe8u6772rixInKycnp8trUqVP17rvvnvIaLS0tmjp1ql599VXdfffduuuuuxQKheKvf/WrX9X06dN122236ZZbbkn43X379ikQCGj06NEJz+fk5OiGG26Qz+fTv//7v+vo0aNavXq1Vq9eLdu29dhjj52yroMHD2ratGl6+eWX9Z3vfEfLli2T2+3Wgw8+qAsuuEDLly8/5TUAoK8iEANALzHGnPJnCgsLNXv2bEnStGnTJMWC7ulwuVyybbvbn3nzzTe1aNEieb1euVwuff3rX9emTZtOeW2v16vy8nJJ0sUXX6w4MzHHAAAB+klEQVQTJ06cVk0AkAkIxADQQyZNmqRdu3apublZkhQKheKH6d5++22VlpbGf7ZjOO64AuxyJf5j2bZteb3e03r/Cy+8UJFIRDU1NQnPB4NB3XHHHaqtrZVt27IsK+H64XD4lHW1BWhJCb8PAP0BgRgAeshll12mKVOm6N5779Xnn3+ugwcP6pZbbtGSJUv04Ycfxrc4DBo0SNXV1ZKkbdu2qa6uLn6NEydOaMOGDZKk9evXKxAIaNSoUQnv43a7FYlEury/z+fTHXfcoR/84Af69NNPJcVC7bJly9Tc3KwhQ4boqquu0vPPP69wOCzbtrVy5UpNnTr1lHWl4na7EwI1AGQiAjEA9KCf/OQnmjhxom699VbdfffdCofDcrvdysvL0xtvvCFJ+sd//EetWLFCc+fO1erVq3XJJZfEf7+oqEj//d//rblz5+qZZ57Rk08+KY8nsSHQ1VdfrRdeeEH/8R//0eX9Fy9erBkzZuj222/X3LlzdcMNN8gYo6efflqS9Pd///caPHiw5s2bp1mzZikSiegHP/jBKetK5cILL5Tf79eNN954WltCAKAvsgz/BAOAtKuvr1d1dbW+/OUvO10KAKATAjEAAACyGlsmAAAAkNUIxAAAAMhqBGIAAABkNQIxAAAAshqBGAAAAFmNQAwAAICs9v8BvkglzxmNcRMAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "grouped_depth = df.groupby(\"qubit_count\").mean().reset_index()\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped_depth[\"qubit_count\"], grouped_depth[\"noisy_gate_depth\"], marker='o', label=\"Noisy\", color=palette[0])\n", + "plt.plot(grouped_depth[\"qubit_count\"], grouped_depth[\"noisy_dd_gate_depth\"], marker='o', label=\"Noisy + DD\", color=palette[1])\n", + "plt.title(\"Qubit Count vs Circuit Depth (mean)\")\n", + "plt.xlabel(\"Qubit Count\")\n", + "plt.ylabel(\"Gate Depth\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"qiskit_dd_gate_depth.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAGkCAYAAAA2STNEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deVxUZf//8fewu2RqiZoLLWp2Z5qaGblgpojICIIZlZSlKWW4fLUyl7RcUssoLSzLNjN3DCRuSrNcwkyxUlr0rpQ0uZFyS9Fhmfn94e38RIUBY2aQ83o+Hj0enu06n+scRt9cXXOOyWaz2QQAAAAYlIe7CwAAAADciUAMAAAAQyMQAwAAwNAIxAAAADA0AjEAAAAMjUAMAAAAQyMQA1VIQUGBOnfurCFDhpS4T1pammJiYi66bdiwYUpMTCzXOUtrT5JWrlype+65R6GhoerRo4cefvhhff/992Vq+5FHHtHhw4fLVc+4cePUpUsXhYeHKzw8XKGhoXr22WeVm5tbrnbO9+WXX+rVV1+VJCUmJmrYsGHlbmPhwoUaN27cP6rjXCtWrNDixYvLdUxiYqLat29vvz5ms1mxsbHKzMy07xMTE6Pu3bvb9+nTp49mz56tEydOlNjuTz/9pGeeecZ+fExMjKxWq3374cOHdeONNzqs79VXX9XHH39crj6VRffu3dWrVy+Fh4erb9++MpvNmj9/vgoLCyVJW7duVevWrYtdlwcffFDp6emXfL4nn3yy2Lpdu3ape/fuDo+dMGHCJZ23qKhIw4YN019//VXuYwGj83J3AQAqztq1a9WyZUtlZmbq119/1Q033ODWel5++WVt27ZNr7zyiho1aiRJ2rJliz14X3PNNaUe/9VXX13SeQcNGqTBgwdLkmw2m958800NGTJEiYmJ8vT0vKQ2d+3apWPHjl3Ssc6SkZGh5s2bl/u42267TW+++aZ9OT09XUOGDNGqVavs9+mpp55SSEiIpDO/aE2bNk1jx47VG2+8cUF7VqtVEyZM0Pz58+3rvvvuO73xxht6/PHHy1XbyJEjy92fsnrppZd0yy23SJLy8vI0duxYvfDCC5o0aZIkqWnTpkpKSrLv//PPP2vw4MFKSEhQmzZtyn2+tLQ0de7cWeHh4eU6bvr06eU+lyR5enpqyJAheu655zR37txLagMwKkaIgSpkyZIluvvuuxUaGqr333/fvv7VV19Vjx491L9/f61du9a+PicnRw8//LD69OmjRx99tNgo6q+//qpHHnlEkZGRCg8P18qVKx22d64///xT77//vl599VV7yJKkwMBAjRs3TqdOnZIkffHFF4qOjlZkZKS6deumV155RZLso40PPfSQsrOzlZOTo+HDhysyMlJms/miwexiTCaTYmNjdfr0aXvA3rFjh+6//37169dPUVFR+uKLLySdGT0dOnSohgwZotDQUD388MPKycnR999/r6VLlyo1NVXx8fGSpNzcXA0dOlRms1kRERH69ddfLzh3QUGBJk+erJ49eyo6Olo7duywb4uJiVFaWtpFl0u79metXbtW69ev13vvvafFixeroKBAU6dOVWhoqMxmsyZMmFDqiO657rzzTvXs2VNLliy56HZvb28988wz2rZt20X7+e9//1uNGzdW/fr17esef/xxvfPOO/ruu+8u2uayZcsUFhamvn376pFHHtHevXslnRnhX7hwoSRp7ty5MpvNioyM1ODBg3Xo0CElJycrOjra3s7BgwfVuXNn5efn29fFxMRo69atpfa5evXqevbZZ7Vs2bISr1PLli0VExOj9957r9S2SjJ69GhNmzZN+/fvv+j2119/3X6/RowYYf/8nf1ZKCws1OTJk+3XYMSIETp58qTmz5+vMWPG2NvZvn27IiIiJEkdOnTQL7/8op9++umSagaMikAMVBG//PKLvv32W4WEhCgiIkJJSUk6cuSI1q1bp88++0wff/yxli5dWuwf/+eff15t2rTRJ598ookTJ9pDSWFhoUaMGKExY8YoMTFRH374oT3clNbeub777jvdcMMN8vf3v2BbRESEbrjhBtlsNr3zzjuaOXOmEhMTtWzZMi1YsECHDx/WCy+8IEl6//331bBhQz355JOKiopSYmKiVq5cqfT0dKWmppb5+tx4443as2ePjh07pmeeeUazZ8/W6tWrlZCQoClTpujgwYOSpG3btmnChAlKTU3VzTffrOnTp6tNmzaKjo5WaGioRo8eLUnav3+/JkyYoDVr1ui2226zh7hzffTRR9q3b58++eQTvfPOO8rOznZYZ2nX/lw9e/ZU9+7dNWjQID3wwAOaP3++Dh06pKSkJCUlJclqtWr27Nllvj4tW7bUnj17Stzu5+ena6+99qL7fPrpp+rWrVuxddddd52eeuopjR079oKfkS1btujtt9/WBx98oOTkZIWFhWn48OE698Wp2dnZev/997Vq1SolJiaqU6dO2rlzp0JCQvT777/rP//5j6Qz00b69esnHx+fMvf1rAYNGqhmzZr67bffStzH0XUpTYcOHXT//fdr7Nix9qkZZ61atUqbNm3SypUrtWbNGjVv3vyC6TTfffedvvnmGyUnJysxMVFNmjTR7t27NWDAAH355Zc6evSoJGn58uXFfkm48847S/xFFcDFEYiBKmLJkiW66667VKdOHbVu3VqNGzfW8uXLtWXLFvXs2VM1a9aUl5eXoqKi7Mekp6crMjJSkhQQEKCOHTtKkvbt26fff/9d48ePV3h4uAYOHKjTp0/rxx9/LLW9c53/VvgTJ07Y52f27NlTL7/8skwmk9544w398MMPeu211zRz5kzZbDb76PFZeXl52rZtm1599VWFh4drwIABys7O1s8//1zm62MymVStWjV99913ys3N1fDhwxUeHq6hQ4fKZDJp9+7dkqROnTrpuuuukyQNGDBAmzZtumh7rVu3VkBAgCTppptuuuhc5y1btigsLEw+Pj6qXr26zGazwzpLu/al2bhxo6Kjo+Xt7S0PDw/FxMSUWHtJ/Pz8St1+9hqe77ffflPTpk0vWD9gwAD961//0pQpU4qt37Rpk0JDQ1W3bl1JUmRkpHJycnTgwAH7PvXr11fLli3Vr18/zZo1SzfddJN69OghHx8f3XPPPVqxYoWKioq0evVqDRgwQEeOHLH/fGVmZmrixIkKDw8vNo2jPH06d7uj61KauLg42Ww2zZs3r9j6jRs3KjIyUtWrV5ckPfjgg/r666+LjXS3aNFCnp6euueee/TKK6+oV69eateuna666ip169ZNSUlJOnbsmDZv3lzsZ6tx48b2X24BlA1ziIEqIC8vT0lJSfLx8bF/aefEiRP68MMP1b1792Lh9Nw5tCaTqdg2L68zfyUUFRXpiiuuKDaf8s8//9QVV1yh2bNnl9jeuVq3bq29e/fqyJEjqlOnjmrWrGlvb968eTpy5Ijy8vLUr18/9ejRQ7fddpuioqK0bt26C8K01WqVzWbT0qVL7eHl8OHD8vX1LdP1sdls+uGHHzRw4ED9/fffuuGGG7RixQr79pycHNWtW1dr1qwp1h+r1Vpi/85eK+nC61iS89s695iCggJJpV/70litVplMpmLLZ9ssi8zMTLVo0aLE7adOndKvv/6qZs2aXbCttP5PnTpVffv2VXJycrHazmez2YqNonp4eOjDDz/Url27tGXLFs2YMUNdunTRU089pejoaPXv31+33367mjdvriZNmkiS/ZrFxMToiSeesP+CV5I//vhDeXl5atq0aYlf3ty1a9dFr8uECRPsX0SMjo7Wfffdd9Hjvby8NGfOHEVGRqp27drFrsH59+v8UeRatWopKSlJO3bs0Ndff61Ro0Zp8ODBeuCBB/TAAw9oypQp8vLyUnBwsGrUqFHsnB4ejHcB5cEnBqgC1qxZo9q1a2vTpk1av3691q9fr3Xr1ikvL0+33Xab0tLSdPz4cVmt1mJBq0uXLlq2bJmkM3Mxz867vO666+Tn52ffNzs7W2FhYcrMzFTXrl1LbO9c9evX14MPPqiRI0fapyNIZ0LIjh075OHhoaysLJ04cUKjRo1S9+7dtXXrVuXn59sDk6enpwoLC1WzZk3deuutevfddyVJx48f13333afPP//c4bUpKirS66+/rjp16qhDhw669dZblZWVpW3btkk683SEXr16KScnR5L09ddf2/+8dOlS3XXXXcVqKY8uXbro448/lsVikcViKTbFo27duvZA9csvv9hHqEu79uc7t6YuXbpoyZIlKigokNVq1eLFi9WpU6cy1blhwwZ9+eWXuvfeey+6/fTp05oxY4a6du2qxo0bX7D9uuuu0++//37RY6+88kq9+OKL9rnXZ2tNTU21h9BVq1apdu3a9hF36cwX2sLCwnTDDTdo2LBhGjRokHbt2iVJatiwoW699VbNmDGjxCDqyPHjxzV16lQ98MADJf5itXPnTi1ZskQPPfTQBdumT59un57iqIYmTZpowoQJevnll+3runTpolWrVikvL0+StGjRInXo0KHY1I8vvvhCgwYNUtu2bRUXF6eIiAj7z0G7du3k4eGhhQsXFpsuIUkHDhzQ9ddfX7YLAUASI8RAlbBkyRI9/PDDxUYga9WqZf9CUFRUlKKiolSrVi21bNlSR44ckSRNnjxZzzzzjHr37q0GDRqoZcuWkiQfHx8lJCRo+vTpevvtt1VYWKiRI0eqffv2kqTdu3dftL3zjR49WsnJyRozZoxOnTqlv//+W1deeaVCQ0PtQaRbt27q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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "depth_diff = grouped_depth[\"noisy_dd_gate_depth\"] - grouped_depth[\"noisy_gate_depth\"]\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.bar(grouped_depth[\"qubit_count\"], depth_diff)\n", + "plt.title(\"Added Gate Depth due to DD (Noisy+DD - Noisy)\")\n", + "plt.xlabel(\"Qubit Count\")\n", + "plt.ylabel(\"Additional Depth\")\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAGkCAYAAAA2STNEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXRU9f3/8dfcWZJAlEVIRGlRqlJKQIVWMEVaKEIMCWEpli34FRukKCmoKCoqilhFW6xoK9CFgiIiQRZNoyKxtUZcwC8CgpQq+cqaRGTJOpm59/dHfkwdQpgEZkkyz8c5njP3c+/c+56PczivfOZzP9dmWZYlAAAAIEoZkS4AAAAAiCQCMQAAAKIagRgAAABRjUAMAACAqEYgBgAAQFQjEAMAACCqEYgBRMyqVas0atQopaamauDAgbr55pu1devWer134sSJOnLkSIOuN3PmTF133XXKyMhQRkaGUlNT9eCDD6q4uPhsyvd555139Pvf/16StHr1at16663ndL76yMzM1IABA3yf5eR/eXl5Ib/2SZ9++qkefPDBBh23bds2ZWdnB+X6zz77rG655ZZa7Tt27NC1114rt9t92vd98MEHSktLC0oNAJoHR6QLABCdfve73+mjjz7S008/rYsvvliS9P777+vWW2/V6tWrddFFF53x/e+9995ZXfd//ud/fCHKsiwtXLhQv/zlL7V69WrZ7fazOue2bdt07Nixs3rvubj77ruVkpIS9uuetGfPHh0+fLhBx3Xv3l3PPPNMUK5/4403auHChTp48KA6dOjga3/55Zc1atQouVyuoFwHQPNHIAYQdiUlJfrb3/6mt956SwkJCb72a6+9VjNnzlRFRYUkKT8/XwsXLpTb7daRI0c0bNgwTZs2Tffee68k6aabbtKiRYtkGIYeeeQRHTx4UNXV1RoyZIgmT54csA6bzabJkyfr1Vdf1Xvvvad+/fppy5Yteuqpp1RRUSHDMHT77berf//+Wr16tfLy8mSapg4cOKDExEQ9/vjjOnTokFasWCGv16vzzjtPnTp1UnFxsSZNmqSDBw/Kbrfrt7/9rb73ve/5XXv06NG6+eabNXjwYEnSk08+KakmsN9zzz365ptvJEk/+clPNG3atAb173/+8x+NHj1aS5cuVdeuXXX33XfL4XDoscce0w9+8ANlZWXp3XffVXl5ue644w4NGjRIkvTKK6/opZdekmmaat26tR544AF973vfU1lZmR599FFt2bJFdrtdAwcO1JgxY/TMM8/oxIkTuvfeezV37lw99thj2rp1q8rKymRZlh599FFddNFFfscNGzZMc+bM0WuvvaYTJ07o4Ycf1q5du2Sz2XTdddfpjjvukMPhUPfu3TVp0iS99957Kioq0i9/+UuNHTvW73MmJCRowIABWr16tW677TZJUllZmf7+979r7dq1dX5/vm3mzJm6/PLLfX8kfXv78OHDZ/W9AtAEWQAQZm+99ZY1fPjwMx5jmqY1fvx468svv7Qsy7IOHTpkde3a1fr6668ty7KsK664wvc6MzPTevvtty3LsqzKykorMzPTev3112ud85577rH+9Kc/1WqfOnWqtXjxYuvo0aPWoEGDrK+++sp3zX79+ln79++3cnJyrKuuusr64osvLMuyrCeffNKaOnWqZVmW9cwzz1gPP/ywZVmWlZOTY/3whz+09u7da1mWZc2ZM8e69957a11z1apV1qRJkyzLsiyPx2P17dvX+vLLL61nn33WeuCBByzLsqyysjJr2rRp1vHjx2u9f/z48Vb//v2toUOH+v135MgRy7Is6+WXX7bS09OtlStXWunp6VZFRYWv3/74xz9almVZO3futHr16mV9/fXX1gcffGCNHTvWKi8vtyzLst59910rJSXFsizLeuyxx6zp06dbHo/HqqqqssaNG2dt2rTJysnJ8X2GLVu2WFOnTrW8Xq9lWZa1cOFC69Zbb/X1ycnjNm3aZA0ZMsSyLMu6++67rTlz5limaVpVVVXWxIkTrYULF/rqXLZsmWVZlrVt2zYrKSnJqqysrNUPmzZtsgYMGGCZpun73FOmTDnj9+fbNZz6nfj2dn2/VwCaPkaIAYSddcoT40tLSzVu3DhJUnl5uW644Qbdcccdev755/XOO+/otdde03/+8x9ZluUbPT6pvLxcH330kY4dO+abx1teXq5du3YpNTW1XvXYbDbFxcXpf//3f1VcXOwbbTy57/PPP5ck/fjHP9all14qqebn+oyMjNOer0ePHurUqZMkqWvXrnrrrbdqHZOamqp58+apuLhYn332mS655BJdcskluu6663yjy8nJybrzzjt13nnnnfY6Z5oyceONN+pf//qXHn30Ua1du1axsbG+fePHj5ckff/739cVV1yhjz76SFu3blVhYaFGjx7tO+748eM6evSoCgoKdO+998put8tut+uFF16QVDNf+qSrr75arVq10ooVK/TVV1/pgw8+UMuWLU9b20n//Oc/9dJLL8lms8nlcmn06NH629/+pkmTJkmSfvazn0mSunXrJrfbrfLycsXExPido3fv3oqLi9OmTZt07bXX6uWXX9Zdd90lm81Wr+9PXYLxvQLQdBCIAYRdjx499OWXX+qbb75RmzZtFB8fr7Vr10qSFixYoG+++Ubl5eUaPny4Bg4cqB/+8IcaOXKkNmzYUCtMm6Ypy7K0YsUKxcXFSZKOHDlSKzjVxbIs7dixQ+PHj9eJEyf0ve99T6+88opv/+HDh9W2bVutX7/eb46xaZp1zjl2OP77T6vNZqtVsyTFxcVp8ODBeu211/TJJ59o1KhRvr55++239f7772vTpk0aNWqUFi9erKSkpHp9npPcbrcKCwt13nnnaefOnbrkkkt8+073OUzTVEZGhmbMmOFrLyoqUqtWreRwOGSz2XzvOXjwoF/AlmpuLJw7d65uvvlm/exnP1Pnzp21bt26M9ZomqbfeU3TlMfj8W2f/H948pjT9aMkjRkzRqtWrVLr1q1VXl6ua6+9tt7fn1P//1RXV/tqOZfvFYCmhVUmAIRdYmKiJkyYoF//+tc6cOCAr33//v3asmWLDMNQYWGhSktLNW3aNA0YMEAffPCB3G63TNOUVBPqPB6P4uPjddVVV+mvf/2rpJpRzTFjxujtt98OWIfX69Vzzz2nNm3a6Ec/+pGuuuoqFRYW6qOPPpIk7dy5U4MHD/bdELZp0ybf6xUrVqh///5+tTTUjTfeqFdffVVbtmzxzSV+6qmn9Ic//EEDBw7U/fffr8suu0z//ve/G3zuefPm6fLLL9ef//xnPfroo9q/f79v35o1ayTVrMbw5Zdf6kc/+pH69u2r119/XUVFRZKkl156STfddJOkmrndr776qkzTlNvtVnZ2tj766CO/z/3ee++pf//+Gjt2rJKSkrRhwwZ5vd4z9k/fvn31wgsvyLIsud1urVy5UsnJyQ3+rBkZGfrggw+0fPly3y8Ngb4/J7Vp00bbt2+XVPPHz4cffihJ5/S9AtD0MEIMICKmT5+udevW6c4771RFRYVOnDihVq1aKTU1VePGjVNMTIx++tOf6oYbbpDL5dIVV1yhyy67TIWFhfrud7+rlJQUZWZmasGCBXrqqac0Z84cpaeny+12Ky0tTUOHDj3tdZcsWaJ169bJZrPJ6/Wqe/fuWrRokSSpbdu2euaZZzRv3jxVVVXJsizNmzdPHTt21IcffqjExETNmDFDxcXFuuyyy/TII49Ikvr06aO77rpLc+bMUbdu3erdB0lJSbLb7UpJSfGNPN50002aOXOm0tLS5HK51KVLFw0ZMuS07583b57++Mc/+rVdf/31SkpK0ltvvaX169fr/PPP10033aQ777zTN9Vhy5YtWrlypUzT1Pz589WqVSv17dtXWVlZmjhxomw2m+Lj4/Xss8/KZrPp9ttv19y5c5WRkSGv16vU1FQNGjRIhYWFeu6553T77bdr+vTpuvPOO5Weni6Px6Mf//jHevPNN2Wapq666irfcZmZmb5aZ82apUcffVTp6emqrq7Wddddd1Y3rcXHx+v666/X2rVrdc8990iSunTpUuf359urT2RmZuquu+7S4MGD1bFjR/Xp08e3ryHfKwBNm82q6zcoAIDP6tWr9cYbb2jhwoWRLuWcdOnSRe+//77atm0b6VIAoNFgygQAAACiGiPEAAAAiGqMEAMAACCqEYgBAAAQ1ZrkKhOmaaqsrExOp9NvDUsAAADgVJZlqbq6Wi1btpRh1B4PbpKBuKysTLt37450GQAAAGhCrrjiitM+/bNJBmKn0ymp5kN9ez3J5mL79u0NfioV6kZ/Bhf9GVz0Z3DRn8FFfwYPfRlcDe1Pt9ut3bt3+zLkqZpkID45TcLlcjXbx2g2188VKfRncNGfwUV/Bhf9GVz0Z/DQl8F1Nv1Z11RbbqoDAABAVCMQAwAAIKo1ySkTAAAAjZlpmiopKdHRo0fl9XrlcDi0c+fOSJfVbJypP2NjY9WxY8c65wuf9nzBKgwAAAA19u3bJ5vNpksuuUROp1Pl5eVq2bJlpMtqNsrKyk7bn5Zl6euvv9a+fft06aWX1vt8TJkAAAAIsrKyMl188cVyuVw8MyGMbDabLrjgAlVWVjbofQRiAACAEDjdAyAQemfzBwj/pwAAABDVCMQAAADN3L59+9SlSxe99957fu0DBgzQvn37Tvuew4cPKysrKxzlRRyBGAAAIAo4nU498MADKi0trdfxiYmJWrx4cYirahwIxAAAAI3E7sIj+mPOVs1e/L7+mLNVuwuPBO3cCQkJSk5O1hNPPFFr3/PPP6/U1FSlp6fr8ccfl9fr1b59+zRgwABJ0vr165WRkaERI0YoOztbVVVVmjFjhlauXOk7R2ZmprZu3Rq0esOJQAycg5L85dr72wn64jc3au9vJ6gkf3mkSwIANFG7C4/ohTc+1/Eyty5oFavjZW698MbnQQ3FM2fO1L/+9S+/qRP//Oc/tXHjRuXk5OjVV19VYWGhVqxY4fe+p59+Wn/5y1+0evVqXXzxxfriiy80cuRIrV27VpK0f/9+HTlyRFdeeWXQag0nAjFwlkryl+v4pjUyPW7J4ZLpcev4pjWEYgDAWXn746/UMtahlnFO2Ww2tYxzqmWsQ29//FXQrhEfH685c+b4TZ3YtGmThgwZori4ODkcDo0cOVLvv/++3/v69++vMWPGaN68eRo8eLC6du2q3r17q6ioSPv27dOaNWuUkZERtDrDjUAMnKXSLXmSYciwO2XYbDLsTskwatoBAGigw0fK1SLW/5lpLWIdOnykPKjX6du3r9/UCdM0ax3j8Xj8tmfNmqVnnnlGrVq10owZM7R27VrZbDYNGzZMr7/+uv7+978TiIFoZLorJeOUhz0ajpp2AAAaKLFtC5VX+gfR8kqPEtu2CPq1Tk6dKCoqUp8+ffT666+rsrJSHo9HOTk56tOnj+9Yj8ejQYMGqU2bNrr11luVkZHhe2zyiBEjtGLFCnXo0EGJiYlBrzNcCMTAWTJcsZLp/w+XTE9NOwAADfSzH35HZZUelVVUy7IslVVUq6zSo5/98DtBv9bJqRPV1dX66U9/qp/+9KcaOXKkhgwZoosuukjjx4/3HetwOJSdna2JEydqxIgR2rp1q285tg4dOqhDhw4aPnx40GsMJ0fgQwCcTnzPlJo5xKquGSk2PZJpKr5nSqRLAwA0QVd0aqvxg7vo7Y+/0uEj5Ups20LDf/I9XdGp7Tmfu2PHjtq4caNfW9++ffX5559LkqZMmaIpU6bU+Z60tDSlpaX57bcsS0VFRSopKdHAgQPPucZIIhADZ6ld/7GSauYSm+5KGa5YxfdM8bUDANBQV3RqG5QAHA5vvPGGZs+erdmzZ8vlckW6nHNCIAbOQbv+YwnAAIColJKSopSU5vGrKHOIAQAAENUIxAAAAIhqIQ3EpaWlSktL0759+2rt++KLL5SZmamhQ4fqlltu0bFjx0JZCgAAAHBaIQvEW7du1ZgxY7R3795a+yzL0q9+9StlZWVp3bp16tq1qxYtWhSqUgAAAIA6hSwQr1y5Ug899JASEhJq7duxY4datGihfv36SZImT56scePGhaoUAAAAoE42y7KsUF5gwIABWrp0qTp27Ohry83N1auvvqr27dtr586d6ty5sx544AG1bt26XuesqqrS9u3bQ1UyAADAOXE4HLrssssiXYbPgQMHlJaWpj/84Q9+T6EbMmSIFi9erIsuuui07ysuLtYjjzyiBQsWhLS+jz/+WL/+9a/1ne98R5Zlye1268c//rGmTJmiFi1aBNx/qj179tR6/LQkJSUlKSYmplZ7RJZd83g8+vDDD/XCCy+oe/fuevrpp/X444/r8ccfb9B56vpQTd3mzZvVq1evSJfRbNCfwUV/Bhf9GVz0Z3DRn2dv586datmypW+7rKzMb7sulfv/rdJP81V9rEjOVgmK79FfsRdffs71xMXFyel0au7cuVq3bp3i4+MlSYZhKC4urs7aWrZsqb/85S/nfP1AYmNj1b17dy1btkySVF1drfvuu0/z5s3Tk08+WWv/0aNHNXfuXN/+U7lcLl155ZW+7UCDqRFZZaJ9+/bq1KmTunfvLqnm6SeffvppJEqpt2W5OzRmVq6GzVinMbNytSx3R6RLAgAAzUjl/n/rm3+ukLfihOznXSBvxQl9888Vqtz/76CcPyEhQcnJyXriiSdOu//5559Xamqq0tPT9fjjj8vr9Wrfvn0aMGCAJGn9+vXKyMjQiBEjlJ2draqqKs2YMUMrV670nSMzM1Nbt2497fkzMzNPu9DC6TidTt19993Kzc3V8ePHG7y/oSISiK+++modOXJEu3btkiRt3LhR3bp1i0Qp9bIsd4dy8vfI7fHK5TTk9niVk7+HUAwAAIKm9NN8GTEtZMS2lM1mkxHbUkZMC5V+mh+0a8ycOVP/+te/9N577/m1/+Mf/9DGjRuVk5OjV199VYWFhVqxYoXfMU8//bT+8pe/aPXq1br44ov1xRdfaOTIkVq7dq0kaf/+/Tpy5IjfyOy5aN++vc4///zTLtBQn/0NEdZAnJWVpW3btik2NlbPPfecZs2apSFDhuiDDz7QzJkzw1lKg+QWFMpuN+S0GzJsNjnthux2Q7kFhZEuDQAANBPVx4pki/GfD2uLaaHqY0VBu0Z8fLzmzJmjBx54QKWlpb72TZs2aciQIYqLi5PD4dDIkSP1/vvv+723f//+GjNmjObNm6fBgwera9eu6t27t4qKirRv3z6tWbNGGRkZta55yy23KCMjQ9u3b9ekSZOUkZFR5yjyqWw22xmnxwbaX18hn0O8ceNG3+vFixf7Xl955ZVatWpVqC8fFBVVHrmc/n872A2bKqpqT9YGAAA4G85WCfJWnJAt9r/zea2qcjlb1V6x61z07du31tQJ0zRrHXfqTWmzZs3Srl279I9//EMzZszQ7bffroyMDA0bNkyvv/66/v73v+vPf/5zrfOcbMvMzNRvfvMbv4UWzqSkpEQnTpzQd7/7XR09evSM+88VT6qrh7gYh7ym/2IcXtNSXExE7kkEAADNUHyP/jKrymVWlsmyLJmVZTKryhXfo3/Qr3Vy6kRRUc3oc58+ffT666+rsrJSHo9HOTk5fqtReDweDRo0SG3atNGtt96qjIwM7dy5U5I0YsQIrVixQh06dFBiYmJQ6nO73Zo3b56GDx+uuLi4Bu9vKBJdPaQmd1JO/h5JNSPDXtOS12sqtV/nCFcGAACai9iLL1ebfqP9Vplo1XtoUFaZONXJqRO33HKLpJrpEDt37tTIkSPl8XjUt29fjR8/XocOHZJUs4xcdna2Jk6cqJiYGF1wwQW+1cE6dOigDh06aPjw4We85skVIuqyfft235QLr9erPn366O677z7t/urqaiUnJ/vtPxcE4nrITK254S+3oFAVVR7FxTiU2q+zrx0AACAYYi++PCQBuGPHjn7TWKWaqROff/65b3vKlCmaMmVKne9LS0tTWlqa337LslRUVKSSkhINHDjwrOvr3bu3Pvnkk3rvr+8ydvVFIK6nzNRuBGAAAIBveeONNzR79mzNnj1bLpcr0uWcNQIxAAAAzkpKSopSUlIiXcY546Y6AACAELAsK/BBCLqz6XcCMQAAQJA5nU5VVFREuoyoVF1dLYejYZMgCMQAAABBlpCQoP3796u8vJyR4jAyTVOHDx9Wq1atGvQ+5hADAAAE2fnnny9JOnDggKqrq+V2u5v0TWeNzZn6s2XLlmrXrl2DzkcgBgAACIHzzz/fF4w3b96sK6+8MsIVNR/B7k+mTAAAACCqEYgBAAAQ1QjEAAAAiGoEYgAAAEQ1AjEAAACiGoEYAAAAUY1ADAAAgKhGIAYAAEBUIxADAAAgqhGIAQAAENV4dDMQBUryl6t0S55Md6UMV6zie6aoXf+xkS4LAIBGgUAMNHMl+ct1fNMayTAkh0umx12zLRGKAQAQUyaAZq90S55kGDLsThk2mwy7UzKMmnYAAEAgBpo7010pGaf8GGQ4atoBAACBGGjuDFesZHr8G01PTTsAACAQA81dfM8UyTRleqtlWpZMb7VkmjXtAACAm+qA5u7kjXOsMgEAwOkRiIEo0K7/WAIwAAB1YMoEAAAAohqBGAAAAFGNQAwAAICoRiAGAABAVCMQAwAAIKqxykSQLMvdodyCQlVUeRQX41BqcidlpnaLdFkAAAAIIKQjxKWlpUpLS9O+ffvqPOadd97RgAEDQllGyC3L3aGc/D1ye7xyOQ25PV7l5O/RstwdkS4NAAAAAYQsEG/dulVjxozR3r176zympKRETzzxRKhKCJvcgkLZ7YacdkOGzSan3ZDdbii3oDDSpQEAACCAkAXilStX6qGHHlJCQkKdx8yaNUu33357qEoIm4oqj+yGza/NbthUUeWJUEUAAACoL5tlWVYoLzBgwAAtXbpUHTt29GtfunSpjh49qhEjRmjChAnauHFjvc9ZVVWl7du3B7vUs/b4qv3yeC05vhWKPaYlh92mmT+/OIKVAQAA4KSkpCTFxMTUao/ITXW7d+/Wm2++qSVLlujQoUNnfZ66PlS4DT0cq5z8PTJlk92wyWtasixLQ6/7nnr1aviNdZs3b1avXr1CUGl0oj+Di/4MLvozuOjP4KI/g4e+DK6G9megwdSIBOK8vDwVFxdr5MiRqq6uVlFRkcaOHavly5dHopxzdnI1Cb9VJvp1ZpUJAACAJiAigTg7O1vZ2dmSpH379mnChAlNNgyflJnajQAMAADQBIX1wRxZWVnatm1bOC8JAAAAnFHIR4i/fbPc4sWLa+3v2LFjg26oAwAAAIKJRzcDAAAgqhGIAQAAENUIxAAAAIhqBGIAAABENQIxAAAAohqBGAAAAFGNQAwAAICoRiAGAABAVCMQAwAAIKoRiAEAABDVCMQAAACIagRiAAAARDUCMQAAAKIagRgAAABRjUAMAACAqEYgBgAAQFQjEAMAACCqEYgBAAAQ1QjEAAAAiGoEYgAAAEQ1AjEAAACiGoEYAAAAUY1ADAAAgKhGIAYAAEBUIxADAAAgqhGIAQAAENUIxAAAAIhqBGIAAABENQIxAAAAohqBGAAAAFGNQAwAAICoRiAGAABAVCMQAwAAIKqFNBCXlpYqLS1N+/btq7Vvw4YNysjI0NChQzVlyhQdO3YslKUAAAAApxWyQLx161aNGTNGe/furbWvtLRUs2fP1qJFi7Ru3Tp16dJFCxYsCFUpAAAAQJ1CFohXrlyphx56SAkJCbX2VVdX66GHHlJiYqIkqUuXLjp48GCoSgEAAADq5AjViefOnVvnvjZt2uj666+XJFVWVmrRokXKzMwMVSkAAABAnWyWZVmhvMCAAQO0dOlSdezYsda+EydO6LbbblPHjh312GOP1fucVVVV2r59ezDLBNAIxHyer5ivPpHN65Zld6nqO1erqkv/SJcFAGgmkpKSFBMTU6s9ZCPEgRQVFemWW25Rnz59dN99953VOer6UE3d5s2b1atXr0iX0WzQn8EVqv4syV+u44UfSoYhOWMk06MWhR/qwg4XqV3/sUG/XmPB9zO46M/goj+Dh74Mrob2Z6DB1Igsu+b1ejV58mTdcMMNuv/++2Wz2SJRBoBGpHRLnmQYMuxOGTabDLtTMoyadgAAQiisI8RZWVnKzs7WoUOH9Nlnn8nr9eqNN96QVDPae6Z5xwCaN9NdKTlc/o2Go6YdAIAQCnkg3rhxo+/14sWLJUndu3fXrl27Qn1pAE2I4YqV6XFLdud/G02PDFds5IoCAEQFnlQHoFGI75kimaZMb7VMy5LprZZMs6YdAIAQithNdQDwbSdvnCvdkifTXSnDFav4ninN+oY6AEDjQCAG0Gi06z+WAAwACDumTAAAACCqEYgBAAAQ1QjEAAAAiGoEYgAAAEQ1AjEAAACiGoEYAAAAUY1ADAAAgKjGOsRhtCx3h3ILClVR5VFcjEOpyZ2Umdot0mUBAABENQJxmCzL3aGc/D2y2w25nIbcHq9y8vdIEqEYAAAggpgyESa5BYWy2w057YYMm01OuyG73VBuQWGkSwMAAIhqBOIwqajyyG7Y/Nrshk0VVZ4IVQQAAACJQBw2cTEOeU3Lr81rWoqLYdYKAABAJNUrEB86dEj/+Mc/5PV6deDAgVDX1CylJneS12uq2mvKtCxVe015vaZSkztFujQAAICoFjAQv/POOxo9erQefvhhff311xoyZIg2bNgQjtqalczUbhrZ/zK5HHa5q025HHaN7H8ZN9QBAABEWMDf65977jmtXLlSkyZNUkJCgpYvX6577rlHAwcODEd9zUpmajcCMAAAQCMTcITY6/UqISHBt921a1fZbLYzvAMAAABoOgIG4ri4OB04cMAXgj/++GPFxMSEvDAAAAAgHAJOmbjzzjs1ceJEFRcX6xe/+IX27t2rBQsWhKM2AAAAIOQCBuKePXtq5cqV+uSTT2Sapq688kq1bds2HLUBAAAAIRcwEO/YsUOS1K5dO0nSwYMHdfDgQXXrxs1hAAAAaPoCBuKpU6f6XldXV6u4uFhJSUlatWpVSAsDAHYW4MoAACAASURBVAAAwiFgIN64caPf9gcffKD169eHrCAAaOxK8perdEueTHelDFes4numqF3/sZEuCwBwlhr86ObevXv7plEAQLQpyV+u45vWyPS4JYdLpset45vWqCR/eaRLAwCcpXrPIZYky7K0fft2VVZWhrQoAGisSrfkSYYhw+6sabA7ZapapVvyGCUGgCaqQXOIbTab2rZtq9mzZ4eyJgBotEx3peRw+Tcajpp2AECT1OA5xAAQzQxXbM10iZMjxJJkemS4YiNXFADgnNQZiB999NEzvnHWrFlBLwYAGrv4nik1c4hVLRkOyfRIpqn4nimRLg0AcJbqDMStW7cOZx0A0CScnCfMKhMA0HzUGYhvv/32Ot9UXl4ekmIAoClo138sARgAmpGAc4g3bNigZ555RuXl5bIsS6Zp6ujRo/rkk0/CUR8AAAAQUgED8bx58zRt2jS99NJLysrK0oYNG9SyZctw1AYAAACEXMAHc8TFxSk1NVVXXXWVYmJiNHv2bL3zzjv1OnlpaanS0tK0b9++Wvt27typESNGaPDgwbr//vvl8XgaXDwAAABwrgIG4piYGLndbn33u9/Vzp07ZRiGbDZbwBNv3bpVY8aM0d69e0+7f8aMGXrwwQf1xhtvyLIsrVy5ssHFAwAAAOcqYCAeMGCAJk2apH79+mnJkiWaOnWq2rRpE/DEK1eu1EMPPaSEhIRa+/bv36/KykpdddVVkqQRI0YoLy/vLMoHAAAAzk2dc4hvu+02jR8/XpMnT9bQoUOVmJio5557Th9//LHS0tICnnju3Ll17isqKlL79u192+3bt9fhw4cbWHrzsyx3h3ILClVeWa0Wrx5WanInZaZ2i3RZAAAAzVqdgbhXr1565JFHJEnjxo3TsGHD1K1bN3Xrdu4BzTRNv2kXlmXVaxrGqbZv337OtTQWb3/yjd7bVSbDkBx2qdJdrVUb9+jggYP62dWBR+RxZps3b450Cc0K/Rlc9Gdw0Z/BRX8GD30ZXMHszzoD8cSJEzVx4kR9+OGHWrlypZ577jkNHjxY48aN0+WXX35OF73wwgtVXFzs2y4pKTnt1IpAkpKSFBMTc061NBZPvZorh8OQ027I6/XK6bCr2mvqk71u3f3LXpEur0nbvHmzevWiD4OF/gwu+jO46M/goj+Dh74Mrob2Z1VV1RkHUgMuu3bNNdfommuu0dGjR7V27Vrdc889io+P19KlS+tdxKkuvvhixcTE+D7M2rVr1a9fv7M+X3NQUeWRy+k/pdtu2FRRxeobAAAAoRTwprqTXC6XWrRooZYtW+qbb745q4tlZWVp27ZtkqSnnnpKv/nNb5SSkqLy8nJNmDDhrM7ZXMTFOOQ1Lb82r2kpLibg3ywAAAA4BwHT1ubNm7Vq1Sq9/fbbSk5O1tSpU3XNNdfU+wIbN270vV68eLHv9fe//32tWrWqgeU2X6nJnZSTv6dmw7Jkek15vaZS+3WObGEAAADNXJ2BePHixcrJyVFFRYVGjRql11577azm+aJ+Tq4mUbPKhKkWsXal9uvMKhMAAAAhVmcgfvfddzVt2jRdf/31stvt4awpamWmdlNmajcm3gMAAIRRnYH4XG6aAwAAAJqKet9UBwAAADRHBGIAAABENQIxAAAAolrAZdc++eQT/e53v9OxY8dkWf9dJ3f9+vUhLQwAAAAIh4CB+MEHH9SIESP0gx/8QDabLRw1AQAAAGETMBA7HA7dfPPN4agFAAAACLuAc4gvv/xyff755+GoBQAAAAi7gCPEX331lUaOHKmLLrpIMTExvnbmEAMAAKA5CBiIp0+fHo46AAAAgIgIOGXimmuuUUxMjD788EO99957vjYAAACgOQgYiNesWaPs7GwdO3ZMZWVluvPOO7Vy5cpw1AYAAACEXMApE0uWLNErr7yihIQESVJWVpZuueUW3XjjjSEvDgAAAAi1gCPEpmn6wrAkJSYmyjB4wB0AAACah4DJtnXr1tqwYYNve8OGDWrVqlVIiwIAAADCJeCUiQceeEBTpkzRnDlzJElOp1PPPvtsyAsDAAAAwiFgIL788suVl5envXv3yuv1qnPnznI4Ar4NAAAAaBLqTLaLFy9WVlaW5syZI5vNVmv/rFmzQloYAAAAEA51BuLzzjtPktSmTZuwFQMAAACEW52BePTo0ZKktm3bauzYsX77Fi1aFNqqAAAAgDCpMxC/9NJLqqys1JIlS1RVVeVrr66u1ooVKzRp0qSwFAgAAACEUp2B2OFwaPfu3aqsrNTu3bt97Xa7XTNnzgxLcQAAAECo1RmIR40apVGjRmnDhg0aOHBgOGsCAAAAwibg+mk9e/bUkiVLVFZWJsuyZJqmCgsL9dvf/jYc9QEAAAAhFTAQT5s2TbGxsdqzZ4+Sk5NVUFCgXr16haM2AAAAIOQCBuIDBw5ow4YNmj17tkaPHq2pU6dqypQp4agNAHAOSvKXq3RLnkx3pQxXrOJ7pqhd/7GB3wgAUcYIdEC7du0kSZdccol2796txMREeTyekBcGADh7JfnLdXzTGpket+RwyfS4dXzTGpXkL490aQDQ6AQMxBdccIH+9Kc/KSkpSTk5Odq4caMqKyvDURsA4CyVbsmTDEOG3SnDZpNhd0qGUdMOAPATMBA/8sgjcrlc+uEPf6ikpCQ988wzmjFjRjhqAwCcJdNdKRmnzIozHDXtAAA/AQPxG2+8oQkTJkiSZsyYoTVr1uiLL74IeWEAgLNnuGIl85Tpbaanph0A4Icn1QFAMxTfM6VmDrGqa0aKTY9kmorvmRLp0gCg0eFJdQDQDJ1cTYJVJgAgsHo9qe7aa69Vy5YtVVVVpdLSUl1wwQX1Ovn69ev1xz/+UR6PRzfddJPGjRvnt3/Hjh168MEHVV1drQ4dOujJJ5/U+eeff26fCAAgqSYUE4ABILCAc4jdbreGDx8uqWZN4rS0NG3cuDHgiQ8fPqz58+dr+fLlWrNmjV5++WXt2bPH75i5c+cqOztb69at06WXXqo///nPZ/kxAAAAgLMTMBA///zzWrp0qSTp0ksv1erVq7VgwYKAJy4oKFCfPn3UunVrtWjRQoMHD1Zenv9yP6ZpqqysTJJUUVGh2Fhu9gAAAEB4BQzEpmnqwgsv9G136NBBpmkGPHFRUZHat2/v205ISNDhw4f9jpk5c6ZmzZqlvn37qqCgQKNHj25I7QAAAMA5C/jo5rZt22rFihX6+c9/LpvNpldffdX39LozMU1TNpvNt21Zlt92ZWWl7r//fi1ZskQ9evTQX//6V91zzz1atGhRvYvfvn17vY9tajZv3hzpEpoV+jO46M/goj+Di/4MLvozeOjL4ApmfwYMxI888ojuuOMOPfLII7LZbOrWrZt++9vfBjzxhRdeqI8//ti3XVxcrISEBN/27t27FRMTox49ekiSfvGLX+j3v/99g4pPSkpSTExMg97TFGzevFm9evWKdBnNBv0ZXPRncNGfwUV/Bhf9GTz0ZXA1tD+rqqrOOJAaMBBfcsklWr16tY4dOya73a74+Ph6XTg5OVkLFizQkSNHFBcXpzfffFNz5szx7e/UqZMOHTqkL774Qp07d9bbb7+t7t271+vcAAAAQLAEnENcVlamhx9+WNnZ2fJ4PHrwwQd9N8KdSWJioqZPn64JEyZo2LBhSktLU48ePZSVlaVt27apVatW+s1vfqNp06YpPT1dOTk5euyxx4LyoQAAAID6CjhC/OijjyohIUFff/21YmJiVFpaqgcffLBe0ybS09OVnp7u17Z48WLf65/85Cf6yU9+chZlR6dluTuUW1CoiiqP4mIcSk3upMzUbpEuCwAAoEkLOEK8c+dOTZ8+XQ6HQ3FxcXrqqae0c+fOcNSGb1mWu0M5+Xvk9njlchpye7zKyd+jZbk7Il0aAABAkxYwEBuG/yFer7dWG0Ivt6BQdrshp92QYbPJaTdktxvKLSiMdGkAAABNWsApEz/60Y/05JNPqrKyUu+++65efPFF9e7dOxy14VsqqjxyOf3/ELEbNlVUeSJUEQAAQPMQcKj3rrvuUosWLXTeeedp/vz56tKli+6+++5w1IZviYtxyGtafm1e01JcTMC/aQAAAHAGAdOU0+nUbbfdpvHjxzdo2TUEV2pyJ+Xk75FUMzLsNS15vaZS+3WOcGUAAABNW8BA/J///Ed33323du3aJUm6+uqrNW/ePF100UUhLw7/dXI1Cb9VJvp1ZpUJAE1eSf5ylW7Jk+mulOGKVXzPFLXrPzbSZQGIIgED8X333adRo0Zp5MiRsixLL7/8su6//3799a9/DUd9+JbM1G4EYADNSkn+ch3ftEYyDMnhkulx12xLhGIAYRNwDnFFRYVGjx4tp9Mpl8ulzMxMlZSUhKM2AEAzV7olTzIMGXanDJtNht0pGUZNOwCEScBA3LlzZ23ZssW3vXv3bnXs2DGkRQEAooPprpSMU36sNBw17QAQJgGnTBw4cECZmZnq0qWLHA6HPvvsM7Vv3973BLr169eHvEgAQPNkuGJletyS3fnfRtMjwxUbuaIARJ2Agfiuu+4KRx0AgCgU3zNFxzetkanqmpFi0yOZpuJ7pkS6NABRJGAgPnjwoDIyMnzbXq9X8+fPJygDAM7ZyRvnWGUCQCQFDMQLFy7Uli1bdP/996uoqEjTp09X27Ztw1EbACAKtOs/lgAMIKIC3lS3atUqeTwejRw5UuPGjdONN96ohQsXhqM2AAAAIOQCBmKbzSaXy6WKigqZpimbzRaOugAAAICwCBiIhw4dqtLSUq1du1YvvPCCVqxYocmTJ4ejNgAAACDkAgbi2267TU8++aRatmypTp066aWXXlLnzp3DURsAAAAQcnUG4gMHDkiShg0b5tfudDrVp0+f0FYFAAAAhEmdgfi2227zvZ46darfvvnz54euIpyTZbk7NGZWrobNWKcxs3K1LHdHpEsCAABo1Opcds2yLN/rr776qs59aDyW5e5QTv4e2e2GXE5Dbo9XOfl7JEmZqd0iXB0AAEDjVOcI8bdXkzh1ZQlWmmiccgsKZbcbctoNGTabnHZDdruh3ILCSJcGAADQaNUZiBkFbnoqqjyyG/5/rNgNmyqqPBGqCAAAoPGrc8qEaZo6duyYLMuS1+v1vZZqHt+MxicuxiG3xyvD/t9Q7DUtxcUEfCAhAABA1KozKe3evVt9+vTxheDevXv79jFlonFKTe7kmzNsN2zympa8XlOp/VgmDwAAoC51BuJdu3aFsw4Ewckb53ILClVR5VFcjEOp/TpzQx0AAMAZ8Ft6M5OZ2o0ADAAA0AABn1QHAAAANGcEYgAAAEQ1AjEAAACiGoEYAAAAUY1ADAAAgKhGIAYAAEBUIxADAAAgqhGIAQAAENVCGojXr1+v1NRUDRo0SC+++GKt/V988YUyMzM1dOhQ3XLLLTp27FgoywEAAABqCVkgPnz4sObPn6/ly5drzZo1evnll7Vnzx7ffsuy9Ktf/UpZWVlat26dunbtqkWLFoWqHAAAAOC0QhaICwoK1KdPH7Vu3VotWrTQ4MGDlZeX59u/Y8cOtWjRQv369ZMkTZ48WePGjQtVOQAAAMBphSwQFxUVqX379r7thIQEHT582Lf9f//3f2rXrp3uu+8+DR8+XA899JBatGgRqnIAAACA03KE6sSmacpms/m2Lcvy2/Z4PPrwww/1wgsvqHv37nr66af1+OOP6/HHH6/3NbZv3x7UmhuTzZs3R7qEZoX+DC76M7joz+CiP4OL/gwe+jK4gtmfIQvEF154oT7++GPfdnFxsRISEnzb7du3V6dOndS9e3dJUlpamrKzsxt0jaSkJMXExASn4EZk8+bN6tWrV6TLaDboz+CiP4OL/gwu+jO46M/goS+Dq6H9WVVVdcaB1JBNmUhOTtb777+vI0eOqKKiQm+++aZvvrAkXX311Tpy5Ih27dolSdq4caO6desWqnIAAACA0wrZCHFiYqKmT5+uCRMmqLq6Wj//+c/Vo0cPZWVlKTs7W927d9dzzz2nWbNmqaKiQhdeeKHmzZsXqnIAADgnJfnLVbolT6a7UoYrVvE9U9Su/9hIlwUgCEIWiCUpPT1d6enpfm2LFy/2vb7yyiu1atWqUJYAAMA5K8lfruOb1kiGITlcMj3umm2JUAw0AzypDgCAAEq35EmGIcPulGGzybA7JcOoaQfQ5BGIAQAIwHRXSsYpP6oajpp2AE0egRgAgAAMV6xkevwbTU9NO4Amj0AMAEAA8T1TJNOU6a2WaVkyvdWSada0A2jyQnpTHQAAzcHJG+dYZQJongjEAADUQ7v+YwnAQDPFlAkAAABENQIxAAAAohqBGAAAAFGNQAwAAICoRiAGAABAVCMQAwAAIKqx7FqUWZa7Q7kFhaqo8iguxqHU5E7KTO0W6bIAAAAihkAcRZbl7lBO/h7Z7YZcTkNuj1c5+XskiVAMAM1ESf5yHiACNBBTJqJIbkGh7HZDTrshw2aT027IbjeUW1AY6dIAAEFQkr9cxzetkelxSw6XTI9bxzetUUn+8kiXBjRqBOIoUlHlkd2w+bXZDZsqqjwRqggAEEylW/Ikw5Bhd8qw2WTYnZJh1LQDqBOBOIrExTjkNS2/Nq9pKS6GmTMA0ByY7krJOOXfdMNR0w6gTgTiKJKa3Eler6lqrynTslTtNeX1mkpN7hTp0gAAQWC4YiXzlF/9TE9NO4A6EYijSGZqN43sf5lcDrvc1aZcDrtG9r+MG+oAoJmI75kimaZMb7VMy5LprZZMs6YdQJ34rTzKZKZ2IwADQDN1cjUJVpkAGoZADABAM9Ku/1gCMNBATJkAAABAVCMQAwAAIKoRiAEAABDVCMQAAACIagRiAAAARDVWmUAty3J3KLegUBVVHsXFOJSa3Iml2gAAQLNFIIafZbk7lJO/R3a7IZfTkNvjVU7+HkkiFAMAgGaJKRPwk1tQKLvdkNNuyLDZ5LQbstsN5RYURro0AACAkCAQw09FlUd2w+bXZjdsqqjyRKgiAACA0CIQw09cjENe0/Jr85qW4mKYXQMAAJonAjH8pCZ3ktdrqtpryrQsVXtNeb2mUpM7Rbo0AACAkGDYD35O3jjnt8pEv87cUAcAAJotAjFqyUztRgAGAABRI6RTJtavX6/U1FQNGjRIL774Yp3HvfPOOxowYEAoSwEAAABOK2QjxIcPH9b8+fO1evVquVwujR49Wr1799Zll13md1xJSYmeeOKJUJUBAAAAnFHIRogLCgrUp08ftW7dWi1atNDgwYOVl5dX67hZs2bp9ttvD1UZAAAAwBmFbIS4qKhI7du3920nJCTo008/9Ttm6dKl+sEPfqArr7zyrK6xffv2c6qxMdu8eXOkS2hW6M/goj+Di/4MLvozuOjP4KEvgyuY/RmyQGyapmy2/z7gwbIsv+3du3frzTff1JIlS3To0KGzukZSUpJiYmLOudbGZvPmzerVq1eky2g26M/goj+Di/4MLvozuOjP4KEvg6uh/VlVVXXGgdSQTZm48MILVVxc7NsuLi5WQkKCbzsvL0/FxcUaOXKkJk2apKKiIo0dOzZU5QAAAACnFbIR4uTkZC1YsEBHjhxRXFyc3nzzTc2ZM8e3Pzs7W9nZ2ZKkffv2acKECVq+fHmoygEAAI1ISf5ylW7Jk+mulOGKVXzPFLXrz8AYIiNkI8SJiYmaPn26JkyYoGHDhiktLU09evRQVlaWtm3bFqrLAgCARq4kf7mOb1oj0+OWHC6ZHreOb1qjknwGxhAZIX0wR3p6utLT0/3aFi9eXOu4jh07auPGjaEsBQAANBKlW/Ikw5Bhd9Y02J0yVa3SLXmMEiMiQvpgDgAAgFOZ7krJOGVMznDUtAMRQCAGAABhZbhiJdPj32h6atqBCCAQAwCAsIrvmSKZpkxvtUzLkumtlkyzph2IgJDOIQYAADjVyXnCrDKBxoJADAAAwq5d/7EEYDQaTJkAAABAVCMQAwAAIKoRiAEAABDVmEMMAABQBx4xHR0IxAAAAKdx8hHTMgy/R0xLIhQ3M0yZAAAAOI1vP2LasNlqHjVtGDXtaFYIxAAAAKfBI6ajB1Mm0GDLcncot6BQFVUexcU4lJrcSZmp3SJdFgAAQWW4YmV63JLd+d9GHjHdLDFCjAZZlrtDOfl75PZ45XIacnu8ysnfo2W5OyJdGgAAQcUjpqMHgRgNkltQKLvdkNNuyLDZ5LQbstsN5RYURro0AACCql3/sTq/zzAZDpfkcctwuHR+n2HcUNcMMWUCDVJR5ZHL6f93lN2wqaLKE6GKAAAIHR4xHR0YIUaDxMU45DUtvzavaSkuhr+tAABA00QgRoOkJneS12uq2mvKtCxVe015vaZSkztFujQAAICzwrAeGuTkahJ+q0z068wqEwAAoMkiEKPBMlO7EYABAECzwZQJAAAARDVGiBF0PLgDAAA0JQRiBNXJB3fY7YbfgzskEYoBAECjxJQJBBUP7gAAAE0NgRhBVVHlkd2w+bXx4A4AANCYEYgRVDy4AwAANDUEYgQVD+4AAABNDcN2CCoe3AEAAJoaAjGCjgd3AACApoQpEwAAAIhqjBADAAA0cSX5y1W6JU+mu1KGK1bxPVPUrv/YSJfVZBCIAQAAmrCS/OU6vmmNZBiSwyXT467ZlgjF9cSUCQAAgCasdEueZBgy7E4ZNpsMu1MyjJp21AuBGAAAoAkz3ZWSccqP/oajph31EtJAvH79eqWmpmrQoEF68cUXa+3fsGGDMjIyNHToUE2ZMkXHjh0LZTkAAADNjuGKlcxTnghremraUS8hC8SHDx/W/PnztXz5cq1Zs0Yvv/yy9uzZ49tfWlqq2bNna9GiRVq3bp26dOmiBQsWhKocAACAZim+Z4pkmjK91TItS6a3WjLNmnbUS8gCcUFBgfr06aPWrVurRYsWGjx4sPLy/juXpbq6Wg899JASExMlSV26dNHBgwdDVQ4AAECz1K7/WJ3fZ5gMh0vyuGU4XDq/zzBuqGsAm2VZVihOvHDhQpWXl2v69OmSpFdeeUWffvqp5syZU+vYyspKjR07VpmZmRo+fHjAc1dVVWn79u1BrxkAAAChE/N5vmK++kQ2r1uW3aWq71ytqi79w3b9pKQkxcTE1GoP2bJrpmnKZrP5ti3L8ts+6cSJE7rtttv0/e9/v15h+Nvq+lBN3ebNm9WrV69Il9Fs0J/BRX8GF/0ZXPRncNGfwUNf/v/l4Qo/rFkezhkjmR61KPxQF3a4qMGj2Q3tz0CDqSGbMnHhhRequLjYt11cXKyEhAS/Y4qKijR27Fh16dJFc+fODVUpAAAAiLDGvDxcyAJxcnKy3n//fR05ckQVFRV688031a9fP99+r9eryZMn64YbbtD9999/2tFjAAAANA+NeXm4kE2ZSExM1PTp0zVhwgRVV1fr5z//uXr06KGsrCxlZ2fr0KFD+uyzz+T1evXGG29IqpkCwUgxAABA82O4YmV63JLd+d/GRrI8XEgf3Zyenq709HS/tsWLF0uSunfvrl27doXy8gAAAGgk4num6PimNTJVXTNSbHoazfJwIQ3EAAAAgCTfjXOlW/JkuitluGIV3zOlUSwPRyBGRCzL3aHcgkJVVHkUF+NQanInZaZ2i3RZAAAghNr1H9soAvCpCMQIu2W5O5STv0d2uyGX05Db41VOfs1TDAnFAAAg3EK2ygRQl9yCQtnthpx2Q4bNJqfdkN1uKLegMNKlAQCAKEQgRthVVHlkN/yX2bMbNlVUeSJUEQAAiGYEYoRdXIxDXtP/ieFe01JcDDN4AABA+BGIEXapyZ3k9Zqq9poyLUvVXlNer6nU5E6RLg0AAEQhhuQQdidvnPNbZaJfZ78b6liFAgAAhAuBGBGRmdqtzoDLKhQAACCcmDKBRodVKAAAQDgRiNHosAoFAAAIJwIxGh1WoQAAAOFEIEajwyoUAAAgnBhyQ6NTn1UoAAAAgoVAjEbpTKtQAAAABBNTJgAAABDVCMQAAACIagRiAAAARDUCMQAAAKIagRgAAABRjUAMAACAqEYgBgAAQFQjEAMAACCqEYgBAAAQ1QjEAAAAiGpN8tHNlmVJktxud4QrCZ2qqqpIl9Cs0J/BRX8GF/0ZXPRncNGfwUNfBldD+vNkZjyZIU9ls+ra04idOHFCu3fvjnQZAAAAaEKuuOIKnXfeebXam2QgNk1TZWVlcjqdstlskS4HAAAAjZhlWaqurlbLli1lGLVnDDfJQAwAAAAECzfVAQAAIKoRiAEAABDVCMQAAACIagRiAAAARDUCMQAAAKIagRgAAABRjUAMAACAqEYgbgRKS0uVlpamffv2SZIKCgr+X3v3H1N12f9x/Hn4IaNhTUrBiKiwH44puLA6g0k4I+CIh9AVaFqRKzbjl2VhtnKYhWcUidmCRWhrDcIOQxjRCGVTIKUc0MofzQRJiE5i/OicOIdzru8f9+7znd/7/t56n3O40Zv34y8+5/A5573XPtc+73Oda+ciJSWFhIQESkpKprm668v777+PTqdDp9NhMBgAydMdu3fvJjk5GZ1OR2VlJSB5esKuXbsoKCgAJE93rF+/Hp1Oh16vR6/X093dLXm64dChQ6SlpZGUlMSbb74JyPXpqpqaGud1qdfruf/++yksLJQ83VBXV+e8v+/atQvw8PWpxLTq6upSK1euVBEREaq/v19ZLBYVFxenzp8/r2w2m8rMzFStra3TXeZ1oa2tTT3xxBNqYmJCWa1WtWHDBlVfXy95uujYsWMqPT1d2Ww2ZbFYVHx8vDp58qTk6ab29nb14IMPqldeeUXGuxscDoeKjY1VNpvN+Zjk6brz58+r2NhYNTg4qKxWq8rIyFCtra2SpwecOXNGPfLII2pgYEDydJHZbFZLly5VFy9eVDabTa1Zs0a1tLR4NE+ZIZ5mn3/+OW+88Qbz5s0DoKenh7CwXRokiQAACLxJREFUMEJDQ/Hx8SElJYWmpqZprvL6MHfuXAoKCpg1axa+vr6Eh4fT29srebrogQce4JNPPsHHx4eLFy9it9sZHR2VPN3wxx9/UFJSQlZWFiDj3R0///wzAJmZmaxatYpPP/1U8nRDc3MzycnJBAcH4+vrS0lJCf7+/pKnB2zfvp38/Hz6+/slTxfZ7XYcDgcWi4XJyUkmJycJCAjwaJ7SEE+znTt3Eh0d7Tz+7bffmDt3rvN43rx5DA0NTUdp1527776bqKgoAHp7e/nyyy/RaDSSpxt8fX0pLS1Fp9Oh1Wrl+nTT66+/Tn5+PjfeeCMg490do6OjaLVa9u7dy759+6iqqmJgYEDydFFfXx92u52srCz0ej2fffaZXJ8e0N7ezl9//UVSUpLk6YaAgAByc3NJSkoiLi6OkJAQj+cpDfE1xuFwoNFonMdKqcuOxZX99NNPZGZm8vLLLxMaGip5uiknJ4eOjg4GBwfp7e2VPF1UU1PD/Pnz0Wq1zsdkvLtuyZIlGAwGZs+eTWBgIGvWrKG0tFTydJHdbqejo4O33nqL6upqenp66O/vlzzdVFVVxTPPPAPIeHfHqVOn+OKLLzh8+DBHjhzBy8vL4/cjH08UKjwnODgYk8nkPDaZTM7lFOLKvvvuO3Jycnj11VfR6XQcP35c8nTR2bNnsVqtLFy4EH9/fxISEmhqasLb29v5P5Ln1WtsbMRkMqHX6xkZGcFsNnPhwgXJ00XffvstNpvN+QFDKUVISIiMdxfdcsstaLVaAgMDAVixYoWMdzdZrVY6OzspKioC5P7ujqNHj6LVarn55psBSEtLo6KiwqPXp8wQX2MiIyM5d+6c8+urhoYGli1bNt1lXRcGBwfZtGkTxcXF6HQ6QPJ0xy+//MJrr72G1WrFarXS0tJCenq65OmiyspKGhoaqKurIycnh+XLl/PRRx9Jni4aGxvDYDAwMTHB+Pg4tbW1bN68WfJ0UXx8PEePHmV0dBS73c6RI0dITEyUPN1w+vRp7rjjDm644QZA7kfuuO+++2hvb8dsNqOU4tChQx7PU2aIrzF+fn4UFRWRnZ3NxMQEcXFxJCYmTndZ14WKigomJiacn8YB0tPTJU8XxcXF0dPTQ2pqKt7e3iQkJKDT6QgMDJQ8PUTGu+vi4+Pp7u4mNTUVh8PB2rVrWbJkieTposjISDZu3MjatWux2WzExMSQkZHBXXfdJXm6qL+/n+DgYOexjHfXxcbG8uOPP5KWloavry+LFi0iOzubmJgYj+WpUUopD9YshBBCCCHEdUWWTAghhBBCiBlNGmIhhBBCCDGjSUMshBBCCCFmNGmIhRBCCCHEjCYNsRBCCCGEmNHkZ9eEEGIKHThwgOrqav7880+sViuhoaHk5eURGRl5xXMzMzMpLi52bpZwNQoKCmhra3OeY7PZiI6OJjs7+7JtTv9dra2tdHd3k5ubi9Fo5KuvvqKsrMzl1xNCiGuJNMRCCDFF3n33XTo7O3nvvfcICQkBoKOjg+effx6j0citt976L89va2tz6X2ffvppnn32WeBvO7iVlZWxceNGjEbjZTs7/Tu+//57RkZGXDpXCCGuddIQCyHEFPj999/Zv38/zc3Nl20nqtVqKSgowGKxAHD48GHKysqwWq0MDw+TmppKXl4eW7duBeCpp56ivLwcLy8vCgsLGRwcxGazodPpyMrKumIdGo2GrKwsamtraWtrY9myZZw4cYLi4mIsFgteXl688MILxMfHYzQaaWpqwuFwMDAwQFBQEEVFRfz6669UVVVht9uZPXs2YWFhmEwmnnvuOQYHB/H29uadd94hPDx8asIUQogpJmuIhRBiCnR1dREeHn5ZM/x3qamphIeHo5Ti448/pqioCKPRSHV1NeXl5QwPD/P2228DsH//fubPn8+WLVtYvXo1RqORAwcO0N7eTmNj41XXc++993LmzBlGRkbYunUrBoOB2tpaPvjgA7Zv387AwAAAnZ2dbNu2jcbGRiIiIti5cyeRkZGkp6eTnJxMfn4+8LdduLZt20Z9fT3R0dFUVFR4IDUhhJgeMkMshBBT4P9uAjo+Ps66desAMJvNJCUlsXnzZj788ENaW1tpaGjg7NmzKKWcs8d/Zzab6ezsZGRkhN27dzsfO3XqFMnJyVdVj0ajwd/fn66uLkwmE5s2bbrsudOnTwMQExPDnXfeCcDjjz+OXq//p6+3ePFiwsLCAFi4cCHNzc1XVYcQQlyLpCEWQogpsHjxYs6dO8elS5eYM2cOAQEB1NXVAbBnzx4uXbqE2WzmscceY8WKFURHR7N69Wq+/vrrf2imHQ4HSimqqqrw9/cHYHh4GD8/v6uqRSnFDz/8wJNPPsnY2Bjh4eHU1NQ4nx8aGiIwMJD6+vrL1hg7HI7/d82xj8//3j40Gs0/1CyEENcTWTIhhBBTICgoiA0bNpCbm+tcjgBw4cIFTpw4gZeXF319fYyPj5OXl8fy5cs5duwYVqsVh8MBgLe3N5OTkwQEBBAVFUVlZSUAo6OjZGRk0NLScsU67HY7e/fuZc6cOSxdupSoqCj6+vro7OwE4OTJkzz66KMMDQ0B8M033zj/rqqqIj4+/rJahBDiv5HMEAshxBTJz8/n4MGDvPjii1gsFsbGxrjppptITk5m3bp1+Pn58fDDD5OUlMSsWbO45557WLBgAX19fdx+++0kJiayfv169uzZQ3FxMTt27CAlJQWr1crKlStZtWrVP33fffv2cfDgQTQaDXa7nUWLFlFeXg5AYGAgpaWlGAwGJiYmUEphMBi47bbbOH78OEFBQWzZsgWTycSCBQsoLCwE4KGHHuKll15ix44dRERE/McyFEKI/wSNku+5hBBCgPy+sBBixpIlE0IIIYQQYkaTGWIhhBBCCDGjyQyxEEIIIYSY0aQhFkIIIYQQM5o0xEIIIYQQYkaThlgIIYQQQsxo0hALIYQQQogZTRpiIYQQQggxo/0PzZpzT6RpC1oAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(df[\"noisy_gate_depth\"], df[\"noisy_expectation_value\"], alpha=0.6, label=\"Noisy\")\n", + "plt.scatter(df[\"noisy_dd_gate_depth\"], df[\"noisy_dd_expectation_value\"], alpha=0.6, label=\"Noisy + DD\")\n", + "plt.title(\"Gate Depth vs Expectation Value\")\n", + "plt.xlabel(\"Gate Depth\")\n", + "plt.ylabel(\"Expectation Value\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sequencequbit_countphase_damping_errornoisy_expectation_valuenoisy_dd_expectation_valuenoisy_execution_secsnoisy_dd_execution_secsnoisy_gate_depthnoisy_dd_gate_depth
0XY460.000.9647240.9647240.01060.00741947
1XY460.000.9647240.9647240.00860.00831947
2XY460.000.9647240.9647240.00780.01191947
3XY460.010.9697040.9835770.00780.00851038
4XY460.010.9697040.9835770.01450.00761038
\n", + "
" + ], + "text/plain": [ + " sequence qubit_count phase_damping_error noisy_expectation_value \\\n", + "0 XY4 6 0.00 0.964724 \n", + "1 XY4 6 0.00 0.964724 \n", + "2 XY4 6 0.00 0.964724 \n", + "3 XY4 6 0.01 0.969704 \n", + "4 XY4 6 0.01 0.969704 \n", + "\n", + " noisy_dd_expectation_value noisy_execution_secs noisy_dd_execution_secs \\\n", + "0 0.964724 0.0106 0.0074 \n", + "1 0.964724 0.0086 0.0083 \n", + "2 0.964724 0.0078 0.0119 \n", + "3 0.983577 0.0078 0.0085 \n", + "4 0.983577 0.0145 0.0076 \n", + "\n", + " noisy_gate_depth noisy_dd_gate_depth \n", + "0 19 47 \n", + "1 19 47 \n", + "2 19 47 \n", + "3 10 38 \n", + "4 10 38 " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv(\"dd_qiskit - DD-effect.csv\")\n", + "df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "grouped = df.groupby(\"phase_damping_error\").mean().reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAGkCAYAAAA2STNEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3iUVfrG8e876YRQAiQgAQUp0gTpgSAQivSqiCAuiuiKAjZABQRFXJRdV2Vd+MnKKpZFpIoizYgKUkNXmiAllAChJaTPnN8fQwZiEkJJMin357q8lrxtnpl3luvO4XnPsYwxBhERERGRIsrm7gJERERERNxJgVhEREREijQFYhEREREp0hSIRURERKRIUyAWERERkSJNgVhEREREijQFYpEiombNmnTv3p2ePXum+y8qKgqACRMmEB4ezj//+U+mT59OmzZtePnll2/qtf71r3+xatWqGzrnxIkTdOvWjZ49e7J169Z0+wYNGkR4eDg9e/akV69edO3alTFjxpCQkOB6b2fPnr2pWm/WtGnTaN68uetz7Nq1K88//zyHDh3Kk9cfO3Ysv/zyS5681vV46aWXaNWqVYbv1+zZs/OshqNHjzJ8+PAbOi46Opr+/fvnyOsvXLiQTp06Zdh+5swZGjRowJkzZzI9LyoqinvuuSdHahCRm+Pp7gJEJO988sknBAYGZrrvyy+/ZPXq1ZQvX5527drx97//ncaNG9/U62zYsIFq1ard8Dlly5bl448/znT/6NGjXWHDGMPIkSN5//33GTNmzE3VmBO6dOnCq6++6vp50aJF/OUvf+Hbb7+lePHiufrakydPztXr34zBgwczZMgQt73+8ePH+eOPP27ouODgYObMmZMjr9+lSxemTJlCZGQkjRo1cm2fP38+7dq1o2zZsjnyOiKS8xSIRYQBAwZgjGHo0KEEBgYSHR3N2LFjGTlyJK1atWLy5Mns27ePlJQUQkNDGT16NJ6enmzfvp033niDhIQEvLy8GD16NAcPHmTXrl28/fbbeHh40KFDh3Sv9eWXX/Lpp59is9koW7Ys48ePJzo6mnfffZfY2FgGDRrEp59+es16LcuiWbNm/PTTT65t06ZNY/v27Zw/f54hQ4YwcOBA4uPjmThxIocPH+b8+fP4+/vz97//napVq7JixQqmT5+OZVl4eHgwevRomjRpQmxsbJbvNzu9evXi66+/ZsmSJTz00EPMmzePL7/8kpSUFC5cuMDQoUMZMGAACxYsYMWKFTgcDo4fP05wcDD9+vXjs88+49ChQzz66KM89thjLFiwgGXLlqU7bsqUKQQHBzNo0CAGDhxI3bp1GTx4MK1bt2b79u1cvHiRUaNG0aFDBxISEpgwYQLbt28nICDA9UvKlClT0tWdkpLClClTWLduHR4eHtx99928/PLLFC9enPDwcHr37s26des4ceIEPXv25Nlnn73erxbgHCHt1asXkydPpnXr1rz77rts376djz76iPbt29O1a1fWrl1LbGwsjz76KAMGDAAgIiKC6dOnk5KSgq+vL2PGjOGee+4hNTWVqVOnsnr1ajw8PLjnnnuYMGEC48aNIzo6miFDhvDRRx8xY8YMvv/+exITE0lISGDMmDGEh4enO+61116je/fubN269ZY/Bx8fH/r27cv8+fNdgdgYw1dffcXbb7/Ntm3bmDp1KsnJyZw+fZoWLVrw5ptvprvGtGnTOHfunOsXrat/vpXvpohkw4hIkVCjRg3TrVs306NHD9d/w4YNS7c/JibGGGNM27ZtzY4dO4wxxrz00ktm9uzZxhhjUlNTzYsvvmg+/PBDk5ycbFq2bGl++OEHY4wxO3fuNN26dTN2u908/PDD5rvvvstQwy+//GLat2/vep358+ebzp07G4fDYebPn2+eeOKJTGv/8/XOnz9vBg4caD766CNX7Wl//vXXX03dunVNcnKy+e6778ykSZNc540fP968/vrrxhhj2rVrZ7Zu3WqMMebnn38206ZNu+b7/bP333/fvPbaaxm2T5kyxUycONHExcWZfv36mbNnzxpjjNm6datp0KCB6303atTIHD9+3NjtdtOlSxczfPhwY7fbze7du029evWM3W438+fPNw0aNDAHDx40xhgzdepUM3z48HSfydGjR02NGjVMRESEMcaYZcuWmTZt2hhjjPn73/9unn/+eWO3201sbKzp3r27GTNmTIaa33vvPfPMM8+Y5ORkY7fbzUsvvWTGjx9vjHF+F6ZMmWKMMebkyZOmXr165siRIxmuMWbMGBMWFpbu+9WjRw+zZ88e12fcqlUrs2LFCtO6det037Xx48cbh8NhTpw4YZo1a2b27Nlj/vjjD9OtWzfX57dv3z7TsmVLc+nS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xXz6NtaYc7BOn9Xi2vI9m1usPgbwGcMhbx0XDcgmx5lBZq9kHJajM0sWERERkaNQID4B9rZ1mDV/gWETsKb+CICC2kry3AVsKT+Iu6HuqJ/nMzaXDhzTmaWKiIiISCsUiNto1/q3cH62krHeemygPqE3e3MvZsvujeSVF3DIWwtA39gkosPC8fiajvgayVGxnVy1iIiIiLRGgbgNdq1/i37r/kakbQeeC69288k/X2NLan9GONOZ0T+bnGQXyVFxR9xDDBDpCGN25thglC8iIiIiP0CBuA2cn61sEYYBIo3NnILdXD/rLiIcYS2u5ab65xAfbcqEiIiIiHQtCsRtkOStP8bzHsK/F4YPy00dpAAsIiIi0g1ozEEbVETFHNfzIiIiItJ9KBC3gXvidBocLf9TNTgcuCdOD1JFIiIiItJedMtEGwzLncku/PcSJ3nrqYiKwT1xOsNyZwa7NBERERE5SQrEbTQsdybkzmTjxo1MmDCBPsEuSERERETahW6ZEBEREZGQpkAsIiIiIiFNgVhEREREQpoCsYiIiIiENAViEREREQlpCsQiIiIiEtIUiEVEREQkpCkQi4iIiEhIUyAWERERkZDWLTfVGWMAaGhoCMrre73eoLyudDydbc+ls+25dLY9l862Z+vM8z2cGQ9nyO+zzLGudGHV1dXk5+cHuwwRERER6UaGDx9Or169jni+WwZi27apra0lIiICy7KCXY6IiIiIdGHGGBobG4mLi8PhOPKO4W4ZiEVERERE2oveVCciIiIiIU2BWERERERCmgKxiIiIiIQ0BWIRERERCWkKxCIiIiIS0hSIRURERCSkKRCLiIiISEhTID6Gt956i4suuohp06axZMmSI65v376duXPnMn36dO677z6ampqCUKWciNbO9rCFCxfyxhtvdGJlcrJaO9tVq1Yxa9YsLr30Um699VYqKyuDUKWciNbO9r333mPmzJlcfPHF3HvvvYE1rdL1tfVn8ocffsjUqVM7sTI5Wa2d7X/9138xZcoUZs2axaxZs37w/DuckSMUFRWZKVOmGLfbbWpra83MmTPNrl27WnzMxRdfbD7//HNjjDG/+MUvzJIlS4JRqhyntpxtUVGRueWWW8yYMWPM66+/HqRK5Xi1drbV1dXmzDPPNEVFRcYYY5566inz8MMPB6tcOQ6tnW1tba2ZPHmyKS0tNcYYc9ddd5mlS5cGq1w5Dm35mWyMMaWlpWbGjBlmypQpQahSTkRbzvaWW24xmzZtClKFLalDfBT/+te/mDRpEklJScTGxjJ9+nTeeeedwPWDBw/i8XgYN24cAHPnzm1xXbqu1s4W/H+jPe+887jwwguDVKWciNbOtrGxkQcffJC0tDQAsrKyKCwsDFa5chxaO9vY2FhWr15Nnz59qK+v59ChQyQkJASxYmmrtvxMBrj//vu5/fbbg1ChnKi2nG1eXh7PPfccM2fOZNGiRXi93iBVq1smjqqkpISUlJTA49TUVIqLi495PSUlpcV16bpaO1uAn/zkJ8ybN6+zS5OT1NrZOp1OLrjgAgA8Hg/PP/88559/fqfXKcevLb9vIyIiWLNmDeeeey5ut5vJkyd3dplyAtpyti+99BKjRo1i7NixnV2enITWzra2tpaRI0eyYMECli9fTlVVFX/4wx+CUSqgQHxUtm1jWVbgsTGmxePWrkvXpbPrudp6ttXV1dx8882MGDGCOXPmdGaJcoLaerbnnHMO69evZ8qUKTz00EOdWKGcqNbONj8/n3fffZdbb701GOXJSWjtbOPi4njhhRcYMmQI4eHh3HDDDaxZsyYYpQIKxEeVnp5OaWlp4HFpaSmpqanHvF5WVtbiunRdrZ2tdF9tOduSkhKuvvpqsrKyePTRRzu7RDlBrZ1tRUUFa9euDTyeOXMmO3fu7NQa5cS0drbvvPMOpaWlXHbZZdx8882B38PS9bV2tgUFBbz22muBx8YYwsPDO7XG71IgPoozzjiDdevWUV5eTn19Pe+++y5nn3124Hrfvn2Jiopi48aNAKxYsaLFdem6Wjtb6b5aO1ufz8dPf/pTLrzwQu677z79y0A30trZGmNYsGABBQUFgD9EjR8/PljlynFo7Wznz5/PypUrWbFiBc8//zypqam88sorQaxY2qq1s42OjuaJJ57gwIEDGGNYsmRJ4La2YAheFO/C0tLSuPvuu7nuuutobGzk8ssvZ8yYMdx0003Mnz+f0aNHs3jxYu6//35qamrIzs7muuuuC3bZ0gZtOVvpnlo726KiIrZt24bP52PlypUA5OTkqFPcDbTl9+3DDz/MLbfcgmVZDB06lF/96lfBLlvaQD+Te662nO2iRYv4t3/7NxobGxk/fjw//vGPg1avZYwxQXt1EREREZEg0y0TIiIiIhLSFIhFREREJKQpEIuIiIhISFMgFhEREZGQpkAsIiIiIiFNY9dEJGR88803XHDBBQwfPjzwnDGG6667jssvv5w33niDlStX8txzz3VqXVOnTiUiIoLo6GiMMRhjuOiii7jppps6fFB9cXExd955J0uXLm2Xr3fvvffyz3/+k+Tk5BbPX3bZZRpPKSJdlgKxiISU6OhoVqxYEXhcXFzMJZdcQk5OThCrgsWLFwdmrtbV1XHPPffw2GOP8R//8R8d+rppaWntFoYPu/7667nxxhvb9WuKiHQkBWIRCWlpaWkMHDiQvXv3Av71ojfffDOFhYWEhYXx29/+liFDhvDFF1/wxBNP0NDQQGlpKWeccQa//vWvaWpq4uGHH2bTpk1ERETQr18/HnvsMeLi4ti0aROLFy+mvr4eh8PB7bffzpQpU1qtKTY2lgceeIDzzz+fu+++G4fDwUMPPcS+ffuoqKggLi6OxYsXM3jwYK699lqys7P54osvKC8v54orrqCsrIwNGzZQX1/PU089RVZWFtdeey2jRo1i48aNuN1uZs2axfz58/nmm2+YOXMmn3/+Oc888wwHDx6ktLSUgwcPkpaWxhNPPEFqaipffvklDz30EI2NjQwYMICCggLuvfdecnNzj+u/99SpUxkzZgw7d+7kZz/7GY899liLx5mZmSxatIiKigosy+KGG25g9uzZrF+/nkcffZTY2Fhqa2t5/fXXiYyMPJEjFxE5ggKxiIS0zz//nP379zN27FjWrVvHgQMHePLJJxk4cCCPPPIIf/zjH/n1r3/NSy+9xPz588nNzaW2tpbzzjuPvLw8PB4PGzZs4O2338ayLJ544gl27tzJkCFD+MUvfsEf//hH+vXrR3FxMVdccQVZWVlkZGS0Wld6ejrx8fHs3r2bgoICEhIS+Mtf/gLAAw88wJIlSwLd44MHD7J06VI2b97MFVdcwX//939z77338utf/5qXX36Zhx9+GIA9e/bw6quvUl9fzxVXXMHo0aMZNmxYi9f97LPPePPNN4mPj+enP/0pS5cu5dZbb+WOO+5g0aJFnHPOOXzyySdcf/31x6z9xRdf5G9/+1uL5x5//HGysrIAGDZsGE899RQAjz32WOBxU1MTM2bMYOHChUybNo3i4mLmzZvHwIEDAdi1axerVq2ib9++bThZEZG2UyAWkZDi8XiYNWsWAD6fD6fTyRNPPIHL5QJgzJgxgQA2cuRI3nvvPQB+85vf8NFHH/Hss8+ye/duvF4vdXV1jBgxgrCwMObNm8fkyZOZPn06Y8aMYc2aNZSWlnLbbbcFXtuyLHbu3NmmQHz442NiYpgxYwb9+/fnz3/+M/v27WPDhg2ccsopgY+74IILAOjfvz8AZ511FgADBgxgw4YNgY+78soriYiIICIighkzZrB27dojAvFpp51GfHw8AKNGjaKyspL8/HwAzjnnHAAmTZp0xOd9V2u3TEycOPGoj/fu3YvX62XatGmAv3s/bdo0Pv74Y3Jzc3G5XArDItIhFIhFJKR8/x7i7/vum9gsy+Lwdvsf/ehHZGVlcdZZZ3HhhReyefNmjDEkJCSwYsUKNm3axCeffMJdd93FjTfeiMvlYsiQIfz1r38NfL3i4uIj3mx2LAcPHqSuro4BAwbwyiuvsGzZMq655hpmzpxJUlIS33zzTeBjv3/rQERERKvfmzEGh+PIQUPR0dFHfP9hYWGB/w6HhYWFten7OJrY2NijPvb5fFiW1eKaMYampqajfp6ISHvR2DURkVZUVVWxZcsW7rnnHqZNm0ZRURH79+/Htm0++OADrr/+ek455RTuuOMOZs+eTV5eHuPGjWPfvn18+umnAGzfvp3p06dTXFzcptd7+OGHueaaa4iKimLt2rXMmTOHefPmMWjQIFavXo3P5zvu7+Nvf/sbtm1TWVnJP/7xD6ZOndqmzxsyZAiRkZF89NFHAHz55Zfk5+cfEV5P1uDBgwkPD+fdd98F/H+BWLlyJWeccUa7vo6IyPepQywi0oqEhARuvvlm5syZQ2xsLGlpaYwfP559+/Yxb948PvroIy655BJiY2NJTEzk4YcfJjk5maeffprHH38cr9eLMYbHH3+cfv36HfU17rnnHqKjowkLC8Pn8zFt2jR++tOfAnDDDTfwwAMP8NprrwEwbty4wG0Mx8Pj8XD55ZdTW1vL1Vdfzemnn96i03ws4eHhPPPMMzz44IP87ne/IzMzkz59+rToJn/X0e4hHjt2LIsWLfrB14mIiOAPf/gDjzzyCM888ww+n4/bbruNSZMmsX79+rZ/oyIix8ky3/93MBER6XGuvfZarrnmGmbMmHFCn/+f//mf3HjjjfTp04fCwkJmzZrFqlWrSEhIaOdKRUQ6nzrEIiLSqr59+3L99dcTHh6OMYZHHnlEYVhEegx1iEVEREQkpOlNdSIiIiIS0hSIRURERCSkKRCLiIiISEhTIBYRERGRkKZALCIiIiIhTYFYRERERELa/w/ob1mC1rQMIwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped[\"phase_damping_error\"], grouped[\"noisy_expectation_value\"], marker='o', label=\"Noisy\", color=palette[0])\n", + "plt.plot(grouped[\"phase_damping_error\"], grouped[\"noisy_dd_expectation_value\"], marker='o', label=\"Noisy + DD\", color=palette[1])\n", + "\n", + "plt.title(\"Effect of Phase Damping on Expectation Value\\n(Sum of 3 Pauli-Z Observables)\")\n", + "plt.xlabel(\"Phase Damping Error\")\n", + "plt.ylabel(\"Expectation Value\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"qiskit_dd_vs_phase_damping.png\", dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "grouped_time = df.groupby(\"phase_damping_error\").mean().reset_index()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TJky5fBU0tUlOTmZrl270rVrV7p06cL999/PwYMHAdi4cSMxMTH06NGDzp0707dvX2bMmFEl11WBLCIiIjXSzLR0YqMjGNajdbn7ntcpgT8P68pH3+3gT699jXOuGhJWk1Xz4PHT4cF439dV8yp9ygYNGjB//vwjJggpzw033EBqamqlr11szJgxLFq0qNz9PvroI1avXs2SJUtYv34948ePP7ztlFNOYcWKFaxdu5a5c+fy+OOPM23atEpnU4EsIiIiNc6O7IO8/fVWruiVRMOo4AbdurrfSdw86BReWJLBkx+tC3HCarJqHrx+G+zNAJzv6+u3VbpIjoiIYPz48Tz++ONHbUtPT2fw4MGkpKQwePBgNm3aBPgmCpk0aRLgm22vS5cupKSkMGLECIqKiujQoQM7duwAfNNRt2/fvkIFeHkaN27MlClTWLBgAbt37z5q+8knn8w//vEPJk+eXOlraZg3ERERqXHmLtlEfqFjVCkP5x3LXb88lS1ZeUx693tax8dwWc82IUpYRd6+F35aXfb2zKVQePDIdfm58NotsLyM7gQndoULJpZ76ZtvvpmUlBTuueeeI9bfcsstpKamMnr0aKZOncptt93GggULjthn4sSJbNiwgQYNGpCVlUVYWBgjR45kzpw53H777bz//vt069aNFi1alJujIpo0aUK7du344YcfSEhIOGp7z549+fbbbyt9HbUgi4iISI1SUFjE80s2cXaHFrRr0ahCx5oZf7s8hTNOac49L6/i83VV14LpiZLFcXnrK6BJkyakpqYe1eKalpbG1VdfDcCoUaNKnVY6JSWFa665htmzZxMR4Wtvvfbaaw/3UZ46dSpjx4496rh33nmH7t270717dxYuXMi4cePo3r07gwYNCjr3sbrPVFXXGrUgi4iISI3y/tptbN2bx8OXnn5cx0dFhDFlVC+u+E8aN8xazks3DqDTiU2qOGUVKa+l9/HT/d0rSohLgrFvVvryt99+Oz179iy1mC1W2gOSb775Jp988gkLFy7kkUceYc2aNSQlJZGQkMCHH37IF198wZw5c446bujQoQwdOhTw9UEeM2YMAwcOJDs7uHGss7Oz2bhxIx07dmTv3r1HbV+xYgWdO3cO6lzHohZkERERqVFm/F86ifExnNep5XGfo0l0JNPG9qFRgwjGTF3K1r25VZiwGg3+H4iM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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(grouped_time[\"phase_damping_error\"], grouped_time[\"noisy_execution_secs\"], marker='o', label=\"Noisy\")\n", + "plt.plot(grouped_time[\"phase_damping_error\"], grouped_time[\"noisy_dd_execution_secs\"], marker='o', label=\"Noisy + DD\")\n", + "\n", + "plt.title(\"Execution Time vs Phase Damping Error\")\n", + "plt.xlabel(\"Phase Damping Error\")\n", + "plt.ylabel(\"Execution Time (seconds)\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_after_dd.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_after_dd.png new file mode 100644 index 0000000..7df4def Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_after_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_before_dd.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_before_dd.png new file mode 100644 index 0000000..27ab66a Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/circuit_before_dd.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time.png new file mode 100644 index 0000000..7c39f82 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time_log.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time_log.png new file mode 100644 index 0000000..7c9cd86 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_exec_time_log.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_expectation_value.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_expectation_value.png new file mode 100644 index 0000000..c428112 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_expectation_value.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_gate_depth.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_gate_depth.png new file mode 100644 index 0000000..ef97207 Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_gate_depth.png differ diff --git a/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_vs_phase_damping.png b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_vs_phase_damping.png new file mode 100644 index 0000000..227fffa Binary files /dev/null and b/src/mini_apps/circuit_optimization/Dynamic-Decoupling/Qiskit_Dynamic-Decoupling/plots/qiskit_dd_vs_phase_damping.png differ diff --git a/src/mini_apps/circuit_optimization/LICENSE b/src/mini_apps/circuit_optimization/LICENSE new file mode 100644 index 0000000..4f3d1cc --- /dev/null +++ b/src/mini_apps/circuit_optimization/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Royschenk + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/mini_apps/circuit_optimization/QML-Pipeline_Circuit-Optimization/QML-training_Dynamic-Decoupling/qml-training-dd.py b/src/mini_apps/circuit_optimization/QML-Pipeline_Circuit-Optimization/QML-training_Dynamic-Decoupling/qml-training-dd.py new file mode 100644 index 0000000..79bdb74 --- /dev/null +++ b/src/mini_apps/circuit_optimization/QML-Pipeline_Circuit-Optimization/QML-training_Dynamic-Decoupling/qml-training-dd.py @@ -0,0 +1,307 @@ +import datetime +import os +import time +import numpy as np +from engine.manager import MiniAppExecutor +from engine.metrics.csv_writer import MetricsFileWriter +from mini_apps.qml_training.utils.discrete_qcbm_model_handler import DiscreteQCBMModelHandler +from qugen.main.data.data_handler import load_data +import pennylane as qml + +RESOURCE_URL_HPC = "ssh://localhost" +WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + +cluster_info = { + "executor": "pilot", + "config": { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] + } +} + +qml_parameters = { + "build_parameters": { + 'model_type': "discrete", + 'data_set_name': "X_2D", + 'n_qubits': 8, + 'n_registers': 2, + 'circuit_depth': 2, + 'initial_sigma': 0.01, + 'circuit_type': "copula", + 'transformation': "pit", + 'hot_start_path': "", + "parallelism_framework": "jax" + }, + "train_parameters": { + 'n_epochs': 5, + 'batch_size': 200, + 'hist_samples': 100000 + } +} + +# Device selection +def get_device(n_qubits, noisy=False): + if noisy: + dev = qml.device("default.mixed", wires=n_qubits) + else: + dev = qml.device("default.qubit", wires=n_qubits) + return dev + +configs = [("Noise Only", False, True),("DD + Noise", True, True),("No-DD No-Noise", False, False),("DD Only", True, False)] + +# Dynamical decoupling implementation +def apply_dd_sequence(wires): + for w in wires: + qml.PauliX(w) + qml.PauliY(w) + qml.PauliX(w) + qml.PauliY(w) + +# Define kraus operators for manual phase damping +def get_phase_damping_kraus(prob): + K0 = np.array([[1, 0], [0, np.sqrt(1 - prob)]]) + K1 = np.array([[0, 0], [0, np.sqrt(prob)]]) + return [K0, K1] + +# DD circuits +def dd_copula_ansatz(params, wires): + n_qubits = len(wires) + depth = params.shape[0] - 1 + + for wire in range(n_qubits): + qml.RY(params[0, wire], wires=wires[wire]) + + for d in range(1, depth + 1): + for i in range(0, n_qubits - 1, 2): + qml.CNOT(wires=[wires[i], wires[i+1]]) + qml.QubitChannel(get_phase_damping_kraus(0.05), wires=wires[i+1]) + apply_dd_sequence(wires) + for wire in range(n_qubits): + qml.RY(params[d, wire], wires=wires[wire]) + + +def regular_copula_ansatz(params, wires): + n_qubits = len(wires) + depth = params.shape[0] - 1 + + for wire in range(n_qubits): + qml.RY(params[0, wire], wires=wires[wire]) + + for d in range(1, depth + 1): + for i in range(0, n_qubits - 1, 2): + qml.CNOT(wires=[wires[i], wires[i+1]]) + qml.QubitChannel(get_phase_damping_kraus(0.1), wires=wires[i+1]) + for wire in range(n_qubits): + qml.RY(params[d, wire], wires=wires[wire]) + + +def patch_copula_ansatz_with_dd(): + """Patch the original copula_ansatz with the DD-enhanced version.""" + try: + import qugen.main.generator.quantum_circuits.discrete_generator_pennylane as qgen_circuits + + # Check if copula_ansatz exists in the module + if hasattr(qgen_circuits, 'copula_ansatz'): + # Store original function + original_copula_ansatz = qgen_circuits.copula_ansatz + + # Patch with DD version + qgen_circuits.copula_ansatz = dd_copula_ansatz + + print("[INFO] Successfully patched copula_ansatz with DD sequence") + return original_copula_ansatz + else: + print("[WARNING] copula_ansatz not found in qgen_circuits module") + # Create and patch a new function if it doesn't exist + qgen_circuits.copula_ansatz = dd_copula_ansatz + print("[INFO] Created new copula_ansatz function with DD sequence") + return regular_copula_ansatz + + except ImportError as e: + print(f"[ERROR] Cannot import from qugen.main.generator.quantum_circuits: {e}") + print("[INFO] Will use local implementation of copula_ansatz") + # No patching performed, will use our local implementation + return regular_copula_ansatz + + +# QML training mini-app +class QMLTrainingMiniApp: + def __init__(self, cluster_config, parameters=None, scenario_label="QML Training with DD MiniApp"): + self.executor = MiniAppExecutor(cluster_config).get_executor() + self.parameters = parameters + self.scenario_label = scenario_label + self.cluster_config = cluster_config + self.current_datetime = datetime.datetime.now() + self.timestamp = self.current_datetime.strftime('%Y-%m-%dT%H:%M:%S') + self.file_name = f"qml_result_{self.timestamp}.csv" + + script_dir = os.path.dirname(os.path.abspath(__file__)) + self.result_dir = os.path.join(script_dir, "results") + if not os.path.exists(self.result_dir): + os.makedirs(self.result_dir) + self.result_file = os.path.join(self.result_dir, self.file_name) + + header = ["timestamp", "scenario_label", "num_qubits", "compute_time_sec", + "parameters", "cluster_info", "final_kl"] + self.metrics_file_writer = MetricsFileWriter(self.result_file, header) + + + def run(self, use_dd=True, use_noise=False): + start_time = time.time() + + # Only run with the specified configuration + futures = self.executor.submit_task(run_training_task, self.parameters, use_dd, use_noise) + result = self.executor.get_results([futures])[0] + + end_time = time.time() + compute_time_sec = end_time - start_time + + # Extract final_kl from result if it's a dict + final_kl = 1.0 # Default value + if isinstance(result, dict): + final_kl = result.get("final_kl", 1.0) + else: + try: + final_kl = float(result) + except (TypeError, ValueError): + final_kl = 1.0 + + # Record training results + self.metrics_file_writer.write([ + self.timestamp, + self.scenario_label, + self.parameters["build_parameters"]['n_qubits'], + compute_time_sec, + str(self.parameters), + str(self.cluster_config), + final_kl + ]) + + return final_kl + + def close(self): + """Clean up resources.""" + if hasattr(self, 'metrics_file_writer'): + self.metrics_file_writer.close() + + +# Training task implementation + +def run_training_task(parameters, use_dd=True, use_noise=False): + try: + print(f"[INFO] use_dd={use_dd}, use_noise={use_noise}") + + seed = parameters["build_parameters"].get("seed", 2) + np.random.seed(seed) + + dev = get_device(parameters["build_parameters"]['n_qubits'], noisy=use_noise) + + # Conditionally patch with DD + if use_dd: + try: + original_ansatz = patch_copula_ansatz_with_dd() + print("[INFO] Patched copula_ansatz with dynamical decoupling (DD) sequence") + except Exception as e: + print(f"[WARNING] Failed to patch copula_ansatz: {e}") + print("[INFO] Will proceed with local implementation") + original_ansatz = regular_copula_ansatz + else: + # Always reset to regular ansatz if DD is not used + try: + import qugen.main.generator.quantum_circuits.discrete_generator_pennylane as qgen_circuits + qgen_circuits.copula_ansatz = regular_copula_ansatz + print("[INFO] Patched copula_ansatz with regular (non-DD) sequence") + except Exception as e: + print(f"[WARNING] Failed to patch regular copula_ansatz: {e}") + original_ansatz = regular_copula_ansatz + + + # Load or generate dataset + package_path = os.path.dirname(os.path.abspath(__file__)) + data_set_path = os.path.join(package_path, "data", parameters["build_parameters"]["data_set_name"]) + + if not os.path.exists(data_set_path): + data = np.random.randn(1000, 2) + np.save('X_2D.npy', data) + else: + data = np.load(data_set_path) + + # Build and train the model + model = DiscreteQCBMModelHandler() + model.build( + parameters["build_parameters"]['model_type'], + parameters["build_parameters"]['data_set_name'], + n_qubits=parameters["build_parameters"]['n_qubits'], + n_registers=parameters["build_parameters"]['n_registers'], + circuit_depth=parameters["build_parameters"]['circuit_depth'], + circuit_type=parameters["build_parameters"]['circuit_type'], + transformation=parameters["build_parameters"]['transformation'], + hot_start_path=parameters.get("build_parameters", {}).get('hot_start_path', ''), + parallelism_framework=parameters["build_parameters"]['parallelism_framework'] + ) + + model.train( + data, + n_epochs=parameters["train_parameters"]['n_epochs'], + batch_size=parameters["train_parameters"]['batch_size'], + hist_samples=parameters["train_parameters"]['hist_samples'], + ) + + # Evaluate model + evaluation_df = model.evaluate(data) + minimum_kl_data = evaluation_df.loc[evaluation_df["kl_original_space"].idxmin()] + final_kl = minimum_kl_data["kl_original_space"] + + print(f"[Training Done] Final KL Divergence: {final_kl}") + return final_kl + + except Exception as e: + print(f"[ERROR] Training failed: {e}") + return {"error": str(e), "final_kl": 1.0} + + +# Main execution +if __name__ == "__main__": + + try: + # Display introductory message + print("\nQML Training with Dynamical Decoupling") + print("This application runs quantum machine learning with:") + print(" 1. Dynamical decoupling (DD)") + print(" 2. Distributed execution via Pilot Quantum") + print(" 3. Noise simulation with PennyLane's mixed state simulator") + + # Create and run the QML mini-app + qml_mini_app = QMLTrainingMiniApp(cluster_info, qml_parameters) + + # Run the main training task on the cluster + + print("No DD + Noise") + label = "No DD + Noise" + qml_mini_app.scenario_label = label + result = qml_mini_app.run(use_dd=False, use_noise=True) + print(f"[Training Done] Final KL Divergence for {label}: {result}") + + print("With DD + Noise") + label = "With DD + Noise" + qml_mini_app.scenario_label = label + result = qml_mini_app.run(use_dd=True, use_noise=True) + print(f"[Training Done] Final KL Divergence for {label}: {result}") + + except Exception as e: + print(f"Error: {e}") + finally: + try: + if 'qml_mini_app' in locals(): + qml_mini_app.close() + except: + pass + + print("\nExecution complete.") \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/README.md b/src/mini_apps/circuit_optimization/README.md new file mode 100644 index 0000000..9b7d080 --- /dev/null +++ b/src/mini_apps/circuit_optimization/README.md @@ -0,0 +1,90 @@ +# Circuit Optimization and Middleware Benchmarking with Quantum Mini-Apps + +This repository contains six quantum mini-apps developed for the Master's thesis *Evaluating Middleware for Hybrid Quantum-Classical Applications Using Quantum Mini-Apps* (Utrecht University, 2025). Each mini-app benchmarks a specific **execution motif** using **realistic noise models** and **Dynamical Decoupling (DD)** techniques, targeting middleware behavior under hybrid quantum-classical workloads. + +All experiments are compatible with the [Pilot-Quantum](https://github.com/radical-cybertools/pilot-quantum) middleware and can be executed locally or on SLURM-based HPC clusters with Ray/Dask backends. + +--- + +## Mini-Apps Overview + +| Script | Execution Motif | Description | +|--------|------------------|-------------| +| `dd-qiskit.py` | Circuit Optimization | Applies DD to noisy Qiskit circuits. Compares fidelity and circuit depth with and without DD sequences under phase damping and thermal noise. | +| `dd-pennylane.py` | Circuit Optimization | Evaluates JSD between noisy and ideal bitstring distributions on PennyLane circuits under DD. Supports qubit/depth sweeps. | +| `vqa.py` | VQA | Performs a VQE energy scan on the H₂ molecule across bond distances. Supports noisy simulation and optional DD. | +| `vqa-dd.py` | VQA + CO | Extended VQE loop comparing ideal, noisy, and noisy+DD executions. Outputs fidelity, JSD, and energy convergence. | +| `cc-dd.py` | Circuit Cutting + CO | Combines circuit cutting and DD. Compares three scenarios: no DD, DD-after-cutting, and DD-before-cutting. Benchmarks fidelity and subcircuit depth. | +| `qml-training-dd.py` | Hybrid ML Workflow | Trains a discrete QCBM model on synthetic data with and without DD. Measures KL divergence between model output and true distribution. | + +--- + +## Key Features + +- Realistic noise modeling with AerSimulator (phase damping, pennylane's mixed simulation) +- Dynamical Decoupling strategies: XY4 +- Fidelity, JSD, and subcircuit depth as metrics +- Supports dense and cut circuits, QML, and VQE workflows +- Fully orchestrated with Pilot-Quantum middleware (Ray/SLURM compatible) + +--- + +## Example outputs + +- Fidelity vs. qubit count plots +- JSD analysis for DD vs no-DD +- VQE modeling H₂ molecule across different bond lengths +- Subcircuit depth + accuracy comparisons (circuit cutting) +- Execution time vs QPS scaling (Pilot-Quantum experiments) + +--- + +## Requirements + +- Python 3.11+ +- Qiskit 1.2.4 +- PennyLane ≥ 0.35 +- NumPy, Matplotlib, SciPy +- Pilot-Quantum +- Ray (for distributed runs) + +Install all dependencies using: + +```bash +pip install -r requirements.txt +``` + +--- + +## Repository Structure + +``` +. +├── dd-qiskit.py # Circuit DD (Qiskit) +├── dd-pennylane.py # Circuit DD + JSD (PennyLane) +├── vqa.py # VQE on H₂ +├── vqa-dd.py # VQE with fidelity and JSD comparison on H₂ +├── cc-dd.py # Circuit Cutting + DD +├── qml-training-dd.py # QCBM model training with/without DD +├── notebook/ # Postprocessing notebooks +├── experiment_data/ # Raw simulation outputs +├── plots/ # visualizations generated by the nootebooks +├── requirements.txt +└── README.md +``` + +--- + +## Citation + +If you use these tools in academic research, please cite: + +> Roy Schenk, **Evaluating Middleware for Hybrid Quantum-Classical Applications Using Quantum Mini-Apps**, Master’s Thesis, Utrecht University, 2025. + +--- + +## Related Projects + +- [Pilot-Quantum](https://github.com/radical-cybertools/pilot-quantum) – Middleware layer used for execution +- [quantum-mini-apps](https://github.com/radical-cybertools/quantum-mini-apps) – Mini-app repository + diff --git a/src/mini_apps/circuit_optimization/VQA/notebook/vqe.ipynb b/src/mini_apps/circuit_optimization/VQA/notebook/vqe.ipynb new file mode 100644 index 0000000..02b5986 --- /dev/null +++ b/src/mini_apps/circuit_optimization/VQA/notebook/vqe.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import glob\n", + "import os\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "VQA - 5_0.66_h2.csv\n", + "Index(['Step', 'Energy (Hartree)', 'Bond_length', 'num_qubits', 'Final_energy',\n", + " 'exec_secs'],\n", + " dtype='object')\n", + " Step Energy (Hartree) Bond_length num_qubits Final_energy exec_secs\n", + "0 0 -0.182876 0.66 7.0 -1.098719 2.939\n", + "1 1 -0.460430 NaN NaN NaN NaN\n", + "\n", + "VQA - 3_0.58.csv\n", + "Index(['Step', 'Energy (Hartree)', 'Bond_length', 'num_qubits', 'Final_energy',\n", + " 'exec_secs'],\n", + " dtype='object')\n", + " Step Energy (Hartree) Bond_length num_qubits Final_energy exec_secs\n", + "0 0 -0.073740 0.58 7.0 -1.171362 3.5376\n", + "1 1 -0.278116 NaN NaN NaN NaN\n", + "\n", + "VQA - 4_0.62_h2.csv\n", + "Index(['Step', 'Energy (Hartree)', 'Bond_length', 'num_qubits', 'Final_energy',\n", + " 'exec_secs'],\n", + " dtype='object')\n", + " Step Energy (Hartree) Bond_length num_qubits Final_energy exec_secs\n", + "0 0 -0.013930 0.62 7.0 -1.133301 3.6604\n", + "1 1 -0.269347 NaN NaN NaN NaN\n", + "\n", + "VQA - 1_0.54_h2.csv\n", + "Index(['Step', 'Energy (Hartree)', 'Bond_length', 'num_qubits', 'Final_energy',\n", + " 'exec_secs'],\n", + " dtype='object')\n", + " Step Energy (Hartree) Bond_length num_qubits Final_energy exec_secs\n", + "0 0 -0.065306 0.54 7.0 -1.213219 2.9797\n", + "1 1 -0.367191 NaN NaN NaN NaN\n", + "\n", + "VQA - 2_0.5_h2.csv\n", + "Index(['Step', 'Energy (Hartree)', 'Bond_length', 'num_qubits', 'Final_energy',\n", + " 'exec_secs'],\n", + " dtype='object')\n", + " Step Energy (Hartree) Bond_length num_qubits Final_energy exec_secs\n", + "0 0 -0.069894 0.5 7.0 -1.258968 2.9641\n", + "1 1 -0.399557 NaN NaN NaN NaN\n" + ] + } + ], + "source": [ + "# Directory where CSVs are located\n", + "csv_folder = \"/Users/royschenk/Desktop/mappie/Thesis Folder/vqa\"\n", + "\n", + "csv_files = glob.glob(os.path.join(csv_folder, \"VQA - *.csv\"))\n", + "\n", + "for file in csv_files:\n", + " df = pd.read_csv(file)\n", + " print(f\"\\n{os.path.basename(file)}\")\n", + " print(df.columns)\n", + " print(df.head(2))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MrOhze8uAuECL0GOWhFlsRhnE6vpRRsbJzIsEREREbkAE5Ug3wR8L/H+e8DNgwc450445/Yk3rcCB4E54xbheQjn5wDQFY3gB3rzwgDETp+ewKhERERE5EJMVBeLGc65E+AlwmY2faTBZlYJXA4MbaB3bsxngM8AzJgxg9ra2kzFOqreDq+Vyf+8cpxqoDfHm1E+8MwzdPr94xaHZE9bW9u4/puS8aX7O7np/k5uur+pFRUV0draOtFhjFksFsvY99HV1ZX2v5WsJchm9p949cODnVffDTPLB/4V+F3n3NnhxjnnvgV8C+DKK690a9asOZ/LjEm0N8arjz7FrDmXwknw54aBM1SXlTFtHOOQ7KmtrWU8/03J+NL9ndx0fyc33d/UDh48OGzt7lvJSDXI5ysUCnH55ZenNTZrCbJz7rrh9pnZG2Y2KzF7PAs4Ncy4IF5yvMU5929ZCnXMAkE/vgB0dkCUABFntIegWK3eRERERLLqzJkzfOhDH8LMeOSRRygqKhrzOSeqBvlR4JOJ958EhizObd5yK98BDjrn/mocY7sg/lzobOulK1BASU+c5jzoOnVyosMSERERmdR27tzJunXruPHGG9m5c2dGzjlRCfI9wPVmdgi4PvEZM5ttZn1N7t4FfAJ4j5m9mHgN7RVykQjkQld7L93BIqb19NISga4335josEREREQmxI4dO1i0aBELFizgnnvuGXZcbW0tK1euZOnSpaxevbp/e3NzM5/4xCe49NJLWbx4Mc8++2zK41evXs3mzZvZvHnzgOPHYkIe0nPONQHvTbH9OLA28f6/gaGLdl+k/CHobO0hllfI7PYeWiJG9LRKLERERGTqicVibNq0iSeffJKKigpWrVrFunXrWLJkYMfe5uZmNm7cyI4dO5g3bx6nTp2rur3zzju57rrr+Pd//3d6enroGGYBNr/fT0lJCfF4PGPxayW9DAnkQldbL/FQCfNinbTkAadbJjosERERkXG3a9cuFixYQHV1NTk5Odx6661s3z6kopatW7eyfv165s2bB8D06V5js7Nnz/Kzn/2M2267DYCcnByKi4tTXuvhhx9m/fr13HLLLTz00EMZiX+i2rxNOv5caG3txYWKqYx18FQkRKCtE9fTg+XkTHR4IiIiMkX9/OFXaTzaltFzls/N55oPXzLs/mPHjjF37tz+zxUVFTz3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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "\n", + "for file in sorted(csv_files):\n", + " df = pd.read_csv(file)\n", + " \n", + " # Clean the DataFrame by forward filling metadata columns\n", + " df[['Bond_length', 'num_qubits', 'Final_energy', 'exec_secs']] = df[['Bond_length', 'num_qubits', 'Final_energy', 'exec_secs']].ffill()\n", + " \n", + " bond_length = df['Bond_length'].iloc[0]\n", + " label = f\"{bond_length:.2f} Å\" if pd.notna(bond_length) else os.path.basename(file)\n", + " \n", + " plt.plot(df['Step'], df['Energy (Hartree)'], label=label)\n", + "\n", + "plt.xlabel(\"Step\")\n", + "plt.ylabel(\"Energy (Hartree)\")\n", + "plt.title(\"VQE Convergence per Bond Length\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MrOhze8uAuECL0GOWhFlsRhnE6vpRRsbJzIsEREREbkAE5Ug3wR8L/H+e8DNgwc450445/Yk3rcCB4E54xbheQjn5wDQFY3gB3rzwgDETp+ewKhERERE5EJMVBeLGc65E+AlwmY2faTBZlYJXA4MbaB3bsxngM8AzJgxg9ra2kzFOqreDq+Vyf+8cpxqoDfHm1E+8MwzdPr94xaHZE9bW9u4/puS8aX7O7np/k5uur+pFRUV0draOtFhjFksFsvY99HV1ZX2v5WsJchm9p949cODnVffDTPLB/4V+F3n3NnhxjnnvgV8C+DKK690a9asOZ/LjEm0N8arjz7FrDmXwknw54aBM1SXlTFtHOOQ7KmtrWU8/03J+NL9ndx0fyc33d/UDh48OGzt7lvJSDXI5ysUCnH55ZenNTZrCbJz7rrh9pnZG2Y2KzF7PAs4Ncy4IF5yvMU5929ZCnXMAkE/vgB0dkCUABFntIegWK3eRERERLLqzJkzfOhDH8LMeOSRRygqKhrzOSeqBvlR4JOJ958EhizObd5yK98BDjrn/mocY7sg/lzobOulK1BASU+c5jzoOnVyosMSERERmdR27tzJunXruPHGG9m5c2dGzjlRCfI9wPVmdgi4PvEZM5ttZn1N7t4FfAJ4j5m9mHgN7RVykQjkQld7L93BIqb19NISga4335josEREREQmxI4dO1i0aBELFizgnnvuGXZcbW0tK1euZOnSpaxevbp/e3NzM5/4xCe49NJLWbx4Mc8++2zK41evXs3mzZvZvHnzgOPHYkIe0nPONQHvTbH9OLA28f6/gaGLdl+k/CHobO0hllfI7PYeWiJG9LRKLERERGTqicVibNq0iSeffJKKigpWrVrFunXrWLJkYMfe5uZmNm7cyI4dO5g3bx6nTp2rur3zzju57rrr+Pd//3d6enroGGYBNr/fT0lJCfF4PGPxayW9DAnkQldbL/FQCfNinbTkAadbJjosERERkXG3a9cuFixYQHV1NTk5Odx6661s3z6kopatW7eyfv165s2bB8D06V5js7Nnz/Kzn/2M2267DYCcnByKi4tTXuvhhx9m/fr13HLLLTz00EMZiX+i2rxNOv5caG3txYWKqYx18FQkRKCtE9fTg+XkTHR4IiIiMkX9/OFXaTzaltFzls/N55oPXzLs/mPHjjF37tz+zxUVFTz3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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import os\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "\n", + "for file in sorted(csv_files):\n", + " df = pd.read_csv(file)\n", + " \n", + " # Clean the DataFrame by forward filling metadata columns\n", + " df[['Bond_length', 'num_qubits', 'Final_energy', 'exec_secs']] = df[['Bond_length', 'num_qubits', 'Final_energy', 'exec_secs']].ffill()\n", + " \n", + " bond_length = df['Bond_length'].iloc[0]\n", + " label = f\"{bond_length:.2f} Å\" if pd.notna(bond_length) else os.path.basename(file)\n", + " \n", + " plt.plot(df['Step'], df['Energy (Hartree)'], label=label)\n", + "\n", + "plt.xlabel(\"Step\")\n", + "plt.ylabel(\"Energy (Hartree)\")\n", + "plt.title(\"VQE Convergence per Bond Length\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "\n", + "# Save the figure\n", + "plt.savefig(\"vqe_convergence_plot.png\", dpi=300)\n", + "\n", + "# Show the plot\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "final_energies = []\n", + "\n", + "for file in sorted(csv_files):\n", + " df = pd.read_csv(file)\n", + " df[['Bond_length', 'Final_energy']] = df[['Bond_length', 'Final_energy']].ffill()\n", + " \n", + " bond_length = df['Bond_length'].iloc[0]\n", + " final_energy = df['Final_energy'].iloc[0]\n", + " \n", + " if pd.notna(bond_length) and pd.notna(final_energy):\n", + " final_energies.append((bond_length, final_energy))\n", + "\n", + "# Sort by bond length for smooth plotting\n", + "final_energies.sort()\n", + "bond_lengths, energies = zip(*final_energies)\n", + "\n", + "plt.figure(figsize=(8, 5))\n", + "plt.plot(bond_lengths, energies, marker='o')\n", + "plt.xlabel(\"Bond Length (Å)\")\n", + "plt.ylabel(\"Final Energy (Hartree)\")\n", + "plt.title(\"Final Energy vs. Bond Length\")\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "exec_times = []\n", + "\n", + "for file in sorted(csv_files):\n", + " df = pd.read_csv(file)\n", + " df[['Bond_length', 'exec_secs']] = df[['Bond_length', 'exec_secs']].ffill()\n", + " \n", + " bond_length = df['Bond_length'].iloc[0]\n", + " exec_sec = df['exec_secs'].iloc[0]\n", + " \n", + " if pd.notna(bond_length) and pd.notna(exec_sec):\n", + " exec_times.append((bond_length, exec_sec))\n", + "\n", + "# Sort by bond length\n", + "exec_times.sort()\n", + "bond_lengths_exec, times = zip(*exec_times)\n", + "\n", + "plt.figure(figsize=(8, 5))\n", + "plt.plot(bond_lengths_exec, times, marker='s', color='orange')\n", + "plt.xlabel(\"Bond Length (Å)\")\n", + "plt.ylabel(\"Execution Time (s)\")\n", + "plt.title(\"Execution Time vs. Bond Length\")\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/mini_apps/circuit_optimization/VQA/visualizations/vqe_convergence_plot.png b/src/mini_apps/circuit_optimization/VQA/visualizations/vqe_convergence_plot.png new file mode 100644 index 0000000..6a1182b Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA/visualizations/vqe_convergence_plot.png differ diff --git a/src/mini_apps/circuit_optimization/VQA/vqa.py b/src/mini_apps/circuit_optimization/VQA/vqa.py new file mode 100644 index 0000000..0213e02 --- /dev/null +++ b/src/mini_apps/circuit_optimization/VQA/vqa.py @@ -0,0 +1,629 @@ +import re +import os +import csv +import json +import time +import datetime +import numpy as np +import matplotlib.pyplot as plt +import pennylane as qml +from typing import Dict, List, Tuple, Optional, Any +from pennylane.optimize import AdamOptimizer +from engine.manager import MiniAppExecutor +from engine.metrics.csv_writer import MetricsFileWriter + +# Quantum chemistry dataset handling +class QChemDatasetLoader: + def __init__(self, dataset_path: str): + self.dataset_path = dataset_path + self.dataset_file = os.path.join(dataset_path, "dataset.json") + self.meta_file = os.path.join(dataset_path, "meta.json") + self.dataset = None + self.metadata = None + self.dataset_keys = None + self.hamiltonians = [] # Store processed Hamiltonians + self.bond_lengths = [] # Store bond lengths + + def load(self) -> Tuple[Dict, Dict]: + try: + with open(self.dataset_file, 'r') as f: + self.dataset = json.load(f) + + with open(self.meta_file, 'r') as f: + self.metadata = json.load(f) + + print(f"[INFO] Successfully loaded dataset from {self.dataset_path}") + print(f"[INFO] Dataset contains {len(self.dataset)} data points") + print(f"[INFO] Molecule: {self.metadata.get('name', 'Unknown')}") + print(f"[DEBUG] Dataset type: {type(self.dataset)}") + + # Process the dataset based on its structure + self._process_dataset() + + return self.dataset, self.metadata + + except Exception as e: + print(f"[ERROR] Failed to load dataset: {e}") + raise + + def _process_dataset(self): + try: + if isinstance(self.dataset, dict) and 'data' in self.dataset: + for entry in self.dataset["data"]: + try: + bond_length = float(entry["parameters"]["bondlength"]) + term_str = entry["extra"]["hamiltonianTerms"] + # TEMPORARILY assume 2 qubits, just for parsing + coeffs, observables = self.parse_hamiltonian_terms(term_str, n_qubits=2) + n_qubits = len(observables[0]) # Use real size after parsing + self.hamiltonians.append({ + "coeffs": coeffs, + "observables": observables + }) + self.bond_lengths.append(bond_length) + except Exception as e: + print(f"[WARNING] Failed to parse real Hamiltonian data. Using dummy data. Reason: {e}") + self.hamiltonians.append({ + "coeffs": [1.0, -0.5, 0.3], + "observables": [["Z", "I"], ["I", "Z"], ["Z", "Z"]] + }) + self.bond_lengths.append(0.5) + if not self.hamiltonians: + print("[WARNING] Could not extract any Hamiltonian data. Creating dummy data for testing.") + for i in range(5): + self.hamiltonians.append({ + 'coeffs': [1.0, -0.5, 0.3], + 'observables': [['Z', 'I'], ['I', 'Z'], ['Z', 'Z']] + }) + self.bond_lengths.append(0.5 + i * 0.2) + print(f"[INFO] Processed {len(self.hamiltonians)} data points with corresponding bond lengths.") + except Exception as e: + print(f"[ERROR] Error processing dataset: {e}") + import traceback + traceback.print_exc() + print("[WARNING] Creating dummy data as fallback.") + self.hamiltonians = [] + self.bond_lengths = [] + for i in range(5): + self.hamiltonians.append({ + 'coeffs': [1.0, -0.5, 0.3], + 'observables': [['Z', 'I'], ['I', 'Z'], ['Z', 'Z']] + }) + self.bond_lengths.append(0.5 + i * 0.2) + + def parse_hamiltonian_terms(self, term_str: str, n_qubits: int = 8): + coeffs = [] + observables = [] + for line in term_str.strip().split("\n"): + match = re.match(r"\(([^)]+)\)\s+\[([^\]]+)\]", line.strip()) + if match: + coeff = float(match.group(1)) + terms = match.group(2).split() + + # Dynamically determine required qubit count + max_index = max([int(p[1:]) for p in terms]) if terms else 0 + vec_len = max(n_qubits, max_index + 1) + pauli_vec = ['I'] * vec_len + + for pauli in terms: + p_type = pauli[0] + p_index = int(pauli[1:]) + pauli_vec[p_index] = p_type + + coeffs.append(coeff) + observables.append(pauli_vec) + return coeffs, observables + + def get_hamiltonian(self, index: int) -> Tuple[List[float], List[List[str]]]: + if self.dataset is None: + self.load() + + if index >= len(self.hamiltonians): + raise IndexError(f"Index {index} out of range for dataset with {len(self.hamiltonians)} entries") + + hamiltonian_data = self.hamiltonians[index] + return hamiltonian_data['coeffs'], hamiltonian_data['observables'] + + def get_bond_length(self, index: int) -> float: + if self.dataset is None: + self.load() + + if index >= len(self.bond_lengths): + raise IndexError(f"Index {index} out of range for dataset with {len(self.bond_lengths)} entries") + + return self.bond_lengths[index] + + def get_number_of_qubits(self) -> int: + if self.metadata is None: + self.load() + + num_qubits = self.metadata.get("num_qubits", None) + + # If not specified in metadata, try to infer from the Hamiltonians + if num_qubits is None and self.hamiltonians: + # Get first Hamiltonian's observables + _, observables = self.get_hamiltonian(0) + if observables and isinstance(observables[0], list): + # Number of qubits is the length of the first observable term + num_qubits = len(observables[0]) + print(f"[INFO] Inferred {num_qubits} qubits from Hamiltonian observables") + else: + # Default to 2 qubits for H2 molecule + num_qubits = 2 + print(f"[WARNING] Could not infer number of qubits. Defaulting to {num_qubits}") + + return num_qubits or 2 # Default to 2 qubits for H2 molecule + + def get_num_data_points(self) -> int: + if self.dataset is None: + self.load() + + return len(self.hamiltonians) + + def debug_dataset_structure(self): + if self.dataset is None: + self.load() + + print(f"[DEBUG] Dataset type: {type(self.dataset)}") + + try: + if isinstance(self.dataset, dict): + keys = list(self.dataset.keys()) + print(f"[DEBUG] Dataset has {len(keys)} keys") + print(f"[DEBUG] First few keys: {keys[:3]}") + + # Print structure of first data point + if keys: + first_key = keys[0] + print(f"[DEBUG] Structure of first data point (key={first_key}):") + value = self.dataset[first_key] + print(f"[DEBUG] Type: {type(value)}") + + # Handle different value types + if isinstance(value, dict): + for k, v in value.items(): + print(f"[DEBUG] {k}: {type(v)}") + if isinstance(v, list) and len(v) > 0: + print(f"[DEBUG] First element type: {type(v[0])}") + if len(v) > 1: + print(f"[DEBUG] List length: {len(v)}") + elif isinstance(value, list): + print(f"[DEBUG] List length: {len(value)}") + if value: + print(f"[DEBUG] First element type: {type(value[0])}") + elif isinstance(value, str): + print(f"[DEBUG] String value: {value[:50]}{'...' if len(value) > 50 else ''}") + else: + print(f"[DEBUG] Value: {value}") + else: + print(f"[DEBUG] Dataset is not a dictionary. Type: {type(self.dataset)}") + + # Print processed data summary + print(f"[DEBUG] Processed {len(self.hamiltonians)} Hamiltonians") + print(f"[DEBUG] Processed {len(self.bond_lengths)} bond lengths") + + if self.hamiltonians and self.bond_lengths: + print(f"[DEBUG] First Hamiltonian coeffs: {self.hamiltonians[0]['coeffs'][:3]}...") + print(f"[DEBUG] First bond length: {self.bond_lengths[0]}") + + except Exception as e: + print(f"[DEBUG] Error in debug_dataset_structure: {e}") + + +# Device selection +def get_device(n_qubits: int, noisy: bool = False, noise_level: float = 0.05) -> qml.Device: + if noisy: + # Use mixed state simulator for noise + dev = qml.device("default.mixed", wires=n_qubits) + else: + # Use standard qubit simulator + dev = qml.device("default.qubit", wires=n_qubits) + return dev + +def optimize_vqe(dev, hamiltonian, wires, max_steps=100, stepsize=0.1, noise_level=0.05): + n_qubits = len(wires) + init_params = qml.numpy.array(np.random.uniform(0, 2*np.pi, size=(2, n_qubits*3)), requires_grad=True) + + @qml.qnode(dev) + def circuit(params): + vqe_ansatz(params, wires=wires) + if dev.name == "default.mixed": + apply_noise(wires=wires, noise_level=noise_level) + return qml.expval(hamiltonian) + + print(qml.draw(circuit)(init_params)) + + opt = AdamOptimizer(stepsize) + params = init_params + + for step in range(max_steps): + params, energy = opt.step_and_cost(circuit, params) + print(f"Step {step}: Energy = {energy:.6f}") + return energy, params + + +# Quantum chemistry circuits +def vqe_ansatz(params: np.ndarray, wires: List[int]) -> None: + n_qubits = len(wires) + n_layers = params.shape[0] + + # Apply parameterized rotations and entangling layers + for layer in range(n_layers): + # Rotation layer + param_width = params.shape[1] + for i in range(n_qubits): + if i*3 + 2 >= param_width: + break # prevent out-of-bounds access + qml.RY(params[layer, i*3], wires=wires[i]) + qml.RZ(params[layer, i*3+1], wires=wires[i]) + qml.RY(params[layer, i*3+2], wires=wires[i]) + + # Entangling layer + for i in range(n_qubits): + qml.CNOT(wires=[wires[i], wires[(i+1) % n_qubits]]) + +# Noise model +def get_phase_damping_kraus(prob): + K0 = np.array([[1, 0], [0, np.sqrt(1 - prob)]]) + K1 = np.array([[0, 0], [0, np.sqrt(prob)]]) + return [K0, K1] + +def apply_noise(wires: List[int], noise_level: float = 0.05) -> None: + for wire in wires: + qml.QubitChannel(get_phase_damping_kraus(noise_level), wires=wire) + +# Hamiltonian construction +def construct_hamiltonian(coeffs: List[float], observables: List[List[str]]) -> qml.Hamiltonian: + obs_list = [] + + for obs_terms in observables: + pauli_product = [] + for wire, term in enumerate(obs_terms): + if term == "I": + continue + elif term == "X": + pauli_product.append(qml.PauliX(wire)) + elif term == "Y": + pauli_product.append(qml.PauliY(wire)) + elif term == "Z": + pauli_product.append(qml.PauliZ(wire)) + else: + raise ValueError(f"Unknown Pauli term: {term}") + + if pauli_product: + obs = qml.prod(*pauli_product) if len(pauli_product) > 1 else pauli_product[0] + else: + obs = qml.Identity(0) # Default to Identity on wire 0 if all were "I" + + obs_list.append(obs) + + if len(coeffs) != len(obs_list): + raise ValueError(f"Mismatch: {len(coeffs)} coeffs vs {len(obs_list)} observables") + + return qml.Hamiltonian(coeffs, obs_list) + + +# Distributed circuit execution tasks +def run_qchem_circuit_task(parameters: Dict, hamiltonian_data: Dict, + use_noise: bool = False, noise_level: float = 0.05) -> Dict: + try: + print(f"[INFO] Running QChem circuit with use_noise={use_noise}, noise_level={noise_level}") + + n_qubits = len(hamiltonian_data["observables"][0]) + if n_qubits > 12: + print(f"[WARNING] Skipping Hamiltonian with {n_qubits} qubits — too large for memory.") + return {"energy": None, "qubits": n_qubits, "skipped": True} + + circuit_depth = parameters['circuit_depth'] + + # Create device + dev = get_device(n_qubits, noisy=use_noise, noise_level=noise_level) + + # Extract Hamiltonian data + coeffs = hamiltonian_data['coeffs'] + observables = hamiltonian_data['observables'] + + print(f"[DEBUG] Coeffs: {coeffs}") + print(f"[DEBUG] Observables: {observables}") + + hamiltonian = construct_hamiltonian(coeffs, observables) + + # Generate random parameters if none provided + if 'circuit_params' in parameters: + params = parameters['circuit_params'] + else: + # Each qubit needs 3 params per layer (RY, RZ, RY) + params = np.random.uniform(0, 2*np.pi, size=(circuit_depth, n_qubits*3)) + + # Optimize using VQE + start_time = time.time() + energy, optimized_params = optimize_vqe( + dev, hamiltonian, wires=list(range(n_qubits)), + max_steps=parameters.get("max_steps", 100), + stepsize=parameters.get("stepsize", 0.1), + noise_level=noise_level if use_noise else 0.0 + ) + end_time = time.time() + + # Store optimized circuit drawing + @qml.qnode(dev) + def final_circuit(): + vqe_ansatz(optimized_params, wires=range(n_qubits)) + return qml.expval(hamiltonian) + + return { + "energy": float(energy), + "execution_time": end_time - start_time, + "use_noise": use_noise, + "noise_level": noise_level, + "bond_length": hamiltonian_data.get("bond_length", 0.0) + } + + except Exception as e: + print(f"[ERROR] Circuit execution failed: {e}") + import traceback + traceback.print_exc() + return {"error": str(e), "energy": None} + +# Quantum chemistry mini app +class QChemMiniApp: + def __init__(self, cluster_config: Dict, dataset_path: str, + parameters: Optional[Dict] = None, + scenario_label: str = "QChem VQE Demo"): + + self.executor = MiniAppExecutor(cluster_config).get_executor() + self.dataset_loader = QChemDatasetLoader(dataset_path) + self.dataset, self.metadata = self.dataset_loader.load() + + # Debug dataset structure + self.dataset_loader.debug_dataset_structure() + + # Set default parameters if none provided + if parameters is None: + n_qubits = self.dataset_loader.get_number_of_qubits() + parameters = { + 'n_qubits': n_qubits, + 'circuit_depth': 2, + # Each qubit needs 3 params per layer (RY, RZ, RY) + 'circuit_params': np.random.uniform(0, 2*np.pi, size=(2, n_qubits*3)) + } + + self.parameters = parameters + self.scenario_label = scenario_label + self.cluster_config = cluster_config + + # Set up results directory and file + self.current_datetime = datetime.datetime.now() + self.timestamp = self.current_datetime.strftime('%Y-%m-%dT%H:%M:%S') + self.file_name = f"qchem_vqe_results_{self.timestamp}.csv" + + script_dir = os.path.dirname(os.path.abspath(__file__)) + self.result_dir = os.path.join(script_dir, "results") + if not os.path.exists(self.result_dir): + os.makedirs(self.result_dir) + self.result_file = os.path.join(self.result_dir, self.file_name) + + # Create metrics file writer + header = ["timestamp", "scenario_label", "num_qubits", "compute_time_sec", + "use_noise", "noise_level", "bond_length", "energy"] + self.metrics_file_writer = MetricsFileWriter(self.result_file, header) + + def run_experiment(self, data_index: int, use_noise: bool = False, noise_level: float = 0.05) -> Dict: + start_time = time.time() + + # Get Hamiltonian data + coeffs, observables = self.dataset_loader.get_hamiltonian(data_index) + bond_length = self.dataset_loader.get_bond_length(data_index) + + hamiltonian_data = { + 'coeffs': coeffs, + 'observables': observables, + 'bond_length': bond_length + } + + # Submit task to executor + future = self.executor.submit_task( + run_qchem_circuit_task, + self.parameters, + hamiltonian_data, + use_noise=use_noise, + noise_level=noise_level + ) + + # Get result + result_dict = self.executor.get_results([future])[0] + end_time = time.time() + compute_time_sec = end_time - start_time + + # Extract result from dictionary + energy_value = result_dict.get("energy", None) + + # Record results + self.metrics_file_writer.write([ + self.timestamp, + self.scenario_label, + self.parameters['n_qubits'], + compute_time_sec, + use_noise, + noise_level, + bond_length, + energy_value + ]) + + return result_dict + + def run_parallel_bond_length_study(self, use_noise: bool = False, + noise_level: float = 0.05) -> List[Dict]: + start_time = time.time() + + # Get total number of data points + num_data_points = self.dataset_loader.get_num_data_points() + print(f"[INFO] Running parallel calculations for {num_data_points} bond lengths") + + # Create list of futures for all tasks + futures = [] + for data_index in range(num_data_points): + # Get Hamiltonian data + coeffs, observables = self.dataset_loader.get_hamiltonian(data_index) + bond_length = self.dataset_loader.get_bond_length(data_index) + + hamiltonian_data = { + 'coeffs': coeffs, + 'observables': observables, + 'bond_length': bond_length + } + + # Submit task to executor + futures.append(self.executor.submit_task( + run_qchem_circuit_task, + self.parameters, + hamiltonian_data, + use_noise=use_noise, + noise_level=noise_level + )) + + # Get all results + results = self.executor.get_results(futures) + end_time = time.time() + total_compute_time = end_time - start_time + + # Record results + for i, result_dict in enumerate(results): + bond_length = self.dataset_loader.get_bond_length(i) + energy_value = result_dict.get("energy", None) + + self.metrics_file_writer.write([ + self.timestamp, + f"{self.scenario_label}_parallel", + self.parameters['n_qubits'], + total_compute_time / len(results), # Approximate per-task time + use_noise, + noise_level, + bond_length, + energy_value + ]) + + print(f"[INFO] Completed {len(results)} parallel bond length calculations in {total_compute_time:.2f} seconds") + return results + + def plot_potential_energy_surface(self, results: List[Dict], save_path: Optional[str] = None) -> None: + # Extract bond lengths and energies + bond_lengths = [] + energies = [] + + for result in results: + if "energy" in result and result["energy"] is not None: + bond_lengths.append(result["bond_length"]) + energies.append(result["energy"]) + + # Sort by bond length + sorted_data = sorted(zip(bond_lengths, energies)) + bond_lengths = [x[0] for x in sorted_data] + energies = [x[1] for x in sorted_data] + + # Create plot + plt.figure(figsize=(10, 6)) + plt.plot(bond_lengths, energies, 'o-', color='blue', markersize=8) + plt.xlabel('Bond Length (Å)') + plt.ylabel('Energy (Hartree)') + plt.title('H₂ Potential Energy Surface from VQE') + plt.grid(True) + + # Find minimum energy point + min_energy_idx = energies.index(min(energies)) + min_bond_length = bond_lengths[min_energy_idx] + min_energy = energies[min_energy_idx] + + plt.plot(min_bond_length, min_energy, 'ro', markersize=10) + plt.annotate(f'Equilibrium: {min_bond_length:.2f} Å, {min_energy:.6f} Ha', + xy=(min_bond_length, min_energy), + xytext=(min_bond_length+0.2, min_energy+0.01), + arrowprops=dict(facecolor='black', shrink=0.05, width=1.5)) + + if save_path is not None: + plt.savefig(save_path, dpi=300, bbox_inches='tight') + print(f"[INFO] Saved potential energy surface plot to {save_path}") + + plt.show() + + def close(self) -> None: + """Clean up resources.""" + if hasattr(self, 'metrics_file_writer'): + self.metrics_file_writer.close() + +# Main execution +if __name__ == "__main__": + RESOURCE_URL_HPC = "ssh://localhost" + WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + + cluster_info = { + "executor": "pilot", + "config": { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] + } + } + + # Path to the H2 molecule dataset + dataset_path = "/scratch/4891333/pq/examples/DD/pennylane-datasets/content/qchem/h2-molecule" + + try: + # Display introductory message + print("\nQuantum Chemistry with Variational Quantum Eigensolver") + print("This application demonstrates quantum chemistry calculations with:") + print(" 1. H2 molecule data from PennyLane Datasets") + print(" 2. Distributed execution via Pilot Quantum") + print(" 3. Noise simulation with PennyLane's mixed state simulator") + print(" 4. VQE optimization using Adam optimizer") + + # Create QChem mini-app + qchem_app = QChemMiniApp(cluster_info, dataset_path) + + # Use a fixed noise level of 0.05 + NOISE_LEVEL = 0.05 + + # Run first for a single bond length (index 0) + #print("\nRunning VQE for single bond length...") + #ideal_result = qchem_app.run_experiment(0, use_noise=False) + #print(f" Energy: {ideal_result['energy']:.6f} Hartree") + #print(f" Bond length: {ideal_result['bond_length']} Å") + + # Run parallel execution for all bond lengths + print("\nRunning parallel VQE calculations for all bond lengths...") + pes_results = qchem_app.run_parallel_bond_length_study(use_noise=False) + + # Plot the potential energy surface + plot_path = os.path.join(qchem_app.result_dir, f"h2_pes_plot_{qchem_app.timestamp}.png") + qchem_app.plot_potential_energy_surface(pes_results, save_path=plot_path) + + # Run noisy simulations + #print("\nRunning VQE with noise simulation...") + #noisy_result = qchem_app.run_experiment(0, use_noise=True, noise_level=NOISE_LEVEL) + #print(f" Energy with noise: {noisy_result['energy']:.6f} Hartree") + #print(f" Bond length: {noisy_result['bond_length']} Å") + + # Run noisy parallel execution + #print("\nRunning parallel noisy VQE calculations...") + #noisy_pes_results = qchem_app.run_parallel_bond_length_study(use_noise=True, noise_level=NOISE_LEVEL) + + # Plot the noisy potential energy surface + #print("\nPlotting noisy potential energy surface...") + #noisy_plot_path = os.path.join(qchem_app.result_dir, f"h2_noisy_pes_plot_{qchem_app.timestamp}.png") + #qchem_app.plot_potential_energy_surface(noisy_pes_results, save_path=noisy_plot_path) + + print("\nQChem MiniApp execution completed successfully!") + + # Clean up resources + qchem_app.close() + + except Exception as e: + print(f"[ERROR] QChem MiniApp execution failed: {e}") + import traceback + traceback.print_exc() \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/notebook/vqe_dd.ipynb b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/notebook/vqe_dd.ipynb new file mode 100644 index 0000000..4503ec0 --- /dev/null +++ b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/notebook/vqe_dd.ipynb @@ -0,0 +1,491 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "paths = {\n", + " \"ideal\": \"VQA+DD - ideal_0.62_h2.csv\",\n", + " \"noisy\": \"VQA+DD - noisy_0.62_h2.csv\",\n", + " \"dd\": \"VQA+DD - dd_0.62_h2.csv\"\n", + "}\n", + "\n", + "df_ideal = pd.read_csv(paths[\"ideal\"])\n", + "df_noisy = pd.read_csv(paths[\"noisy\"])\n", + "df_dd = pd.read_csv(paths[\"dd\"])\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(df_ideal[\"Step\"], df_ideal[\"Energy (Hartree)\"], label=\"Ideal\", linestyle='--', marker='o')\n", + "plt.plot(df_noisy[\"Step\"], df_noisy[\"Energy (Hartree)\"], label=\"Noisy\", linestyle=':', marker='x')\n", + "plt.plot(df_dd[\"Step\"], df_dd[\"Energy (Hartree)\"], label=\"Noisy + DD\", linestyle='-', marker='s')\n", + "\n", + "plt.xlabel(\"VQE Step\")\n", + "plt.ylabel(\"Energy (Hartree)\")\n", + "plt.title(\"VQE Optimization with and without DD (Bond length = 0.62 Å)\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"vqe_dd_comparison_0.62A.png\", dpi=300, bbox_inches='tight')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAGoCAYAAABbtxOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3xUVf7/8ddJIaGXAIFAJIB0CQRQikgVkbXjCixdVGyA7Oru6qq7+nP3K6uuBRtfFQUEReGLyKqrq2KIKBaKdFF67zXUlPP7497AEFImmUnuJHk/H495ZG4793PnzmQ+98y55xhrLSIiIiIi4gjzOgARERERkVCiBFlERERExIcSZBERERERH0qQRURERER8KEEWEREREfGhBFlERERExIcSZBEREQl5xpi/G2P2GGMe9zoWKf2UIIuIiEhIM8ZUB34DNAL6GmOqeRySlHJKkEVKOGPMRcaYVGNMeCG3TzXGNAqlmIpj/8YYa4y5uDjjcveb4O47IsBy8jxvxpjNxpgrA9lHKDLG1DLGrDPGRHuw75HGmIW5LAvKeQ12XKXIUWAPEAXsdqcBMMYkGmO+9SowKZ2UIEuZZIz5zBjz/3KYf4MxZnfWl5wxposxZr4x5pgx5ogxZp4xprnP+j2MMZlusuL76JzHvkcaY1YaY064+3q1ILUh2RMfa+1Wa20la22G/6/AOe62GwuzbVHFFKjs+zfGJBtjbvcilqLie96MMVOMMX8vjv36k4y5r/cp93Nz1BizxBjzoDEmymedx4wxae46x4wxvxhjXjLG1M0nhAeBt6y1p7LtK9X9jKYYY1oHfqShyeNEPMEY85X7v+vnvC7AjDFRxphJbpOIg8aYfxtj6rnLahtj3jXG7HTP2TfGmI557dv9LK8ADgDrrLWZPstWAIeNMdcF50hFlCBL2TUFGGaMMdnmDwNmWGvT3ST3v8CHQBzQEOcf9DfGmASfbXa6yYrvY1FOOzXG3A/8E/gjUBXoBDQAPjfGlAva0Yl4b4y1tjJQF7gfGAR8ku0z9567Tg3gJqAOsCS3JNlNsEcA03PYVyUgBkgG3g7mgchZ7wLLcF7nh4HZxphauax7H9AZSMT5/3kYeNFdVgn4EWiPc+6nAh8bYyrls//fAgeBm3NYNgO40+8jEcmPtVYPPcrcAygPHAG6+cyrDpwC2rjTXwOv5LDtf3BqsAB6ANv93GcVIBUYkG1+JWAvMMqdfgyYDbwHHAOW+sT0NpAJnHTL+hOQAFggwl0nGfg78K27zr9xvtBm4Pws+SOQ4LN/C1yM8yWW6vM44fyLsACNgfk4tTf73bKqFSCmOGAezpfbeuAOn/0/BrwPTHOPdzXQIZfX8HHgRfd5JHAceMrnnJ5yz+PZ/QP/ADLcZanASz7HfRfwK3AIeBkwuez3MmARzpf8LuAloFy21zDHsoBw4Bn3ddsI3Ov72mTbz63Av32m1wPv+0xvA9pmO2+jgTTgTNb5dpdvBh7Auag7gvN+ivYp6w63/IPuuYlz55937nzeU7cDLdzXMcPd1+FcXq9k4PZs8y7CeU9d63Pep2dbJxxYDjyTS7ndgPV57QtoCZzxmY4Cngd2uo/ngSjfzy9OAr/XPbe3+mwb4742R4EfgCeAhbnEdt7rhnMBPNktcwfOZzLcXTYSWOi+Lw4Bm4B+PmU1BFJwPg9fuO+n6e6yre5+sj6nnfMrL0j/M5sCp4HKPvO+Bu7KZf1XcT+b7vQ1ODW/uZV/FGifx/LO7nHf7P7tmG15PZz/QVHBPG49yu5DNchSJllrT+IkZcN9Zg8AfrbWLjfGVAC6ALNy2Px94KpC7LYLEA3MyRZLKk7S3cdn9g3uvmsA7wBzjTGR1tphOF+Q11mnpvqpXPY1CKc2vB5OcrsIeMstby3wt+wbWGvPqwkHPgBmuosN8CROotsCiMdJcPAzpndxEpE4nFqg/zHG9PZZfr27r2o4CclLuRzXApykBuBSnLaI3d3pzjhfwIeyHdfDOF/kY9z4xvgsvtYtpw3O+e+by34zgN8DNd399AbuybZObmXd4S5LAjq4x5+bBcAVxpgwtxY1ErgcwG1vXAkn4fU9vtdwLlieco/P92fmAcDVOAlXIk4ihTGmF875HIBTw7uFc+c6V9batTgXAovcffndNMhauxVYDFyRxzoZOL/Y5LZOa2Bdbtu7v8IMAb7zmf0wzi81bXHOzWXAIz7L6+Aks/WA24CXjXNDGDiJ6Smc12iU+/DXVCAd5yImCed/hm8zn47usdQEngIm+9Suv4OTkMfgfM6G+WzXzf1bzZ7/a1Ve5Z3HGPORMeZwLo+PcjmeVsBGa+0xn3nL3fk5mQxcboyJc/+fDsH5P5dTPG2BcjgXbLkZAiyz1v4f8JM7fZa1dgfOhWKzPMoQ8ZsSZCnLpgK3GGPKu9PD3XngJJJhOLU/2e0CfH9WjMvhS6ZiDtvVBPZba9NzKbOmz/QSa+1sa20a8CxOYt3J7yNzarg3WGuP4HwpbbDWfuHuexbOF3aujDF/BprjJgTW2vXW2s+ttaettfvcmLrnVYZPWfFAV+DP1tpT1tqfgDc4/0t/obX2EzdBehsnkcnJIqCJMSYGJ1GYDNRzf5rtjpNgFsQEa+1hN3n7CieJuoC1dom19jtrbbq1djPwv1x4/LmVNQB43lq7zVp7ECcxzZF12hQfc7ftDnwG7HDbvXcHvrY+bS/9MNG98DmI80tCVkxDgDettUuttaeBh4DO2ZoOFYWdOJ+twq5TDef1yW6iMeYwTo3qGJxfGrIMAf6ftXav+959nPPfe2nu8jRr7SduGc2Mc4PnzcBfrbXHrbWrOPf/IU/GmFigHzDe3XYv8BzOhWuWLdba1933/FScJDzWGHMRzoXWX621Z6y1C3EuGvOTY3k5rWitvdZaWy2Xx7W5lF8J55cIX0eAyrms/wvOhfMOnNrhFkBO931UwfnMP+7+v7qA2956AM6FA+7fAebCm3CP4bxHRAKmBFnKLPeLZx9wg1s7dynn/gEfwmk2kFNbyLrudll25vAlczyH7fYDNXO5uaauuzzLNp84MzlX++qvPT7PT+YwnWtbP2NMP5z2gze6Ne1ZN9XMNMbsMMYcxWkDWjO3MrKJAw5mq3naglNjl2W3z/MTQHROr5Mbz2KcZLEbTkL8LU4ta2ES5Oz7zfF1McY0dWvddrvH/z9cePy5lRWHz/nEOfa8ZNWSZx1fMs6xBfP44nzjcH/FOMD556Qo1MNp0lHYdQ6Rc0I2zq3NjsaprZ9tjEl0l513rO5z38/SgWwXrVmvUy2cJjoFOXdZGuDU/u/KumjGuaiq7bPO2XNjrT3hPq3Euc/LCZ91fWPITW7lBUsqTjMxX1XI+YIFnCYW0Ti14BVxfjk7rwbZrZz4N/CdtTbXC0ec2vcYnF+icP/WArLfJFgZpxmUSMCUIEtZNw2n5ngY8F9r7R4AN8FdBNySwzYDKHiiglveaaC/70y3trkf8KXP7Hif5WFAfZyaNXDa3xUJY0wznNqnAdZa3y/lJ939JlprqwBDcZpdZMkrpp1ADWOMb2JzEU7NUmEsAHrh1IL/6E73xfnpPCWXbQJ9zV4FfgaauMf/F84//rzswud84hx7XrIS5Cvc5wvIP0Eu6PHtxEnigLPvwRicc5J1cVfBZ/06Aewrax/xODdlfZ3HOmHAdXmsswKnLWyOrLWZ1tqvcX6qz2oGdd6x4rz+O7Nvm4N9OE0kCnLusmzD+azX9LlormKtza05gq9dOJ8X39ffN4aAP//GmP+YC3veyXrk2AwC596ARtk+x23c+TlpA0yx1h50f6V4EbjMGFPTjSEKmIvznsvv5rqs5hRLjDG7cS6SAQb7HFMcTjONXJvgiBSEEmQp66bh1ELcwYU/nz4IjDDGjDPGVDbGVDdOV1rdyONn8ty4Px8+DrxojLnaGBPp/qQ9C6eG2PfO+/bGmP5uLep4nC/brHaVe3A6yw8q96fOD4FH3Np1X5Vxb8pyu2r6Y7blucbkJtrfAk8aY6Ldmr3bcNrNFsYCnIuaNdbaM5y7gWyT+xN6TgJ9zSrj/Eyc6jZ3uLsA274PjDPG1Hfbtj6Yz/oLgJ5AeWvtdpxk8WqcBHZZLtsU9PjeAW41xrR1E5X/Ab631m52X8MdwFBjTLgxZhROO3bffdX3t9cVY0wFY0x3nPfWD8AnOawTaYxpgVMzWAenCU9OfgCqZXUXlsv+OuPcqJeVuL0LPGKc/pNrAn/lwl4wLuA2VZgDPOYeQ0ucHjTyZa3dhdMDzr+MMVXcNuWN3dchv2234CSAjxljyrnH49uufB/Or1uFfj9ba/vZC3veyXr0y2WbX3Da/v7N/RzfhNOu/f9y2c2PwHBjTFVjTCROm/2d1tr97vRsnF+zhufVbMi9eLsB52bUtj6P24CbfJrI9QDmu8m4SMCUIEuZ5rYn/RbnJ8B52ZYtxKmZ7I9Tq3MQ5wuyl7V2pc+qcTnUwuTUDRHWuYHtLzh3mx8Fvsepbeqd7R/7h8BAnJ+UhwH93fbI4CTnj7g/3T5Q+KO/QDucG1ye9T0Wd9nj7vIjwMdku9HQj5h+h3OX/06cm//+Zq39vJBxfovTY0VWbfEanBupcqs9BngB+K0x5pAxZmIh9vkATm3VMeB1nB4h/PU6Tlvi5Tg9kmR/7c7jJiKpuLWo1tqjOL1ffGNz71d6MtDSff3n5heQtfZL4FGc5GYXTgLs2z72DpyLoAM4N2H5DsIwHyf53G2M8W0WlN1LxphjOAn18+6+rs6WDA1032OHcT5/B3B6Msixhte9IJqC8wtG9n1lvV/fxrnIy6oJ/TtOwrkCWIlzDvztM3oMTjOF3e5+3/JzO3Au4srhvD8P4SSE+fXxnGUIzs2gB9xY38O5SM5qPvEPnO4mDxtjCnJvQqAG4dxoegiYAPw266LUGHOFz/8LcD4zp3B6dtmHMwreTe6yLjhNYa7CuejO+n+T082ZN+J87qZZa3dnPXAuco5x7uJhCDApeIcqZV1WN0Qikg9jTBuc5GCwtfazItzPY8DF1trsSYBImWecfne/BpKy2siXdsaY93B62Lmg9xkB4wwM85q1NtcBmkQKSjXIIn6y1i7Hqc1oncuNdiJSxKy1+6y1zUtzcmyMudRtkhFmjLkap4lBvr8MlFXW2pVKjiXY9CUvUgDuDUC53mQkIhIEdXCa4sTg3J9wt7U2t/bnIlIEPG1i4V4Zv4AzetIb1toJ2ZYPAf7sTqbi/JNYXrxRioiIiEhZ4lmC7Hbw/QvO6GHbce54/Z21do3POl2AtdbaQ27frI9Zazt6ErCIiIiIlAleNrG4DFjvjhyFMWYmTjurswmytdb3zunvcPqCzVfNmjVtQkJC8CL1w/Hjx6lYMafB06S00bkuW3S+yw6d67JD57psyX6+lyxZst9aWyuPTTxNkOtx/uhA23HGks/NbeQyjjuAMWY0Tj+JxMbG8swzzwQjRr+lpqZSqVIwBy2SUKVzXbbofJcdOtdlh8512ZL9fPfs2TPfUTG9TJBzGoUqx/YexpieOAly19wKs9a+BrwG0KFDB9ujR48ghOi/5ORkinuf4g2d67JF57vs0LkuO3Suy5bCnG8vE+TtnD98pu9Qume5o269AfSz1h4opthEREREpIzysh/kH4EmxpiG7pClg8g2kpkx5iKcrm6GuaNLiYiIiIgUKc9qkK216caYMThDsIYDb1prVxtj7nKXTwL+itMP5CvGGIB0a20Hr2IWERERKay0tDS2b9/OqVOnvA6lTIiOjqZ+fb/6d7iApwOFWGs/AT7JNm+Sz/PbgduLOy4RERGRYNu+fTuVK1cmISEBt+JPioi1lgMHDrB9+/ZCba+hpkVERESKwalTp4iJiVFyXAyMMcTExBS6tl4JsoiIiEgxUXJcfAJ5rZUgi4iIiIj4UIIsIiIiUkbkNkDKyJEjmT17dqHKfOyxx4p9gLai5ulNeiIiIiKSs7nLdvD0Z+vYefgkcdXK88e+zbgxqZ7XYZUJqkEWERERCTFzl+3goTkr2XH4JBbYcfgkD81ZydxlO4JSvrWWMWPG0LJlS6655hr27t17dtmSJUvo3r077du3p2/fvuzatQuA119/nUsvvZQ2bdpw8803c+LEiaDEEopUgywiIiLigYH/u+iCedcm1mVY5wSe+vRnTqZlnLfsZFoGj/17NTcm1ePg8TPcPX3Jecvfu7Oz3/v+4IMPWLduHStXrmTPnj20bNmSUaNGkZaWxtixY/nwww+pVasW7733Hg8//DBvvvkm/fv354477gDgkUceYfLkyYwdO7YQRx76lCAHYuHzUK8dNOx2bt6mFNixFLqO9y4uERERKdF2Hcm5e7LDJ9KCUn5KSgq/+93vCA8PJy4ujl69egGwbt06Vq1aRZ8+fQDIyMigbt26AKxatYpHHnmEw4cPk5qaSt++fYMSSyhSghyIeu1g1ki4ZYozvSnl/GkRERGRXORV4xtXrTw7Dp+8YH69auUBqFGxXIFqjHOSUzdo1lpatWrFokUX1m6PHDmSuXPn0qZNG6ZMmUJycnJA+w9laoMciIbdnGR41kgSl/8V3h/uTPvWKIuIiIgU0B/7NqN8ZPh588pHhvPHvs2CUn63bt2YOXMmGRkZ7Nq1i6+++gqAZs2asW/fvrMJclpaGqtXrwbg2LFj1K1bl7S0NGbMmBGUOEKVapAD1bAbtOpPjR9fh4QrlByLiIhIwLJ6qyiqXixuuukm5s+fT+vWrWnatCndu3cHoFy5csyePZtx48Zx5MgR0tPTGT9+PK1ateKJJ56gY8eONGjQgNatW3Ps2LGgxBKKlCAHalMKrJ7D9rh+1N/7gzOtJFlEREQCdGNSvaB365aamgo4zSteeumlHNdp27YtKSkpF8y/++67ufvuuy+Y/9hjjwU1xlCgBDkQPm2O12/JpH6De5xmFrGt4JapULGm1xGKiIiISAGpDXIgdiw9v81xw27Q/c/O/AMbPA1NRERERApHNciByKkrt053Q9IwiHKHcszMhDBdh4iIiIiUFMrcikJWcrzmQ5h8JZw46G08IiIiIuI3JchFKbIilKsIYaqoFxERESkplLkVpSZXwsW9wRjISIe04xBd1euoRERERCQPqkEualmj1Hx4D0y7AdLPeBuPiIiIlFnGGO6///6z088880y+3bRNmjSJadOmFXFkoUUJcnFp1R9aD4CIcl5HIiIiIqFu4fNOd7K+NqU48wMQFRXFnDlz2L9/v9/b3HXXXQwfPjyg/ZY0SpCLS7OrofM9zvMDG+DUEW/jERERkdBVr50z1kJWkpw19kK9dgEVGxERwejRo3nuuecuWLZlyxZ69+5NYmIivXv3ZuvWrYAzEMgzzzwDwMSJE2nZsiWJiYkMGjSIzMxMmjRpwr59+wDIzMzk4osvLlACHoqUIBe3tFMw9Xr44MKRaERERKQMeesaWDbDeZ6R5kwvf8+ZrtcBKteFd38H8/8B749wpk8edpYfP+Csv+4/zvSxPX7v9t5772XGjBkcOXJ+Zd2YMWMYPnw4K1asYMiQIYwbN+6CbSdMmMCyZctYsWIFkyZNIiwsjKFDhzJjhnMcX3zxBW3atKFmzZI9WJoS5OIWGQ3XPANX/s3rSERERCSURVeDxj0h5SlnjIXoakEptkqVKgwfPpyJEyeeN3/RokUMHjwYgGHDhrFw4cILtk1MTGTIkCFMnz6diAinr4dRo0adbaP85ptvcuuttwYlTi8pQfZCs35Qq5nzfOVsOH3M23hERESk+N36MSQNcZ6HRzrTbQY60+UqQI8/w5Zvoduf4KfpznTL653lFWOc9Zv1c6YrxxZo1+PHj2fy5MkcP34813VMVkcDPj7++GPuvfdelixZQvv27UlPTyc+Pp7Y2Fjmz5/P999/T79+/QoUSyhSguylAxvggzth0cteRyIiIiKhJKvN8S1ToNfDzl/fNskBqlGjBgMGDGDy5Mln53Xp0oWZM2cCMGPGDLp27XreNpmZmWzbto2ePXvy1FNPcfjwYVJTUwG4/fbbGTp0KAMGDCA8PDwoMXpJCbKXYhrDyI/hivvzX1dERETKjh1LnaS4YTdnumE3Z3rH0qDt4v777z/vZrqJEyfy1ltvkZiYyNtvv80LL7xw3voZGRkMHTqU1q1bk5SUxO9//3uqVXOafVx//fWkpqaWiuYVoIFCvHdRJ+fv6WPw1ZPOVWK5it7GJCIiIt7qOv7CeQ27nUuYCymrxhcgNjaWEydOnJ1OSEhg/vz5F2zj209yTu2SAZYvX06bNm1o3rx5QPGFCtUgh4qt38OPb8D2H72ORERERMRvEyZM4Oabb+bJJ5/0OpSgUYIcKppcCff9BI16eB2JiIiIiN8efPBBtmzZckGb5ZJMCXIoqRLn/N38Dbw7GNJOehuPiIiISBmkBDkUHdkOBzfC6dT81xURERGRoNJNeqGozUBodRNElANrndF1Isp5HZWIiIhImaAa5FCVlRC/eTW8eRWknzm3bFMKLHzem7hERERESjklyKEu/jLYuxa2LnKmszoOr9fO07BERESk5DHGcP/958ZfeOaZZ87rxi0nkyZNOjuUdHFJSEigdevWtG7dmpYtW/LII49w+vRpADZv3kz58uVJSkqiRYsWXHbZZUydOjWo+1cTi1B31RPQpI+TFLfqD6tmw4BpAfeDKCIiIqGrx3s9OHDqwAXzY6JjSB6YXOhyo6KimDNnDg899BA1a9b0a5u77rqr0PvLyciRIxk5ciQ9evTIc72vvvqKmjVrkpqayujRoxk9evTZRLhx48YsW7YMgI0bN9K/f38yMzODNlCJapBLgobdoMMo+PF1MOHQoPR0oyIiIiIXyik5zmu+vyIiIhg9ejTPPffcBcu2bNlC7969SUxMpHfv3mzduhVwBgp55plnAGe0vZYtW5KYmMigQYPIzMykSZMm7Nu3D3CGo7744ovPG6EvUJUqVWLSpEnMnTuXgwcPXrC8UaNGPPvss0ycODFo+1QNckmwKQUWv+kkyStnw5aFkHCFs8wYb2MTERGRAvvnD//k54M/F2rbWz/NuZa0eY3m/PmyP+e7/b333ktiYiJ/+tOfzps/ZswYhg8fzogRI3jzzTcZN24cc+fOPW+dCRMmsGnTJqKiojh8+DBhYWEMHTqUGTNmMH78eL744gvatGnjd+20v6pUqULDhg359ddfiY2NvWB5u3bt+Pnnwr2eOVENcqjLanN8yxS49jkYNMOZ/u8j8O4gdQUnIiIiBVKlShWGDx9+QY3rokWLGDx4MADDhg3LcVjpxMREhgwZwvTp04mIcOpZR40adbaN8ptvvpljM4fPPvuMtm3b0rZtW+bNm8ftt99O27Zt6dixo99xW2sLtawwVIMc6nYsdZLjrDbHDbs5099PcqYjy3sVmYiIiBRSfjW9rae2znXZW1e/FfD+x48fT7t27fJss2ty+JX6448/JiUlhXnz5vHEE0+wevVq4uPjiY2NZf78+Xz//ffMmDHjgu369u1L3759Af/bIPs6duwYmzdvpmnTphw5cuSC5cuWLaNFixZ+l5cf1SCHuq7jL7whr2E3GPQO/G4mhIXDycOw/D2nz2QRERGRfNSoUYMBAwYwefLks/O6dOnCzJkzAZgxY8YFQ0dnZmaybds2evbsyVNPPcXhw4dJTXV+yb799tsZOnQoAwYMIDw8PKixpqamcs8993DjjTdSvXr1C5Zv3ryZBx54gLFjxwZtn6pBLsmyrux+fB2SJ0C99lDzYm9jEhERkYDFRMfk2otFsNx///289NJLZ6cnTpzIqFGjePrpp6lVqxZvvXV+TXVGRgZDhw7lyJEjWGv5/e9/T7Vq1QC4/vrrufXWW4PWiwRAz549sdaSmZnJTTfdxKOPPnp22YYNG0hKSuLUqVNUrlyZsWPHBnXfSpBLg65/gIY9ziXHp1MhqpKnIYmIiEjhBdKVW16yanwBYmNjOXHixNnphIQE5s+ff8E2vv0k59QuGWD58uW0adOG5s2b5xvDlClT8l1n8+bNuS5LSEjg5MmT+ZYRCDWxCNDcZTu4fMJ8Rn56nMsnzGfush3FH0RYOMRf6jzf+h08f4nzV0RERKSITZgwgZtvvpknn3zS61CCRjXIAeg8oxup6YegLlSuC0eBR1fAP9dUZ9GQFG+CqlIPGveC2sFrqC4iIiKSmwcffJAHH3zQ6zCCSjXIAUhNP1Sg+cWiWjz89k2IrgqZGfD53+DoLu/iERERkbOC3R2Z5C6Q11oJcmm2dy388BpsuLA9kYiIiBSv6OhoDhw4oCS5GFhrOXDgANHR0YXaXk0sishXW7+iU1wnykd42E9xnUtg7BKn/QfAwU1QrQGE6bpIRESkuNWvX5/t27efHZZZilZ0dDT169dny5YtBd5WCXIRGffVOKLCo+hUtxM94nvQvX53alWoVfyBVIlz/h7fD2/0hsRBcPX/FH8cIiIiZVxkZCQNGzb0OgzxgxLkIvJan9dI3pbMgu0LWLB9AQCXxFxC9/ju9IzvSdPqTXMcoabIVIiBHg9Box7Ft08RERGREsjTBNkYczXwAhAOvGGtnZBtuXGX/wY4AYy01i4t9kBzkVcn3p3jOtM5rjMPXvYgvx7+lQXbFpC8LZlXfnqFl396mToV69Cjfg96xPfg0jqXUi68XNEGawxcdse56S8eh+oNoP3Iot2viIiISAnjWYJsjAkHXgb6ANuBH40x86y1a3xW6wc0cR8dgVfdvyHBtxPvuZ/NJ6FlOy6Jq0JE+Lk2vsYYmlZvStPqTbkj8Q72n9xPyvYUkrclM3f9XGaum0mFiApcXu9yesT34Ip6V1A9+sJhFIMqIw12/QRnUvNfV0RERKSM8bIG+TJgvbV2I4AxZiZwA+CbIN8ATLPO7Z7fGWOqGWPqWmtDrt+yalFhtI2vlu96NcvXpH+T/vRv0p9T6af4YfcPTlOMbQv4fMvnhJkw2tZqS/f47vSI78GoT0flWktd6FF2wiNhyGywmbDweagcB/XbQ0xjZ/mmFNixFLqOL1z5IiIiIiWYlwlyPWCbz/R2LqwdzmmdekDIJcgAy7cd5r9rdvPAVc38al8cHRFNt3DCzvQAACAASURBVPrd6Fa/G7aTZc3BNWeT5eeWPMdzS57LdduckuYCCQsHwqFeO3i7P5SvDn9YA1sXwayRcMuUwMoXERERKaG8TJBzyiCzdwzozzrOisaMBkaDM7Z4cnJyQMEVVGpqKvO/+pFpa84Qn76TOhUL15VaK1rRqnIrDpU/xKqTq3j/4Pu5rhusY6zV7D6a/vIKO6bdQ9zOT1nbfDyHtmTCluCUX9qkpqYW+/tLvKPzXXboXJcdOtdlS2HOt5cJ8nYg3me6PrCzEOsAYK19DXgNoEOHDrZHjx5BC9QfycnJjOzYgWlrFpBRszE9OjYIuMybuIn3p+aeIC+tvJTfNPwNzar7V2Odux4wP4yElKeg2TW02TYVeg9wRuWTCyQnJ1Pc7y/xjs532aFzXXboXJcthTnfXo4Y8SPQxBjT0BhTDhgEzMu2zjxguHF0Ao6EYvvjLA1rViS2ShSLNgTY/MFPb69+m1v+fQs3fHgDry5/lS1HC94RNuC0OV48Gbr9CbYshBqNzvWfLCIiIlLGeJYgW2vTgTHAZ8Ba4H1r7WpjzF3GmLvc1T4BNgLrgdeBezwJ1k/GGLo0rsl3G4tnGMn5A+bzaKdHqRFdg1d/epVrP7iWQR8NYurqqew5vse/QjalnGtz3OthGDgddq+ALd/A6WPwzkDYvbIoD0NEREQkpHjaD7K19hOcJNh33iSf5xa4t7jjCkTnRjF8/et+9hw9TZ2qhRv/21defS1Xj67OgGYDGNBsALuP7+azzZ/xyaZPeGbxM/xr8b9oH9uefg37cVWDq6gWnUsPGzuWOslxw27OdMNuzvSOpc6Ne7tXwZnjAR+HiIiISEmhkfSC7KZ29bilQ/2gjZLnb1dudSrWYUSrEYxoNYLNRzbzn83/4T+b/sMT3z3Bk98/See4zvRr2I9eF/WiYmTFcxvm1JVbw27nEuZxSyEiynm+4n2o2xZqNQ3soERERERCmBLkIIsM97JZtyOhagJ3t7mbuxLvYt2hdXyy6RM+3fQpf1n4F6LDo+ke351+DftxRb0ruGr2VXn3s5yVHJ85Af991Emcb369eA9IREREpBgpQS4C7y/exrRFm5l3b1fCwoJTk1wYxhia12hO8xrNGd9uPMv3LefjjR/z+ZbP+WzzZ1SOrMyxtGM5bntB0lyuAtyZ4gwyAnBsD6SfcoarFhERESlFvK/uLIUiwgyrdhxl7e6jXodyVpgJI6l2Eo90eoQvb/mSSVdOoudFPQtWSOVYqFDDef7pn+GNKyHtZPCDFREREfGQEuQi0LlxDECxdfdWUBFhEVxe73L+0fUfhS/kysfh2mchsrwzrRv5REREpJRQglwE6lYtT8OaFUM2QQ6K6g2gxXXO8w1fwfOJsPMnb2MSERERCQIlyEWkU6MYfth0kPSMTK9DKbSMzAz/VqwSB416QK1mRRmOiIiISLFQglxErmoVy7Vt6nL8tJ9JpkdiomNyXfbEd0/4N+BJrWbw28lOc4uMNHh3sFOrLCIiIlICqReLItKzWW16NqvtdRj5yq2f5YlLJ/L6ytepEFmBP3b4o//9OqfugYMb4NSR4AUpIiIiUoyUIBehzEzLjsMnia9RwetQCmxs0liOpx3n7TVvUzmyMne3vdu/DavWh7sWnusObu1HsGE+tLrx3OAj4AxxvWNpzgOViIiIiHhITSyK0IRPf+aq51I4k17y2iEbY/jzZX/mhsY38MryV5i2epr/G2clx5mZsOCfsO07mDXSSYrB+TtrJNRrF+ywRURERAKmGuQi1O6iaryWspEV2w/TIaGG1+EUWJgJ47Euj3Ei/QRPL36aipEVubnpzQUoIAxu/QROH4MD6+H9EdDyelj7b7hlyvk1yiIiIiIhQglyEerYMAZjnP6QS2KCDE6fyROumMCJ9BM8vuhxKkZW5OqGV/tfQFRl51ElDmo0hiVToNMYJcciIiISstTEoghVr1iOFnWqsGhjye4PuVx4OZ7r8RxJtZN46OuHSNmeUvBCNqXAwfXQ/FpY8e655hYiIiIiIUYJchHr3DiGxVsOcSottLt7y0/5iPK83PtlmtZoyu+/+j0/7PrB/42z2hwPmAaDZjjNK94bBitnF1W4IiIiIoWmBLmIDegQz6tD2hHmbzdpIaxSuUpMunIS8ZXjGTt/LCv2rfBvwx1Lz29zfFEXiIiC+U8UWawiIiIihaUEuYg1q1OZ3i1iKRdROl7q6tHVee2q16gRXYO7v7ibXw79kv9GXcef3+Y4PAIGzoDhHxZdoCIiIiKFVDqythC3ZudRZi3e5nUYQVO7Qm1ev+p1oiOiGf3f0Ww5uqXghcRfCtUTnOcrZkHayaDGKCIiIlJYSpCLwYfLd/CXD1Zy8kzJbofsq37l+rze53UybSZ3/PcOdqXuKlxBu1fBnDtg8ZvBDVBERESkkJQgF4POjWJIy7As3nLQ61CCqlG1Rvxvn/8l9Uwqoz8fzf6T+wteSJ1LYOTH0PGu4AcoIiIiUghKkIvBpQk1iAgzfLuhZHf3lpMWMS14+cqX2XNiD3d+fidHTh8peCEJl0NYOJw4CN9NAmuDH6iIiIiIn5QgF4OKURG0ia/GolKYIAMk1U7i+Z7Ps+nIJu758h5OpJ0oXEHL3obPH4X9ftz4JyIiIlJElCAXk86NYli/N7XE94ecmy5xXXi629Os3r+acfPHcTrjdMEL6TwWRi+AWs2CH6CIiIiIn5QgF5M7ujViyaNXEh0Z7nUoRaZ3g948cfkTfL/7ex5IfoC0zLSCFRAWBrEtnefrv9BAIiIiIuIJJcjFpGr5SKIiSm9ynOW6xtfxcMeHSd6ezMMLHyYjsxA15tbColdg0ctQmO1FREREAhDhdQBlycwftvLj5kP8a0Abr0MpUoOaD+J42nGeX/o8FSMr8tdOf8UUZCRBY5yR92ymc/OeiIiISDFSDXIx2n30FHOWbefIiQI2PSiBbmt9G7e3vp3Zv8zmX4v/hS1ozxTRVaB8NchIh//8GXb5Oay1iIiISIBUg1yMujSuyfNf/Mp3mw7Qt1Udr8MpcuOSxpF6JpWpa6Yydc3UC5bHRMeQPDA570JOHoS1H0GVOKibWDSBioiIiPhQDXIxahNflejIsFLb3Vt2xhge6vhQrssPnPLjdahUG+7+Bi6/L4iRiYiIiOROCXIxiooIp0ODGny3sWwkyABhJghvsfLVnL8HNsCMW5wBRURERESKiBLkYtanZSwNYiqQnpHpdSglz7HdsGc1HN3hdSQiIiJSiqkNcjEb0SWBEV0SvA6jZEq4HMYtg4goZ9pap8cLERERkSBSDbJHTp5R/76FkpUc/zgZZo1werkQERERCSIlyB54aM5Krn3xa6/DKDYx0TEFmu+XjDOQfgYylSCLiIhIcKmJhQca1qzAuz9sZc/RU8RWifY6nCKXvSu3F5a+wBsr32BSn0mFL7TT3XDZnc7w1BnpEK63soiIiASHapA90KVxTYAy1ZuFr1svuZUq5aowcenEwAoKC4MzJ+DtG2Hhc8EJTkRERMo8JcgeaFG3ClWiI/h2fdlMkKuUq8KoS0bx9Y6vWbpnaWCFRURD1frOSHubUs5ftikFFj4fWPkiIiJS5ihB9kB4mKFToxgWldEaZIDBLQZTq3wtXlj6QsGHofYVFgY3TYIOt8KskfDLZ878TSnOdL12wQhXREREyhAlyB4Z1rkBY3pdTGZmAMlhCVY+ojx3Jt7J0r1L+XpHEG5YbNgNej4M7wyEOXc6yfEtU5z5IiIiIgWgBNkjVzSpxYAO8YSFld1+fPs37U985XgmLp1Ipg3CwCmX3Ax1LoEVM6HDbUqORUREpFCUIHtoy4HjfLthv9dheCYyLJJ7297LukPr+HTTp4EXuHsFHN0J3f4Eiydf2CZZRERExA9KkD301KfruP/95YG1wS3h+jXsR9PqTXnpp5dIy0wrfEFZbY5vmQId74ImfZ1pJckiIiJSQEqQPdSpcQy7jpxiy4ETXofimTATxrikcWw7to0Pfv2g8AXtWHquzfHOZU4zi67jnfkiIiIiBaDRFTzUuZEzktyijQdIqFnR42i8061+N5JqJzFp+SSua3wd5SPKF7yQruPPPb+4N4xdAjUaBS9IERERKTNUg+yhxrUqUrtyFN9uKLvdvQEYY7iv3X3sO7mPd39+NxgFnkuOz5Td2nkREREpHCXIHjLG0LlxDN9vPFCm2yEDtI9tT9d6XZm8cjJHzxwNTqGL34IX2sDJw8EpT0RERMoEJcgee+CqZvznviswpux295ZlXNI4jp45ypRVU4JTYL320PwayMwITnkiIiJSJihB9lh8jQrEVIryOoyQ0CKmBf0S+jF97XT2nwxC93d1E+G656FiTOBliYiISJmhBDkEvL94G68kr/c6jJBwb9K9nMk4w2srXgteofvWwbIZwStPRERESjUlyCHg+40HeT1lY5kddtpXgyoNuKnJTcz6ZRbbj20PTqHfvQL/fQTOHA9OeSIiIlKqeZIgG2NqGGM+N8b86v6tnsM68caYr4wxa40xq40x93kRa3Ho0jiGQyfSWLfnmNehhIS7Eu8i3ITzyk+vBKfAXo/CmB+hXNntSk9ERET851UN8oPAl9baJsCX7nR26cD91toWQCfgXmNMy2KMsdh0buy0kS3r3b1lia0Yy+Dmg/lo40f8eujXwAusWNN5AKSfDrw8ERERKdW8SpBvAKa6z6cCN2ZfwVq7y1q71H1+DFgL1Cu2CItRXLXyNIipwCIlyGeNumQUFSMr8uKyF4NX6P/d7jxERERE8mC86H/XGHPYWlvNZ/qQtfaCZhY+yxOAFOASa22OneQaY0YDowFiY2Pbz5w5M6gx5yc1NZVKlSoVevtpa06z/6TlD+2jgxhVyfbp4U/5+MjH/KHOH2gY1TDg8upv+xBj09kW398ZTKSQAj3XUrLofJcdOtdlh8512ZL9fPfs2XOJtbZDXtsUWYJsjPkCqJPDooeBqf4myMaYSsAC4B/W2jn+7LtDhw528eLFhYi68JKTk+nRo0eht7fWqi/kbE6knaDfnH40rtaYyVdNDpnXJ9BzLSWLznfZoXNdduhcly3Zz7cxJt8EuciaWFhrr7TWXpLD40NgjzGmrhtkXWBvTmUYYyKB/wNm+Jscl1RZyV9ZH1HPV4XICoxOHM2Pu39k0c5FwSt4YzJsXxK88kRERKRU8aoN8jxghPt8BPBh9hWMkzFOBtZaa58txtg888Cs5dz5thI3X7c0vYW4inG8sOwFMm1m4AWmn4a598A3zwdeloiIiJRKXiXIE4A+xphfgT7uNMaYOGPMJ+46lwPDgF7GmJ/cx2+8Cbd4lI8MZ+H6/aRlBCERLCXKhZfjnrb3sObAGj7f8nngBUZEwZDZcPMbgZclIiIipZInCbK19oC1tre1ton796A7f6e19jfu84XWWmOtTbTWtnUfn+RdcsnWuXEMJ85ksGL7Ea9DCSnXNrqWxlUb89Kyl0jPTA+8wNiWTqKcmek8RERERHxoJL0Q0qmR0x/ydxvV3Zuv8LBwxrYby+ajm5m3YV5wCj22GyZ1hVWzg1OeiIiIlBpKkENIjYrlaF6nsvpDzkGv+F4k1kzklZ9e4XRGEAb7qFgbYhpDdNXAyxIREZFSRQlyiBneOYFezWt7HUbIMcYwrt049pzYw8yfg9DHdVgYDHwbmvYNvCwREREpVZQgh5jBHS9iVNfAB8UojTrW7Ujnup15Y+UbpJ5JDU6hGenw0ztw5kRwyhMREZESTwlyCDp84gwb9gUpASxl7mt3H4dPH2bammnBKXDnUph7N6wu1d1si4iISAEoQQ5Bw9/8gYfmrPQ6jJDUqmYr+jTow9TVUzl46mDgBcZfBrd+Cm2HBF6WiIiIlApKkENQp0Yx/LT1MCfPZHgdSkga03YMpzJO8fqK14NTYIPOYIy6fBMRERFACXJI6twohjMZmSzZcsjrUEJSo2qNuKHxDby37j12pe4KTqHrv4CX2kPqvuCUJyIiIiWWEuQQdGnDGoSHGRZt3O91KCHr7jZ3A/Dq8leDU2C1BKhaH05pkBYREZGyTglyCKoUFUFi/arqDzkPdSvVZWCzgXy44UM2Ht4YeIE1L4YR/3b+ioiISJmmBDlE/fXaljz12zZehxHS7ki8g+jwaF766aXgFXrqCKz9KHjliYiISImjBDlEJV1UnYtrV/I6jJBWI7oGI1qN4PMtn7N6/+rgFPr1szBrBBwNUttmERERKXGUIIewect38vEKJWp5Gd5yONWiqvHC0heCU2CXsXD7F1ClbnDKExERkRJHCXIIm75oC/+bssHrMEJapXKVuL317SzatYjvd30feIEVa0JckvPc2sDLExERkRJHCXII69w4hlU7jnDkZJrXoYS0Qc0HEVshlheWvoANVlKb8gy8NzQ4ZYmIiEiJEuF1AJK7zo1jeOHLX/lh00H6tIz1OpyQFRUeRWpaKnv27yFxWuJ5y2KiY0gemFzwQiOioVwlSD8DEeWCE6iIiIiUCEqQQ1jSRdWIighj0YYDSpDzcTzteI7zD5wqZFd5XcYEEI2IiIiUZGpiEcKiIsLpkFCdrQdzTv6kGBzaDDuXeR2FiIiIFKM8a5CNMfWBQcAVQBxwElgFfAz8x1qbWeQRlnGTR1xKdGS412GUTdbCOwOdphZ3fOl1NCIiIlJMck2QjTFvAfWAj4B/AnuBaKApcDXwsDHmQWttSnEEWlYpOfaQMXDDy1AlzutIREREpBjlVYP8L2vtqhzmrwLmGGPKARcVTVji64FZy6lTJZoH+jbzOpSyp34HryMQERGRYpZrG2Tf5NgYU94Y0yzb8jPW2vVFGZw4Vu04wqQFG2j44MdcPmE+c5ft8DqkkBMTHVOg+QVy5ji8PwKWTAm8LBEREQl5+fZiYYy5HngaKAc0NMa0Bf6ftfb6og5OYO6yHazfm0p6ptO/747DJ3lozkoAbkyq52VoIcW3K7eDpw7SZ1Yfrr/4ev7W+W+BFx5ZAU4fhbSTgZclIiIiIc+fXiz+BlwGHAaw1v4EJBRhTOLj6c/WnU2Os5xMy+Dpz9Z5FFHoqxFdg+saX8e/N/ybQ6cOBV6gMTB0DnS6O/CyREREJOT5kyCnW2uPFHkkkqOdh3OutcxtvjiGthjK6YzTvL/u/eAU+M0LsCkFtv1AePoJZ96mFFj4fHDKFxERkZDhT4K8yhgzGAg3xjQxxrwIfFvEcYkrrlr5As0Xx8XVL+byuMuZuW4mZzLOBF5gvXbw3jCY3Id6Oz52kuNZI535IiIiUqr4kyCPBVoBp4F3gCPA+KIMSs75Y99mlM/W1Vv5yHD+qB4t8jWs5TD2n9zPp5s/Dbywht1g4NsQVZnw9JNOcnzLFGe+iIiIlCr5JsjW2hPW2oeBHtbaS621j1hrTxVDbIJzI96T/VtTr1p5DFCnSjRP9m+tG/T80CWuC42rNmba6mlYa/PfID8Nu0HHu2mw7f+gw21KjkVEREqpfBNkY0wXY8waYK073cYY80qRRyZn3ZhUj28e7EVi/apcXLuSkmM/GWMY1nIY6w6t48fdPwZe4KYUWDyZ3bHd4dsXYOOCwMsUERGRkONPE4vngL7AAQBr7XJAVWceuDShBj9sOsiJM+leh1JiXNPoGmpE12DammmBFZTV5viWKRypeglEVYVZI5z5IiIiUqr4kyBjrd2WbVZGEcQi+ejerBZnMjL5fuNBr0MpMaIjohnQbAALti9g85HNhS9ox9KzbY531+kF96+DAdOc+SIiIlKq+JMgbzPGdAGsMaacMeYB3OYWUrwuTahBdGQYC37Z53UoJcrAZgOJDItk+trphS+k6/izbY5tWASEhUHCFdB5TJCiFBERkVDhT4J8F3AvUA/YDrR1p6WYRUeG06lRDClKkAukZvmaXNPoGuZtmMeR00Hq0jt1L7zYHn6aEZzyREREJGTkmSAbY8KB5621Q6y1sdba2tbaodbaA8UUn2QztlcT/vnbxOD0ylCGDGs5jJPpJ5n1y6zgFFixFsRfBlXiglOeiIiIhIw8E2RrbQZQyxhTrpjikXy0b1CdSxNqYIzxOpQSpWn1pnSs25F3175LWkZa4AUaAzdNgiZ9Ai9LREREQoo/TSw2A98YYx41xvwh61HEcUkeftx8kPd+3Op1GCXO8JbD2XtyL59t+Sx4hZ45oRv1REREShl/EuSdwEfuupXdR6WiDEryNnfZDp74aC1n0jO9DqVE6VqvKwlVEoI3cAjAR7+H6f0hTWPniIiIlBb+JMhrrLWP+z5QLxae6t60Fqmn01m69ZDXoZQoYSaMYS2HsfbgWpbsWRKcQruMgYHTISIqOOWJiIiI5/xJkB/yc54Uk86NY4gIM+rurRCua3wdVaOq8vaat4NTYJ3WkNDVaZMsIiIipUKuCbIxpp8x5kWgnjFmos9jCqCh3DxUOTqS9g2qq7u3QigfUZ4BTQfw1bav2HY0+/g3hXT8ACx4Cg5tCU55IiIi4qm8apB3AouBU8ASn8c8nKGnxUPdm9Vi15FTHD+ta5WCGtR8EOFh4YENHOIr7QQkT9Cw0yIiIqVERG4LrLXLjTGrgKustVOLMSbxw6jLG3Jnt8aEh+mn/YKqXaE2/RL68cH6D7g36V6qlKsSWIHV4uH+n6FS7eAEKCIiIp7ypx/kGPWDHHqiI8OVHAcga+CQOb/MCU6BSo5FRERKDX9u0tuC+kEOSXOWbueGl78hI1Oj6hVUi5gWXFrnUmb8PIP0zCA1U/n8r/DBXcEpS0RERDxT2H6QKxdlUOKf8DDD8m2HWbXjiNehlEjDWgxj9/HdfLHli+AUGFEeIqJBw4CLiIiUaLm2Qc7i9nssIajrxTUxBhb8so828dW8DqfE6R7fnYsqX8S0NdPom9A38OG7e6r3QxERkdIg3xpkY0wtY8zTxphPjDHzsx7FEZzkLaZSFK3rVVV3b4UUZsIY2nIoK/evZPm+5cEr+NAW1SKLiIiUYP40sZgB/Aw0BB4HNgM/FmFMUgDdm9Zi6dZDHDmR5nUoJdINjW+gcrnKTFszLTgF/vo5vJAIW78LTnkiIiJS7PxJkGOstZOBNGvtAmvtKKBTEcclfrqyRSw3JdXn+Bn1h1wYFSIrcEvTW/hy65dsP7Y98AIbdIFej0CNRoGXJSIiIp7wJ0HOqprcZYy5xhiTBNQPZKfGmBrGmM+NMb+6f6vnsW64MWaZMeajQPZZWrWJr8a/BrQhrlp5r0MpsX7X/HeEEcY7P78TeGHlKkK3P0Ll2MDLEhEREU/4kyD/3RhTFbgfeAB4A/h9gPt9EPjSWtsE+NKdzs19wNoA91eqWWtZv/cYVu1eC6VOxTr0SejDnF/nkHomNfACrYVNX8PGBYGXJSIiIsUu3wTZWvuRtfaItXaVtbantba9tXZegPu9AcganW8qcGNOKxlj6gPX4CTlkosPlu3gymdT+HVvEJK7MmpEyxEcTzvOnF+DNHDIpw9CytPBKUtERESKVa7dvBljXgRyrZK01o4LYL+x1tpdbjm7jDG5DUP2PPAn1O9ynjo1igFgwbp9NI3VS1UYrWq2ol3tdrzz8zsMbjGYiLB8e0DMnTFwyxSoUi9o8YmIiEjxySsLWOzz/HHgbwUp2BjzBVAnh0UP+7n9tcBea+0SY0wPP9YfDYwGiI2NJTk52f9ggyA1NbXY9+krrpJh7vfraJK51bMYSrokm8Tk1Mm8+J8XSaqYlOt6/p/rHUGLTbzj9Wdbio/Oddmhc122FOZ8G3/arRpjlllrc88YCsgYsw7o4dYe1wWSrbXNsq3zJDAMSAeigSrAHGvt0PzK79Chg128eHF+qwVVcnIyPXr0KNZ9+vr7R2uYtmgLP/2tDxXKBVD7WYZlZGZwzQfXUKt8Ld7+zdu5ruf3ud78DSx8Dga+DZG6ibKk8vqzLcVH57rs0LkuW7Kfb2PMEmtth7y28ecmPcijqUUhzQNGuM9HAB9esENrH7LW1rfWJgCDgPn+JMdlVbemtTiTkcn3Gw96HUqJFR4WztAWQ/lp30+s2Lci8AIz0+HQJjisWn0REZGSxN8EOdgmAH2MMb8CfdxpjDFxxphPPIqpRLusYQ0mDW1Hh4Rce8wTP9zU5CYqRVbi7TW51yD7rWE3GLMYajXLf10REREJGXndpHeMczXHFYwxR7MWAdZaW6WwO7XWHgB65zB/J/CbHOYnA8mF3V9ZEB0ZztWX1PU6jBKvYmRFbm5yM9PXTmdX6i7qVgrgNTXG+ZuZAemnnD6SRUREJOTlWoNsra1sra3iPiJ8nlcOJDmWorP32CleSV7PzsMnvQ6lRBvcYjAWy7s/vxt4YWmn4MV2kPJM4GWJiIhIscg1QTbGVMpvY3/WkeJz7FQ6T326jvk/7/U6lBItrlIcfRr0YfYvszmRdiKwwiKjIXEgXKTR2UVEREqKvNogf2iM+Zcxppsx5uxvw8aYRsaY24wxnwFXF32I4q9GNStSv3p5Fvyyz+tQSrxhLYdxLO0YH6z/IPDCev4FmvYNvBwREREpFnk1seiNMwz0ncBqY8wRY8wBYDpO/8YjrLWziydM8Ycxhu5Na/Ht+v2cSc/0OpwSrU2tNiTWSmT6mulkZGYEXuCpo/Dr54GXIyIiIkUuz14srLWfWGuHWGsTrLVVrbUx1tou1tp/WGt3F1eQ4r9uTWtx/EwGS7ce8jqUEm94y+FsT91O8vbkwAtb+By8MxBS1fxFREQk1HnVzZsUkS6NY6hQLpyN+457HUqJ1/ui3sRVjAtOl2+X3ga3fQ4VawVeloiIiBQpJcilTOXoSJb9tQ+DO17kdSglXkRYBINbDGbJniWsPrA6sMKq1of67c91/SYiIiIhSwlyKRQVEe51CKVG/yb9qRBRITi1yCcPw5f/D7Z+H3hZIiIiUmTyTZCNMc8YY1oVRzASHPtTT9P/lW+Yu2yH16GU+b+/DwAAIABJREFUeJXLVaZ/k/58tukz9hzfE1hhEVGw+C3Y/kNwghMREZEi4U8N8s/Aa8aY740xdxljqhZ1UBKYGhXKsfXgCb5apxvCgmFwi8Fkkhn4wCGR5WH8SugyNjiBiYiISJHIN0G21r5hrb0cGA4kACuMMe8YY3oWdXBSOGFhhm5NapHyyz4yMm3+G0ie4ivH0yu+F7N+mRX4wCFR7tg6meqGT0REJFT51QbZGBMONHcf+4HlwB+MMTOLMDYJQLemtTh0Io1VO454HUqpMKzlMI6eOcq8DfMCL+yrJ+FNDRwiIiISqvxpg/wssA74DfA/1tr21tp/WmuvA5KKOkApnCua1MQYNKpekCTVTuKSmEuYvnY6mTbA2t/qCVC3DaSfDkpsIiIiElwRfqyzCnjEWpvTb8uXBTkeCZKYSlGM6JxAk9qVvA6lVOj5fk8OnDoAwH1H74OpzvyY6BiSByYXrLC2v3MeIiIiEpL8SZB/Apqb8/tvPQJssdbq9/sQ9tj16nwkWLKSY3/n+2XfOqgaD+UqFL4MERERCTp/2iC/AnwHvAa8DiwCZgK/GGOuKsLYJAgOpJ5mx+GTXoch2e38CV6+DNZ86HUkIiIiko0/CfJmIMla28Fa2x6n3fEq4ErgqSKMTQKUkWnp9a8FvPjlr16HItnVbQPXPAsXX+l1JCIiIpKNP00smltrz46za61dY4xJstZuNBo2N6SFhxm6NI5hwS/7sNai8xVCjIFLb/M6ChEREcmBPzXIvxhjXjXGdHcfr7jzooC0Io5PAtStaS12HTnFr3tTvQ5FcrL+S/4/e/cdHlWVPnD8e6Ykk947JQFCaAlVkB5ARcWGgr2gLq6KBVF3FVzbb11Z2bWsa9cVFAVBELuoQCii9N5LIBBaEhLSy8zc3x83IQkkIYEpKe/neeaZOXfuvecdruA7Z859D5vnuDsKIYQQQlRRnwT5LmAvMBF4DNgPjENPjmWxkEZuSMcwAJZJubcLEmIJqXG7p9Hzwk689n+w4jXQZEEXIYQQorGoc4pF+QIh32qadgnw7xp2kWHJRi4m0Iv4cF+W7s7gT4PbuTucJqtqKbeUlBSSk5N5Zc0rzNw+k22Z2+gaep4VQ0a9Cl5B+pQLIYQQQjQKdY4ga5pmAwqVUgEuikc4wdQbEvnH6ER3h9HsPNj9QUK8Qnhp1Uvnv3iIXwSYPBwbmBBCCCEuSH2mWBQDW5RSHyml/lPxcHZgwnF6tw2mdbDU2nU0Xw9fJvWexJbMLSzYu+D8T3R4HXwwHE6lOy44IYQQQpy3+iTI3wN/A5YB66o8RBPy9cZ0vlx32N1hNDtXtbuKXuG9eH3d65wqOc91c7yDwVoKecccG5wQQgghzss5E2RN02YAc4A/NE2bUfFwfmjCkb7akM7bS/a6O4xmRynF5H6TOVV6ijc3vHl+JwmOgwdWQKvejg1OCCGEEOflnAmyUupq9OWmfypv91BKfePswIRjDYkPY39mAYdOFro7lGYnITiBmxNuZu7uuezI2nH+J7KVQUGm4wITQgghxHmpzxSL54G+QA6ApmkbgTgnxiScYGiCXu5tqZR7c4oJPScQ6Bl4/jfsaRq8Oxh+eNLxwQkhhBCiQeqTIFs1TTtzcqUUbW1i2oX60CrISxJkJ/H38Gdir4lsytjEt/u+bfgJlIL+D0L3WxwfnBBCCCEapD4J8lal1K2AUSkVr5R6E1jp5LiEgymlGNoxjKz8EjRZlMIpru1wLUlhSby67lVyS3MbfoJed0LHyxwfmBBCCCEapD4J8sNAV6AEmAXkoq+qJ5qYF67pyvwHB6JkUQqnMCgDU/pNIbs4m3c2vtPwE6x4HXZ8DxtmVq6sl7pM3y6EEEIIl6lzJT0ATdMKgSnlD9GEmYz69yFN0yRJdpIuIV0Y23Ess3bOYnT8aDoGdaz/wTG9YNbNUFoAUd2hKBvmjoOx050VrhBCCCFqUJ8qFh2VUu8rpX5WSi2ueLgiOOF4r/68i5vf/8PdYTRrj/R6BD8PP17646WGTWeJGwJj/geWQNj+TWVyHDfEWaEKIYQQogb1mWIxF9gAPAM8WeUhmiCLh5FVqSfJyCtxdyjNVoBnAI/2epT1J9bzfer3DTu44+XQ9z5Y9gr0uVeSYyGEEMIN6lvF4h1N01Zrmrau4uH0yIRTDInXy70t3yPVLJxpdIfRdA3pyr/X/pv80vz6H5i6DNZ+BG0GwMo39LYQQgghXKo+CfK3SqkHlVJRSqngiofTIxNO0SXKn1BfTyn35mRGg5Ep/aaQVZTFu5verd9Bqcsqp1W06QdtB+ltSZKFEEIIlzrnTXrAXeXPVadVaEA7x4cjnM1gUAzpGErKrgzsdg2DQW7Wc5bEsESuj7+ez3Z8xuj40bQPbF/3AenrK+ccxw7WayOnLtO3y1QLIYQQwmXqU8VCVs1rZq7rEUNUgIViqw1vj/p8RxLn65Fej/DzwZ95edXLfHDZB3VXDxlUpXpixX6BbfSb9oQQQgjhMrVOsVBK/aXK67FnvPcPZwYlnGtIxzCeHNlJkmMXCLYE80jPR1h1bBULDy5s2MGaBjPHwA9POCc4IYQQQtSorjnIN1d5/fQZ713uhFiECxWX2diQlu3uMFqEsR3H0jm4M9PWTKOwrLD+ByoF170tdZCFEEIIF6srQVa1vK6pLZqYt5fs5YZ3VnKqsMzdoTR7RoORyf0mc6LwBO9tfq9hB7fuC/7R+mtZIlwIIYRwiboSZK2W1zW1RRMzuGMYdg1+25fp7lBahB7hPbim/TV8sv0TUk+lNuzgsmKYcxf8/l/nBCeEEEKIaupKkLsrpXKVUnlAUvnrinaii+ITTtKzdSB+FhPLpNybyzzW+zG8jF5MXT21YSvsmS3Id1IhhBDCdWpNkDVNM2qa5q9pmp+maaby1xVtsyuDFI5nMhoY1CGUpbszGpasifMW6hXKhJ4TWHlkJYvSFjXs4LEzYMDDzglMCCGEENXUZ6EQ0UwN6RjG0VPF7DnRgJXexAW5KeEm4oPieWXNKxRZi+p/YEXZt7Q/IOeQc4ITQgghBCAJcos2smskXz04gPZhvu4OpcUwGUxM7juZowVH+XDLhw07uPAkfHIt/PaGc4ITQgghBCAJcosW7ONBzzZBGGU1PZfqE9mHUe1G8fHWj0nLTav/gd7BcOscuPQF5wUnhBBCCEmQW7rdx/N4/pttFJZa3R1KizKp9yTMBnPDb9hrNxQ8fKTkmxBCCOFEkiC3cMdOFTN95QFW7T/p7lBalHDvcB7s8SDL05ez9PDShh2ccwg+HAH7FjsnOCGEEKKFkwS5hesbF4zFbGCplHtzuVs730q7gHZMXT2VYmtx/Q/0DQejJ1hLnBecEEII0YJJgtzCWcxGLm4XIvWQ3cBsMDO532TS89P5eOvH9T/Q5An3/AgJVzgvOCGEEKIFc0uCrJQKVkr9opTaU/4cVMt+gUqpL5VSO5VSO5RS/V0da0swJD6M/ZkFHDpZ6O5QWpx+Uf0YGTuSj7Z+xOG8ww072G6HbV/pK+0JIYQQwmHcNYL8FLBI07R4YFF5uyZvAD9pmtYJ6A7scFF8LcrQhDBCfT1JkwTZLZ7o8wQGZeCVNa807MDDa2DuONgyxylxCSGEEC2VuxLka4EZ5a9nANeduYNSyh8YAnwEoGlaqaZpOS6LsAXZfCgHD5Pi9g9XMXDqYhZsSHd3SC1KpE8kf076M0sOLWH54eX1P7BNP7jjK+hxu/OCE0IIIVog5Y5lhpVSOZqmBVZpZ2uaFnTGPj2A94Ht6KPH64BHNU0rqOWc9wH3AURERPSePXu2s8KvUX5+Pr6+TW/BjZVHypi+tZRSe+U2DwOM6+bBgGhZUbwmzrjWVs3Ky0deRkPj6einMasG/tlrdlByS4EzNNW/26Lh5Fq3HHKtW5Yzr/ewYcPWaZrWp65jnJYgK6V+BSJreGsKMKMeCXIf4A9goKZpq5RSbwC5mqb97Vx99+nTR1u7du2FfYAGSklJITk52aV9OsLAqYtJzzl7yeOYQC9+e2q4GyJq/Jx1rQfOGkhuae5Z20MsIaTclFL7gQd/h68fhDsWQFBbh8fV0jXVv9ui4eRatxxyrVuWM6+3UuqcCbLJWcFomnZJbe8ppY4rpaI0TTuqlIoCTtSw22HgsKZpq8rbX1L7XGVxno7UkBzXtV04T03JMUBWcVbdBwa2Bt9IKM13QlRCCCFEy+Ou32S/Ae4qf30X8PWZO2iadgw4pJRKKN80An26hXCg6ECvBm0XjVBAK73sW0RXd0cihBBCNAvuSpCnApcqpfYAl5a3UUpFK6V+qLLfw8BnSqnNQA/gHy6PtJl7cmQCXmZjtW0GpW8XTUxpIWxy7dx7IYQQojly2hSLumialoU+Inzm9iPAlVXaG4E654iIC3NdzxgApi3cxZGcIvwsJnKLrSRE+rk5MtFgmz6H7x+HsE4Q3cPd0QghhBBNllsSZNG4XNcz5nSinFdcxtoD2XSSBLnp6XknRCRKciyEEEJcIKkLJarxs5gZ1ikcpZS7Q2lxQiwhNW7386jnlxWTh14bGcBuc1BUQgghRMsjI8iiRm/8uofswlKev0Zu/HKVM0u5ldpKufHbG8kvyyevNK/+ifKGz2Dlf+C+pWC2OD5QIYQQopmTEWRRo+zCUmb+cZDD2bL8tLt4GD14ceCLZBRl8Oq6V+t/YEArCO0IJXnOC04IIYRoxiRBFjW6b0g7AD5Ytt/NkbRsSWFJ3NnlTr7c/SWrjq469wEA7YbCTZ+Cb5hzgxNCCCGaKUmQRY2iA70Y3TOG2WsOkZlf4u5wWrQJPSbQ1r8tz618jsKyBozo5x6FbQucF5gQQgjRTEmCLGp1f3J7Sm12Pv4t1d2htGgWk4Xn+z9Pen46b254s/4HLp0KX0+A4lPOC04IIYRohiRBFrVqH+bLM6O6cGVilLtDafH6RPbh5oSb+WzHZ2w4saF+ByU/DfevAEuAc4MTQgghmhlJkEWd7h0UR9doSbAag4m9JxLlE8Wzvz1LsbX43Af4RUJwnP7aZnVucEIIIUQzIgmyOKcDmQU8s2ALRaVSW9edfMw+PDfgOQ7kHuCdTe/U/8CFU+DzsaBpzgtOCCGEaEYkQRbndCKvhJl/pDFn7SF3h9LiDYgewPXx1zNj2wy2ZW6r30HBcRDRFewyiiyEEELUhyTI4pz6xgXTp20Q7y3dR6nV7u5wWrzH+zxOiCWEv638G2W2snMfcNGf4LK/g9Hs/OCEEEKIZkASZFEvE4Z14MipYr7emO7uUFo8fw9/nrn4GfZk7+HDLR/W/8Cjm2DfYucFJoQQQjQTkiCLeklOCKNzlD/vLN2HzS5zWd1tWJthXBl3Je9vfp/d2bvPfYCmwXeT4JfnZC6yEEIIcQ6SIIt6UUrx6Ih4hsSHUWKVm/Uag6f6PoW/pz/P/vYs1nPNL1YKRr8Hd32rvxZCCCFErSRBFvV2ebdInr+mK94eJneHIoAgSxCT+01mW9Y2Ptn+ybkPCO0A66bD/qVgLa3cnroMVrzutDiFEEKIpkYSZNEgmqaxcl8mGw/luDsUAVzW9jJGtBnBWxveIvVUPVY8jOoOM2+A+eP1duoymDsOYno5NU4hhBCiKZEEWTRImU1j0hebmPrjDneHItCnvkzpNwWLycKzvz2LzX6O6S/th0Hnq2DvL7D4JT05Hjsd4oa4IlwhhBCiSZAEWTSIh8nAnwbH8cf+k6w7eNLd4QggzDuMv/b9KxszNjJ71+xzHzB2Olw8AZa9Aok3SnIshBBCnEESZNFgt/RtQ5C3mbeX7HN3KKLc1e2uZlDMIN5Y/waH8w7XvXPqMlj7EfS4DVa9Ayn/dE2QQgghRBMhCbJoMB9PE3cPjGPRzhPsOJrr7nAE+lSL5/o/h0EZeH7l82i1lXKrmHM8djpc8U/oOhpWvatvF0IIIQQgCbI4T3f1jyU2xJv07CJ3hyLKRfpEMqn3JFYdW8W8PfNq3il9feWcY08//fWNM+DwOvjiDtj1oytDFkIIIRolqdclzkuAt5nFjydjMEhN3cZkTMcxLDywkH+t/ReDYgYR6RNZfYdBE88+KG4IhHeB7V9BocwrF0IIIWQEWZw3g0FhtdnZkJbt7lBEOYMy8Hz/57Frdl78/cXap1qcyScU/rQIetyqt1OXQUY9VugTQgghmiFJkMUFefWX3dz03h8czy12dyiiXGv/1jzS8xGWpy/nu/3f1f9Ao1lfZc9ug+8fh28ekmWphRBCtEiSIIsLcvNFbbBpGh8u3+/uUEQVt3S6hR5hPZi6eiqZRZkNO9hghDu/gdHv6gmztQSK5WZMIYQQLYckyOKCtAnx5pru0Xy2Ko3sgtJzHyBcwmgw8sLAFyi2FvOPVf9o+An8oyC4nf761+fhvSFQkufQGIUQQojGShJkccEeSG5PYamNGb8fcHcooop2Ae14oMcD/HLwF34+8PP5n6jLtXrNZE8/xwUnhBBCNGKSIIsL1jHCj0u7RLBiT2b9bwoTLjGu6zi6hHThpVUvkVOcc34naXMxDH1Sf525Vy8Hl5/huCCFEEKIRkYSZOEQ08YkMefP/VFKyr41JiaDiRcHvEhuSS7/XOOAFfNObIPDa8Em02mEEEI0X5IgC4cI9PbAYFDkl1gpsdrcHY6oIiE4gfFJ4/lu/3csPbT0wk7W5Vp4ZAMExOjtrfPBVnbhQQohhBCNiCTIwmEOZxcycOpi5q1Ld3co4gzjE8fTIbADL/7+IrmlF1iRwmzRn9NWwZd3w4aZFx6gEEII0YhIgiwcJibQi9gQb95btg+rze7ucEQVZqOZ/xv4f2QWZ/Lq2lcdc9I2/eCOr6DXnXq7+JRjziuEEEK4mSw1LRxGKcUDyR24f+Y6vt9ylGt7xLg7JFFFt9BueBg8mLdnHvP2zKv2XoglhJSbUhp+0vbD9eeSPHg/GQJaw5An9OWrK6Qug/T1NS9zLYQQQjRCMoIsHOqyLhF0CPflnZR9UtGiESq21bziYVZx1oWd2GTR5ycnXAFzx+lJMejPc8dBTK8LO78QQgjhQjKCLBzKYFA8MLQ9j8/dxNqD2VwUG+zukIQrGM1wyfP664iu8PnNEDsQ0tfB2OnVR5SFEEKIRk4SZOFw1/SIpl2YDz3bBLk7FOEOsYPBLxL2/AyDn5TkWAghRJMjUyyEw5mNhtPJsUyzaIEOLIfiHBj0GKz7H+z4HnIOuTsqIYQQot5kBFk4zSs/7WT38Tw+vOsid4ciXKViznHFtIr2w2HmDeDpD49tqywRJ4QQQjRiMoIsnMbPYubXHSfYcljKfzUWIZaQGrcrFMcLjl94B+nrq885jhsCV72hJ8qSHAshhGgiJEEWTnP7xW3ws5h4O2Wvu0MR5VJuSmHLXVuqPeZdMw8vkxcPL36YwrLCC+tg0MSz5xz3vBVu+EB/vW8JLJgAZUUX1o8QQgjhRJIgC6fxs5gZNyCWn7YdY++JfHeHI2rRMagj04ZOY1f2LqasmIJdc+IiL8e3wpENYJflyIUQQjRekiALpxo3IBZPk4F3l+5zdyiiDkNaDeGJPk/wa9qvvLnhTed1NOBhGL8YPH3BVqYny0IIIUQjIwmycKoQX0/+PbYHjwyPd3co4hxu73w7YzqO4cMtH/LNvm+c11HFXOTf3oAPL4FMmYIjhBCicZEqFsLpRiVFsWBDOrd88AdHcoqIDvTiyZEJXNdTlqJuTJRSTO43mUO5h3hu5XO08m1FrwgnroDXdzz4RkBoB+f1IYQQQpwHGUEWTrdgQzp/nbeZ9JwiNCA9p4in529hwYZ0d4cmzmA2mPl38r9p5duKiUsmcijPifWLLQHQ6w79ddY++OQ6OHXYef0JIYQQ9SQJsnC6aQt3UWKtfuNXUZmNaQt3uSkiUZcAzwD+O+K/2DQbDy96mLzSPOd3mpMGJ/eB3er8voQQQohzkARZON2RnJpLetW2XbhfW/+2vJb8GgdzD/Lk0iexOjtxbT8MHl4PQbF6+8AKkFUYhRBCuIkkyMLpogO9GrRdNA59o/oy5eIp/HbkN6atmeb8Do1m/XnvrzB9FGyb7/w+hRBCiBq4JUFWSgUrpX5RSu0pfw6qZb/HlFLblFJblVKzlFKyFFcT9OTIBLzMxmrbDAqeuKyjmyIS9TWm4xju7HInn+/8nNk7Z7um03bD4dq3oPO1eltGkoUQQriYu0aQnwIWaZoWDywqb1ejlIoBHgH6aJrWDTACN7s0SuEQ1/WM4eXrE4kJ9EIBUQEW/jG6G6N7tcJul+SnsZvUexJDWw1l6uqprDyy0vkdGgzQ83YwmqA4F2ZcDQdd0K8QQghRzl1l3q4FkstfzwBSgL/WsJ8J8FJKlQHewBFXBCcc77qeMWeVdSsstXLv9LXc0LsVY3q3clNk4lyMBiP/HPJP7vjxDp5IeYKZo2bSLqCdazovzIKCDFl5TwghhEu5awQ5QtO0owDlz+Fn7qBpWjrwLyANOAqc0jTtZ5dGKZxKoTAZFU9+uYkv1qS5OxxRBx+zD/8d/l/MRjMPLXqI7OJs13QcHAcPrIS4wXo7dTmUFbumbyGEEC2W0pw0v08p9SsQWcNbU4AZmqYFVtk3W9O0avOQy+clzwNuAnKAucCXmqbNrKW/+4D7ACIiInrPnu2i+ZLl8vPz8fX1dWmfzUGpTePNDSVsybRxZxcPhrcxuzukc2rJ1zq1JJX/HPsPsZ6xTIiYgEm57kcoj5IsLv7jz+T6x3Mg9hZygpJOvxeYvRm/vL0canO9w/ttyde7pZFr3XLItW5Zzrzew4YNW6dpWp+6jnHa/900TbuktveUUseVUlGaph1VSkUBJ2rY7RIgVdO0jPJj5gMDgBoTZE3T3gfeB+jTp4+WnJx8gZ+gYVJSUnB1n83F0KE2Hpi5nk+2n6Br5wRuuqiNu0OqU0u+1skkE74/nKeWP8VSj6W8OOBFlFKuCyDOl0C7lR7fPAxjPoZ2QyF1Gax+HcZOp33cEId32ZKvd0sj17rlkGvdspzP9XbXHORvgLuAqeXPX9ewTxpwsVLKGygCRgBrXRahcBlPk5F3b+/Ns19vpXfbYHeHI85hVLtRpJ5K5b3N79EuoB13d7vbdZ13HKk/m33hszEQNxSOrIex08EJybEQQoiWyV1zkKcClyql9gCXlrdRSkUrpX4A0DRtFfAlsB7YUh7r++4JVzibh8nA1BuS6BDui6ZprNyX6e6QRB0e7PEgI2NH8tq611icttj1AbTuAwGtYe8v0OdeSY6FEEI4lFsSZE3TsjRNG6FpWnz588ny7Uc0Tbuyyn7PaZrWSdO0bpqm3aFpWok74hWu9fXGI9z6wSreTtnr7lBELQzKwN8H/p2uIV15avlT7Dy507UBpK+D4hwY8iSs/QhWvQ+Z8t+LEEIIx5CV9ESjc1VSFNf2iOaVn3bx5qI97g5H1MJisvCf4f/B38OfhxY9REZhhms6Tl0Gc8fp0yqGPwM3fAw/PQWzbpZFRYQQQjiEJMii0TEZDbx6Yw+u7xnDv3/ZzWu/7MZZ1VbEhQnzDuPN4W+SW5rLI4sfodjqghJs6WfMOW4/FG74ADpeDkqBzQq2MufHIYQQotmSBFk0SkaDYtrY7ozt3Yq3luxl74l8d4ckatE5pDMvD36ZbVnbeOa3Z7Brdud2OGji2XOOu90AI/+uv17yd5hxDZQVOTcOIYQQzZYkyKLRMhoU/7whifkPDiA+ws/d4Yg6jGgzgom9J7LwwELe2fSOe4MJ7wpR3cHs5d44hBBCNFnuKvMmRL0YDIqkVvqaMj9sOcqGtGwmX9nZtbV3Rb3c3fVu3t74Nu9uepd3N71b7b0QSwgpN6W4JpCksfoDIPsg7PweLn5An34hhBBC1IMkyKLJ2JCWzQfLUym12nn+mq7NMklesCGdaQt3cSSniOhAL54cmcB1PWOaRB9KKUpsNReaySrOuuDzn5cNn8Kq96DrdeAf7Z4YhBBCNDmSIIsmY/KVnQH4YHkqNk3jxWu6YTA0nyR5wYZ0np6/haIyGwDpOUU8PX8LQI0JrKZp2DWw2TX9oWlYTAZMRgPFZTZyCsuwaRo2m/6eza6xIS2bZ7/eVu8+mrxhU6D7LZXJcd5x8Itwb0xCCCEaPUmQRZOhlGLylZ0xGgy8u3QfVpvGP0YnNoskubDUyt+/3346ca1QVGZj0pyNPPv1VuwavH5TDy7pEkHKrhOM+3jNWeeZeW8/BsWH8uuO4zz0+Yaz3g/z9ayxj79/v50rE6PwMDnvtoTCskK8zd5OO3+NlIKQ9vrrbQtgwQNw13fQqrdr4xBCCNGkSIIsmhSlFH+9PAGTQVFmszfZaaWlVju/7ctk1f6TrE7NYvPhU1jtNZeys2twfa9WGJQiJki/8Sw2xIdHRsRjVAqTUWFQCpNB0TZET0CTYgL5x+hEjAYwGgynnx+ddXbSDJCZX0qPF3/m96dGEOBt5lRhGX4Wk0O/fIycN5LbO9/OLZ1vwd/D32Hnrbc2/aH3OIhKcn3fQgghmhRJkEWTo5Ti8cs6nn59OLuQqAAvjI14JDm7oJQ1B05iMiqGd4rArmn8+dN1aJpGUqtAxg9px5w1h8gqKD3r2JhAL56/pmu1bbGhPky6tGOt/bUJ8ebWkDZnbf/njztJzzm7/Fmwjwd39m9LgLcZgL/M28Tq1JP0bx/CwA6hDGwfStsQ7wua950UlsR/N/6Xj7d9zM0JN3N7l9sJ9Qo97/M1mF8EXP6y/rq0AL5/AoZNhsDWrotBCCFEkyAJsmiSKhK17IJSrntrJQPah/Dqjd0xGRtP5cJFO46zdHcGq1NPsvNYHgB9Y4MZ3ikCi9nIl/f3Jz7cDy8PIwAJEX7V5iADeJmNPDkywWExPTkyocY+nr2qS7U5yNf1iMHX08zKfZn8sOUYACM6hfPRuIsAyC0uw99iPuv8IZaQGm/IC7GE8NaIt9h587axAAAgAElEQVR5cicfbvmQ/239HzN3zOT6+OsZ13Uc0b4uvoHuxA7Y9b1e7UISZCGEEGeQBFk0aUE+Htw7KI5//rSTtKwCTuSXcDSn2CkVICqqP6TnFBHzx+Jq5z96qohV+0+yLyOfxy/TE9pZq9NYuS+L3m2DuCopir5xIXRvHXD6fBXl6ypUnMuZVSzq28cViVFckRiFpmmkZhbw274sfD31RL7EaqPfS4toHezFgPahDOwQSr92wfhbzKTclFJnlYxOwZ3419B/caDHAf639X/M3TWXubvmMqrdKO5JvId2Ae0c9lnr1KoPTNwClvLrcXQTRCSCofF8wRJCCOE+qjku4dunTx9t7dq1Lu0zJSWF5ORkl/YpKk2cvYEFG49U22YxG3hmVGeuSorGYFAYlcJoUJiNhgZPxzizwgSAh8lAj1YBHM0t5tBJfdqCv8XEyqdH4OtpIjO/hAAvM+ZGNKrtCPklVmb+cZDf9may5sBJisvsGA2Kv1/XDS+zkafmb6a4rHI1PS+zkZevT6wx0T+af5QZ22cwb/c8SmwlXNL2EsYnjqdzSGfXfaDsA/DfvvoKfcMmn/W2/N1uOeRatxxyrVuWM6+3Umqdpml96jpGRpBFs7DmQPZZ24rL7DyzYBvPLNhWbfsbN/fg2h4xrNyXya0frMJYnjwbDGBUirdu60VyQjhLd2fw+JxNGA2QmVeC7YzvkqVWO2sPZnNplwjuHhBH37hgOkf5n06+Q309nfZ53cnX08T9Q9tz/9D2lFhtrD+Yw8p9mXRvFcj4T9ZWS45Br5IxbeGuGhPkKN8onur7FOMTx/PZjs+YtXMWvxz8hUExgxifOJ5eEb2c/4EC28Kof0PCFXpb02RRESGEaOEkQRbNwpEabjyr8OxVXbBrlbWCu0TpFRRaBXrzyPAO5TWCOb1PTKBeKSLM15NLu0Rgt2t8sfZQjefWNHjvjjq/hDZrniYj/duH0L99CFD7dUjPKcJu12qtihHiFcIjvR5hXLdxfLHzCz7d/il3/XQXvcJ7MT5pPAOjBzpvYRiloNcd+mtNg3l/AlsZ9P0TxA2p3C91GaSv10eahRBCNGuSIItmITrQq8bqDDGBXtwzKK7GY9qEeDPpstpvgOsS7c/L1ycCsGJvZo3njy5PpoWututgNChsmoaBupNcfw9/xieN5/YutzN/z3w+3voxD/z6AJ2DOzM+aTwj2ozAoJw4ZaWsEIpOQlAczB0HY6fr21OXVW8LIYRo1iRBFs1CbdUZHFUBwtnnby5q+nOymA08fmkC5vIV/sZ9vJqxvVtzTY/oWudne5m8uK3zbdzY8Ua+2/8dH239iEkpk4gLiCOjMIP8svyzjgmxhJByU8qFfQAPH7jtS1AGfXnqL24nIaAXrN6sJ8dVR5SF8614HWJ6OXck3xV9CCGanOZ195Bosa7rGcPL1ycSE+iFQh85ru3GsAs9P044f3NR03WYen0S44fo1SmOnSomp7CMx+duYvi/U/h8VRolVlut5zMbzYyOH83X137NtCHTMBvMNSbHQI3l5c6LwUjynGEkLptAYlQAl3nvIzHCh8RlE0j+Yqhj+hD1E9NLH7nft0Rvpy6DOXdCaHzlPsWnoLSwsm0tAZu14X2kLqvsY+44fbujrHi98vwVUpfp24UQjZJUsXAQuSO25ZBrfWE0TWPRjhO8uXgPmw6fItLfwoIJA4kMsNTr2KRPal8JL9InEi+TF14mL7xN3qdfe5m88DZXb5+5rWJ/b5M3V351Za19bOkwHgY+cl6fvdlxxOhrUTaU5EFg+cI2qz/Q54Vf9Ce9/WYfyDkIAyfC2o/A5K0vFX7jDP39N3pAq4vghg/09qtdoP0wuPYtvf2vBOh8lX4jZsX7iWPg0hf19uuJEDsYdv/EgbARxB6aDxeNhyum6nPSv30UOl8N8ZeC3QbrZ0DrfhDRVW8f26zf6OkdrO8PZ9/kWXWKTtyQs9vC5eTf8ZZFqlgIIRo9pRSXdIlgROdwVuzN5Odtx4nw1yt+/L4vi6RWAfh41vxP07lu1OsX2Y8iaxGF1kKKrEVkFWfp7TK9XWQtosxedkHxWyO76v9wFmTCmo+gzz3gG3ZB52yyKkZfa0r8KmTugbxjEDdYb694XU94r3pNb8+9G0pyYfxivb3rRzAYKxPkvvfB/hRY9goM+QuEdwavoMrzD3kCfCMr2wMfhaDYyna/P0NYp8p295shumdlu+PleoLsH0PsslcguH3l+9YS2L1QPz7+UijNh+8eg8te0hPkohx4PxmueEXvJ/84vNoZrn4Det0JuUdh9q16+cCx02HOXRCWoC9Uc9Oner9SNUWIRkkSZCGEWyilGBwfxuB4PbnMLS7jnulr8DQbuHdgHHcOiCXA6+zV+ury90F/P+c+Vrv1rKS5alJdZC1iyooptR4/4I+n6bqnK0lYSNq8gKR2gwnzDdOTJQ8fMDYs5iYtbghc8gLMuhkunqCP8CZcCb88B/eVT4v47XXYuwge36m3i7Ih/0TlOQY8DPYqUyJun1c9YQzvBEun6snx2o/OHnXteXv1mPr9uXp78KTq7RHPVm9fOU1P7Nd+xIG2NxKbsQj8o/T3zBZ4Ylflvh5+MGmHfp1Bf775cz1pBzB5wuDHIVK/uRfNpo8sGz30mDtfBes/ga436O30dfDpaLjpM/0LRO5ROLAcOlyiHyeEcBtJkIUQjYK/xczn4/vx1pK9/PuX3by/bD93DYjl3kFxBPl4OKwfk8GEn4cffh5+te5TV4I8usNotmRu4ZOTG7FGhMKSPxPlE0WSVSPp5FGSRn9M5/AkPI3Nsw42aatg42cw6lUwmuDUISgtqBzhDW6nj4pWjIwOnKiPAle49IXq5+swonq7anJ85lSEuMGOn5pQpY8DB+3EJt9Rex8GA/hXWRbdbIFOoyrbXkEw/JnKdkArPeGv6Gfn9zDocVg/XW/7RkK3MZXLnaf9DvPHw/0r9AR5zy+QMhXGfqxPQck9oo/GRyZW/yImNxoK4XCSIAshGo2ebYL48K6L2HbkFG8t2cvbKXu5uns0QT4eaJqGUooQS0iNN+SFWEJcEuPT/Z4GoMRWwo6sHWzO2MyWzC1sPrqahT4Kfr4Hk8FEJ5M/SUGdSOx4Nd1Du9PKr9XpKSLJXyTX+hkuuBKHI9jtgKZPdTj4O/z8jJ4wBraGnDTY8a0+MhsUCxHd9MTwoj9VjvBe91bluareUNdQ6eurJ6pxQ/R2+nrHJchV+ziY4pw+zkz02ydXtq96tXK/TqPgwVX6lwzQvyx4eFcuib51Pvw8Bf6SqifQ27+GXT9Btxv08139JrQbCkfWS1lCIS6QJMhCiEana3QAb9/Wm6OniogK0CuHPPnlZnw8jHw28kfWpJ5k2sJdHMkpIjrQiydHJji0okh9knBPoyc9wnvQI7zH6W0ZhRlsztzM5uMb2LL5E74qW8Xnx1cCEOThT1J4T5LCkmqtuOGwShxQ/1FFTdOTXk8/Pek6sgGmXw03fQLth+vTCEyeerUIWkPX0fpNbkrp5/tuItz4SfkI7xDHjvDWNPpZ0Y+juKKP+ib6Jk99SkmFDpfojwpdR+vJc8X0i9wjkL4WrntbP99nY/UbBy3+ejugtT71xyvQcZ9FiBZCEmQhRKNVkRzb7Rpmo4HPVqXx6R8HUUphs+sVA9Jzinh6/hYAhyXJVUdxG3K3e5h3GCPajGBEmxHQexLWsgL2FRxh055v2bzmLbYYPFh6eKlDYjyn2m6gu+FD/cYz/2j9p/rcdHgjCa78F/Qdry+S0v0m8AnXzxOVBHf/UHleY5X/bbhihLc5cFQSHhCjPypc/ID+qDhft+th4+fQ5169PXOMPgVmwip9nyMb9akaMr9ZiHOSBFkI0egZDIqXr0/koeEduOzVpRSUVq+dXFRmY9rCXY2rLrXBgMnTjwTPBBKSwrlR84Eet5JrUAycNbDWw77d9y1DWg0hwDOgcqOtTB8ZNJeXwivIBM0OvuVJbMZufTpESHu9nbYKPMtHEeeOg8gkOLwGbpkFbQbA1NZ6lYUr/gn+MXD1fyqrTHgFVpZEOxdXjL6K+kldpn/xqbiZMW4wDP2LflNkhbl3QXhXuOVzvb0/RZ8i4xPqlpCFaMwkQRZCNBkxgV4Ulta8sEh6ThHHc4uJ8D93PWWX8wo6PdLnf45dJ6+YjBHoo3kyrN9jDG89nKgvx+sJ8j0/6jvNvhVMFrjrG7391X3gHQq3f6m3v5+k1+a9pXw0cdkreiJUkbjes7D6PNfedzn04woXq+tmxo4j9X00DUa/B4bym/tKC/UR5v4P6jWhNQ22faUfLwmzELKSnhCiaYkuX82wJv1fXsS909fw87ZjlNnsLozKcWaNmsU9oX3J9PRm6uqpXDbvMm70LuXdmPbszt6Npmkw6DHo/1DlQZe9BMlPVbZHv6tXiygvX8agxyDvaOVqblFJ4Onr2g8mnKeuqS4VlII2F+uLrIA+3/men6BX+ZejjJ3w5d16HWrQR543fQGFJ/W2rAYoWhgZQRZCNClPjkzg6flbKCqrHEn2MhuZdGlHsgtLmbvuMIt2nqBvbDBz7u/vxkhrV9dNgN1Cu9Ft1Ec8Ahw4dYAlh5awOG0xbx9bxlvfLKWVbyuGtxnO8DbD6WG3YTQYIfaMKRuRiTVUThguq7c1V+cz1cVghFZVFhILiYfxS/RfHgAOrNB/mbhnoZ5Y+0bArFtgzEf64io1LQojRDMiCbIQokmpmGdcWxWLSZd2ZMmujNM38RWX2Zjw2Xqu6h7FFd2isJiNbou9QkrfF2tZge6tavvFBsRyd8Dd3N3tbjKLMkk5lMLitMXM2jmLT7Z/QpBnEMmtkxneZjgXR12MxVRleomLbqBbsCHdaRVFXFEO76w+Zji+jybBaNJv7KyQcCX8eXnlKoQFGfpKgl89oJf0W/WuPjWnTeP8EirEhZIEWQjR5FzXM6bWJMxkNHBpl4jT7UMnC9mbkc9jX2zi2a+3MbpnDDdd1Jqu0QE1Hu8S55G8hnqFMqbjGMZ0HENBWQEr0lewOG0xvxz8ha/2foWXyYuB0QMZ3mY4Q1oN4dr0BWTt+wjO+FU8xBJCCo5ZPGLBhvRqo/mOrijiinJ4Lim51xQZjPpUnAr9H4KEK2DzHH1Oe1QP2PAZXPKi/v7WeVBWdPbKhkI0UZIgCyGatfgIP5Y8nsyq1JN8sSaN2WsO8cnvB/n+kUHuS5IvsPqDj9mHkbEjGRk7kjJbGWuOrWHxocUsSVvCr2m/YlRGbFrNNzM6KvHTNI2pP+6sNtUFKiuKjOwayfSVByix2ii12imx2im12hneOZxhCeFk5JXw13mby9+r3Oe+IbEMSPBg7eHUOvt/bNFk1h7IwWw0YjYa8Sh/xEf4EeJjoajUzrHcEjyNJjxNRjxMRiwmE34WM2ajEYMyYFByG069GQz6PPa1H1VWyhj1qr4d9PnKxTmVCfLK/+pLdne7wX0xC3EBJEEWQjR7BoOif/sQ+rcP4YXCMn7ZcZwuUXo9iRe/3U5OUSk3X9SGi2KDTq9211SYjWYGxAxgQMwAJvebzLbMbSw+tJgPt3xY6zGvrHmFYEswQZ5BBFmC9NeWIHxNAZiUNwFe+tLe89Yd5nheMZl5pWTml5CZX8Kg+FAeTO5Aqc1OXsQz+MXkn3X+HKsvZfZl/POnneUxKjyMBjzMipCAIoKDj7In6zB7S9agGU9h98jGZsmhTJ3khS2nsG859w2W6zJ+J99Yil3T0KwaWpkdDY20wwqDAqvdTonVCmigNEBDKa1Bf7Yv//Ea/aK7kxiaSJh3WIOObXZqq5ThE6K3by1PkCtsmqWPMlckyD/+FdoNg4TL3RC8EA0nCbIQokUJ8DYzpner022TUfHztuPMX59Ou1AfbrqoNdf3asVvezOZtnAX6TlFxPyx2OGr9TmDQRlIDEskMSyxzgT5y91fUmQtqvE9hZEwrxCCLEHsPqJRWuqFSfPD2xSAn0cgB4tas+74KYIsQRhMZyfHAAZTPgv2zeL+0cfJKDrOicLjHCs8RkZhBh+l2fgorXxHC1iMFiJ9IonwjiDCpysR3hFE+kQS6RPJhEUTav0My25eUuefRWGplfTsIvJLrBSU2MgvsZJfYmVwfAghvmY2H85m3vpDfHOq9hJ3n+2czue79GTdg2AiPDswKqEfvSOTiA/oRLBXQJP7QnXezjUtSCm9nGGF+1eAtVh/XVoAO78Hv0g9QbaWwPz7oO991W8wre/qj0K4gCTIQogWbfKVnZl4STzfbz7KnLWHePnHnSzfk8G6gzlnzK3dDDhutT5H3NyWXVBKek4RJ/KKOXaqhGO5xZgMikdGxNd53OrbVlNkLeL+z5aSVXwSH+8SLJ5FmMyF+HgXE+hbSnZxNoboTPLKTpJTso/8snyKgB9OwA8/nTu2aWun4Wn0PJ389o3sezr5rZoE+3v4OyXJ9PYwER/hV+v7vdqE0atNGN/MqP0ck+K/YOPxHezN3c6Jkr0cLN3Hu5tXg/6fAlppGD7EEWXpSEJgF3pGduWmPnFnfR5X3GzodA2dFqQUmMtLMnr4wGNbwWbV26cO60uaVyxicnI/LJyiV8eo8ebV6Y79LELUgyTIQogWz9vDxNg+rRnbpzV7T+Rz24d/1DC31s6kORt5c/EeXhmTRO+2wWxNP8WX6w7j72UmoMqjb1wwAV5misvPcWbljPre3LbzWC47juZy7FQJx3OLOZ5bTHGZjY/v7gvAU/M3s3Db8dP7KwWdIv3PmSADeJm8mHFX/X/uLrXpSXN2STYni0+SXZzNU8ufqnX/5TctJ8DzwkZY6yqH5yi+piDyrdk1br9nYCegEzAaAJtdI78sl22Z2/h65x9sOL6ZjNJd7LOvZt9J+CHLyFfHE+gW0o0dBwLIOhlBfFAHssrkRkCgcpnykPYwcbO+OAlA3jG9DvMlz+vJ8OzbwBKgV8248ROI7gllxZUrSQrncsVIfhP4tUASZCGEqKJDuC8ncktqfM+uQccIP3w99dXIDp0sZP76w+SVWE//vx7gu4cHERATwLz1h5ny1VY8TIbTybO/xUR6TlGNN7c9MXcTf/t6K2ufuQRPk5HZqw8xfeUBAPw8TYT7exId6IXdrmEwKO4eGMfonjFE+FuI8LcQ5ueJ2ajfNKVsfmjGvLM+g7LVPqpaFw+jBxE+EUT4VFYIqStBDrQEnlc/VblidPX325adHs1Pzykipo7RfKNBEeAZcHrON+g3Kx4vPM6mE1tYc3QTB/J38kPqD+SX5YMvHCnxqHNJrpRdJ+gaHUCYn6ezPmLjVfHlqe0AeGSD/josATpcCtvmwcDH9ATqtzfg1xfgr6l64nx0E+Rn6LW9DXKjpcPF9KocuY9MhAMr4duH9bbNqlc4udBffar20Uh/LZAEWQghzhAd6EV6ztlzdGMCvXjn9t6n21ckRnFFYhQ2u0ZecRmnivRH+zB9lboerQP5y+UJnCoqI7eo8v3aEnCrXeOGXq0os2l4mmD8kHbc2b8tEf4WfDzP/uf64na1j6S+2HNujQuqvHx9Yr3/HFqKirKBKSkpJCcnN+hYpZQ+XSQukpFxlwJg1+wczD3I1sytbM3cyuc7P6/1+D/Nex97cQzBnjHc1jeWxy7tCOhfvmICvTAYWsgcZ86YihLXBo7MgxnzCPHwJ2X4M3pyDLDmI9jxDfylvNLJ2v9B7lEYPkVva1qNCVzyzL5k2ar8va6oeW30IuX21U76VE5woaOv1lIw6TfikrZKn+LS4xa9vfglOL5NT1TnjgPvYMjaD3cu0Pv7/CbIPQL3L9f3n32bXt7vjvl6e954UAa4/j29/e1EfYrNyJf09sIp+jkHP6738fnN0H+CXhWlkS1iJAmyEEKcobbV+p4cmVDj/kaDItDbg0Bvj2rbu0YH1FhKbuDUxbUm4M9f07Va+3yda0EVR3DFFIimyKAMxAXEERcQx9Xtr64zQfaK+QKAMjxZeLIdhX90p11AAlNmZ+NNNJ2jgugaHUCXKH/6tw+hdbB3jedx5oItrlJrTerSXBg8qXLDpS/qi5VUJMFHN0Pm7sr359wBygg36hmwdnw7dt+w6slx1fPXsr3Rqmv0tSBLT3hbX6Tvu+tH2P0TXP2G3l44BTZ8Ck+V3ym7Za7+qEiQLf56Ahs3BPrcq9e87nx1ZeKaOFaf+lKhXbJ+02WFkPZAlS8nBpM+4lzh1GGwleqv44ZAcJzex5C/NKrkGCRBFkKIs1RNLs/1s/v5aGgCfr7qWlDFEZrMDWaN2Pxr5rPj5A52ZO1ge9Z2vtn3DYXWQnzagQETqbZodhyMomR7FPfmDWbikCFk5tl5/dc9dI32p0uUP4+uvI4CWw5EgW8U5AJ/2wz/3B7E77ctO2cM9eGoGw3L7GVkFWWRWZTJicITZBZlklGUQUZhRp3HDZo9CLtmBw00NOyaXtYP9BF7zaShfdoLTdPQNBsaYJ9R/19Lnl32NKG+UYR7hxPmFUaYdxhhXmGEeoViNprrfZ6zRqnLnfcodVmRPmIb0Fof9T2xA45sYGXi3+k84zZ+t3XiMuNa1vR7i/5xQ2DFa/Dr8/B0Onj6QtZe2POrnsSaPKH9ML3aSMUoe/LT+qPCgIf159Rl1Wtepy7TE9jEMdXj6zv+jD+AM6ZdjfpX9faNVe6KTV2m19au6CNucKNKkiVBFkKIGlzIz+71OTc4d3RXNB51jbTHB8UTHxTPNe2vAfRkLy037XTSvOOknjjn+q/is0MLmP25kUivNhzNCOHr/ZHYi2Pwjs0569wA+dZsNE1zSJWQc604WGIrIaMwo1rCe2YSnFmUSXZx9unEtoJCEWQJqun0p10RewUGZUAphUJVPqP0BV8Up1+r8hFMpcrb2QdRBjNvH/im1vOvOPgrWVqpnoSfIUiZCfUKJSwwjjBLKGGFOYSGdiI8tBNhniGEmrwJC4zF02Q59yh1aYE+2h3cTp8ykrUPNn4OvcdBYGtIXQ4/PAE3fgphHfXyePPuhQmr9fnZRzfDL8/yf7bXuFwbwaOmr9hvj+KJlUaejEznus7XQEQ3qEjqBzxcmfQCdLhEf1TwqeHXntRllMy6kye0x/ju5w5c5fco/5p1J563fOK4BLa2utqNaJqFJMhCCOEGzh7dFY1HQ0ZYDcpAbEAssQGxXBF3BaDfCHi04Kg+ynxyOzuydlBs347dZ+05z5f0xl8I8DIT6G1meKdwfDxMFJRYsWkafp5mlOKCE+gBswaQV3r2DaFGZSTEK4QwrzCifaJJCksi3CucUO9QfZS2fIQ22CsYs8FMYh0jvlMunnJBMQJ1JsiLR7yPLTKJkwXHyFj4VzKiu5MRGkdG3mEy1rxPho+FzJJc9mXvIbPwBLZjZ4/M+3v419n/8YLjhGbux/jx5Wi3zcPabjj27KN4rHgVe+xQjIGtKTT4gH87snKKKLLnoTy64Dn0NcI9Q7AAh6Iu5RbDp7Qu3cHt5l95wzqa242/0sZ6kGkLwxj68CDyQ6KwFIGnuQxPkwEPo6FB13jrmhSmFT3E0rIOAHyb14Fc80M8uSaFbo5KXs9VV7sRkARZCCGEaMSUUkT7RhPtG82ItiNOb88ozGDHyR11LqhC0E+cAk7Z4ePtzolvVNyoalMSwr3DCfUK1ReTaSrLeUf3xAiE+cUQNmYmNrtGQamVghIr+a3uJdzPQoC3mYycfNav/53DdhOHbVZO5acRmJ2CZ9tYyvw8+WLXF7V2ccmXl6BQmFonYF00jdKfPkSz+qF538tj2UfpfXQ1fxy08ur2G2HbYeBw+ZERLEn0Ig74YUc2+TH/x1ZTMckEAev4kCDgU4zWuXz820z+s3jvWX1vfWEkvp4m3vh1D1+uP4SnyYinyVD+MPL5+H4opfhiTRovbO1L4RlVdpaWdWbvfi9mZhZQZrOfrspzZgnLehs0UZ83P3Vx9V/RBjWO5BgkQRZCCCGapDDvsHMugb3hjg1nbdtxJJeNh3NIyyrkYFYBadlF5BaVsfQvyQBMnL2RH7YcJdLfQpsQL9oE+fBTYe0rDj7dd7JDqm3UVZO6LpqmYbNrmIwGrDY7ezPyKSy1UVhio6DUSlGpjYRIP7xsZoqMZWcdb7Ga+WnrUS7vFsWOo7nc8M5KCkurJ4iv3tid63u14kBOKX/+uRTQbzQzG6Pw9byDVwf1YFin8DoT5L9d/De2HU9j07E0iuwnKbKdpMCWSqlWyNvbFsI2fT+/TmAx+ODvEUKgRxiBHqF8lbqXVllRhEUEYjtQXOP5baZiRnaLpFWwNyVWOyVlNv3Zasdi0r+oxIZ6c1HbYEqsdorL37fa7adHmPdlFKDavoBfDatk5lh9mfrjm9Vqr1vMBjpG+PHNQ4MA+M+iPRzMKiTQ23z6l4uYQC9GdNbLQx47VYyHycCVX41w+rz5CyUJshBCCNFMmQxn/28+sVUwia2Caz1mbO+2xIcHcLA8gV6yKwta195Hu8k/0Dc2mDn39wfgtg//IO1kIR5GAx4mIx4mAxe1DeKZq7oA8MyCLeQVW8vf10cwE1v5Yzj0PHk1VHexmo3MXp3GzX3bYLXZuea/v1FYatWT4FI9Cb5vSDuevqIzBaU2Ln99+VnneOySjmTs/r8zZj/r8gC7vvYOob6e3NavDT6eJnzLHz6eJnq20et6J8YEsOzJYfhaTPh4GvE01X8E9caEG6GG+3ALywo5UXiC44XHqz2fKDzB8YLjHCjYwNodv9Q4P/pM7+yYgq+HL75mX3y8ffA1+xJk9uGHAzvxMfsQFeHHva317T5m/dnTWFmDe/KVnZk1o/Yl5CcM68DV3aPJKawsW1l1FDk1s4BV+7PIKSo7/SWje+vA0wnyPdPXsP1oLn6da58331hIgiyEEEI0YY4ut5ecEE5yQni1bV0/8sVQw6ii3erLoyPiiQyoXOWue6tAwnw9KbXZKS0fwWoii8MAAAnlSURBVPQwVU612Hsin6Oniim12k8/cooiOFJDcgz6IjppJwsBMBkNtA72wmI24u1hxNvDhI+HkT6xesLv62ni7dt6nX5PfzYS4uvJnLWHai2veGViFABhfp5MGdWl1j8bi9lIm5CaS+0BBODJKc6ucx5A7QvBeJu9T887r43VbiWrKIsThSe49Ydba93vROEJ9p/aT35pPnlleVjt1lr3rWBSJnw89GTZ1+xb577fp7+DQRkwGA0Y/Ax4+RswKANvbliIQRnomGCgUyd9m12DMivYtaN8sm0fRoOR3kl5dIy3sajuoiWNgiTIQgghRBPminJ7gRkv1ZpcPnZvx2rb/nJ5pzrPNfu+/jVuX7X/ZK19VD3ne3f0qfXcRoM6neyeyRXlFVfctdYpNalNBtNZK1nWZM7Vc6q1S22l5JflU1BaQH5Zvv4o1Z8Lygoqn0sr27uyd9V6/m/3f6tPadFsaJpebs+u2bFjr9cId1MiCbIQQggh6uSK5NLZfTi7vnnVfhpLhRoPowfBxmCCLbVPqTlTXdVEVt6yss5jKxLmiiS6agJddduwOcPqHY+7SIIshBBCiDq5ona3q/pwVn1zV2nMK1galOF05RIz9V9gpTGSBFkIIYQQ5+SKkdHGNPraWDl7So0rEvDGnORXcEuCrJQaCzwPdAb6appWY7VzpdTlwBuAEfhQ07SpLgtSCCGEEKKFccWc9qawTL27KnhvBa4Hai12p5QyAm8BVwBdgFuUUrXfWiqEEEIIIYQDuGUEWdO0HXDO5S37Ans1Tdtfvu9s4FrASWsBCSGEEEII0bjnIMcAh6q0DwP9attZKXUfcB9AREQEKSkpTg3uTPn5+S7vU7iHXOuWRa53yyHXuuWQa92ynM/1dlqCrJT6FYis4a0pmqZ9XZ9T1LCtpkVw9Dc07X3gfYA+ffporr47tSnfESsaRq51yyLXu+WQa91yyLVuWc7nejstQdY07ZILPMVhqi9u2Qo4coHnFEIIIYQQok7uukmvPtYA8UqpOKWUB3Az8I2bYxJCCCGEEM2cWxJkpdRopdRhoD/wvVJqYfn2aKXUDwCaplmBh4CFwA5gjqZp29wRrxBCCCGEaDncVcXiK+CrGrYfAa6s0v4B+MGFoQkhhBBCiBauMU+xEEIIIYQQwuUkQRZCCCGEEKIKSZCFEEIIIYSoQhJkIYQQQgghqlCaVuvaG02WUioDOOjibkOBTBf3KdxDrnXLIte75ZBr3XLItW5ZzrzebTVNC6vrgGaZILuDUmqtpml93B2HcD651i2LXO+WQ651yyHXumU5n+stUyyEEEIIIYSoQhJkIYQQQgghqpAE2XHed3cAwmXkWrcscr1bDrnWLYdc65alwddb5iALIYQQQghRhYwgCyGEEEIIUYUkyEIIIYQQQlQhCbIDKKUuV0rtUkrtVUo95e54hPMopQ4opbYopTYqpda6Ox7hOEqp/ymlTiiltlbZFqyU+kUptaf8OcidMQrHqeV6P///7d1/qN11Hcfx5yutMZ1gIMVaK7M00Iq1xBKHKSz7gaT9Udv6Z/vLoCRHEEEJFhRY1AgLgyLJYC37YeY/wYQ2KjO1jZHNwdCYuTamS0JHUqTv/vh+bn053Hu7d/cez73fng84nM/3c77n+/0cPrwv7/s57/P9JvlLi+8DST4wyTFqcSRZm2RPkkNJDia5qfUb3wMzy1zPO7atQV6gJGcAh4H3AEeBh4EtVfXoRAemsUhyBLi0qrzA/MAkuRI4BXy/qt7S+r4CPFNVt7Z/fl9ZVZ+Z5Di1OGaY788Dp6rqq5McmxZXktXA6qran+QcYB9wPbAN43tQZpnrjzDP2HYFeeEuAx6rqj9V1T+BHwLXTXhMkuapqn4FPDPSfR1wZ2vfSfeHVgMww3xrgKrqeFXtb+3ngEPAGozvwZllrufNBHnh1gBP9raPcpqToWWhgN1J9iW5YdKD0di9uqqOQ/eHF3jVhMej8bsxyR9aCYZfuQ9MkvOBtwMPYnwP2shcwzxj2wR54TJNn3Urw3VFVa0H3g98on1NK2kYvgW8EVgHHAe+NtnhaDElWQX8FNheVc9Oejwan2nmet6xbYK8cEeBtb3t1wLHJjQWjVlVHWvPTwE/oyux0XCdaDVtU7VtT014PBqjqjpRVS9U1YvAdzC+ByPJy+kSpp1VdXfrNr4HaLq5Pp3YNkFeuIeBC5O8IckrgM3AvRMek8Ygydmt6J8kZwPXAH+c/V1a5u4Ftrb2VuDnExyLxmwqWWo+hPE9CEkCfBc4VFU7ei8Z3wMz01yfTmx7FYtF0C4X8nXgDOCOqvrShIekMUhyAd2qMcCZwA+c6+FIsgu4CjgPOAHcAtwD/Ah4HfBn4MNV5Q+7BmCG+b6K7ivYAo4AH5uqUdXylWQD8GvgEeDF1v1ZutpU43tAZpnrLcwztk2QJUmSpB5LLCRJkqQeE2RJkiSpxwRZkiRJ6jFBliRJknpMkCVJkqQeE2RJWgKS7E3y3pG+7Ulub+1LkvwyyeEkjyf5QpKXtde2JXk6yYHe4+JpzvG5JAfb7VYPJHln7zxnvRSfU5KWAxNkSVoadtHdaKhvM7AryUq6mxrcWlUXAW+luxPUTb1976qqdb3Ho/0DJbkcuBZYX1VvAzYCT7aXtwMmyJLUmCBL0tLwE+DaJCsAkpwPvAb4DfBR4P6q2g1QVX8HbgQ+PY/jrwZOVtU/2jFOVtWxJJ9s59mTZE879zVJHkiyP8mPk6xq/UeSfDnJQ+3xpkX43JK05JggS9ISUFV/BR4C3te6NtOtChdwCbBvZP/HgZVJzm1dm0ZKLFaOnGI3sLaVaNye5N3tOLcBx4Crq+rqJOcBNwMbq2o98HvgU73jPFtVlwHfpLuDqCQNjgmyJC0d/TKLzW0bIHS3SB2VXnu0xOL5/o5VdQp4B3AD8DRwV5Jt0xzzXcDFwP1JDgBbgdePjHHq+fK5fjBJWk7OnPQAJEn/cQ+wI8l6YGVV7W/9B4Er+zsmuYCuZOJvSZiLqnoB2AvsTfIIXfL7vZHdAtxXVVtmOswMbUkaDFeQJWmJaKu8e4E7+O9KLcBOYEOSjQCtfOI24Ja5HjvJm5Nc2OtaBzzR2s8B57T274ArpuqLk5yV5KLe+zb1nh+Y6/klaTlxBVmSlpZdwN30rmhRVc8n+SDwjXbZtzXAF6tqZ+99m5Js6G1/vKp+29te1d5/LvAv4DG6cguAbwO/SHK81SFvo7t6xor2+s3A4dZekeRBugWWmVaZJWlZS/f7D0nScpHkemAH3Q/rnvhf+y/ieY8Al1bVyZfqnJI0CSbIkqQ5MUGW9P/CBFmSJEnq8Ud6kiRJUo8JsiRJktRjgixJkiT1mCBLkiRJPSbIkiRJUs+/AfktgCyyeFCdAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "paths = {\n", + " \"ideal\": \"VQA+DD - ideal_0.82_h2.csv\",\n", + " \"noisy\": \"VQA+DD - noisy_0.82_h2.csv\",\n", + " \"dd\": \"VQA+DD - dd_0.82_h2.csv\"\n", + "}\n", + "\n", + "df_ideal = pd.read_csv(paths[\"ideal\"])\n", + "df_noisy = pd.read_csv(paths[\"noisy\"])\n", + "df_dd = pd.read_csv(paths[\"dd\"])\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(df_ideal[\"Step\"], df_ideal[\"Energy (Hartree)\"], label=\"Ideal\", linestyle='--', marker='o')\n", + "plt.plot(df_noisy[\"Step\"], df_noisy[\"Energy (Hartree)\"], label=\"Noisy\", linestyle=':', marker='x')\n", + "plt.plot(df_dd[\"Step\"], df_dd[\"Energy (Hartree)\"], label=\"Noisy + DD\", linestyle='-', marker='s')\n", + "\n", + "plt.xlabel(\"VQE Step\")\n", + "plt.ylabel(\"Energy (Hartree)\")\n", + "plt.title(\"VQE Optimization with and without DD (Bond length = 0.82 Å)\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"vqe_dd_comparison_0.82A.png\", dpi=300, bbox_inches='tight')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "paths = {\n", + " \"ideal\": \"VQA+DD - ideal_0.86_h2.csv\",\n", + " \"noisy\": \"VQA+DD - noisy_0.86_h2.csv\",\n", + " \"dd\": \"VQA+DD - dd_0.86_h2.csv\"\n", + "}\n", + "\n", + "df_ideal = pd.read_csv(paths[\"ideal\"])\n", + "df_noisy = pd.read_csv(paths[\"noisy\"])\n", + "df_dd = pd.read_csv(paths[\"dd\"])\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(df_ideal[\"Step\"], df_ideal[\"Energy (Hartree)\"], label=\"Ideal\", linestyle='--', marker='o')\n", + "plt.plot(df_noisy[\"Step\"], df_noisy[\"Energy (Hartree)\"], label=\"Noisy\", linestyle=':', marker='x')\n", + "plt.plot(df_dd[\"Step\"], df_dd[\"Energy (Hartree)\"], label=\"Noisy + DD\", linestyle='-', marker='s')\n", + "\n", + "plt.xlabel(\"VQE Step\")\n", + "plt.ylabel(\"Energy (Hartree)\")\n", + "plt.title(\"VQE Optimization with and without DD (Bond length = 0.86 Å)\")\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"vqe_dd_comparison_0.86A.png\", dpi=300, bbox_inches='tight')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bond length: 0.62 Å\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Energy (Ideal): -1.112610 Hartree\n", + "Final Energy (Noisy): -1.092163 Hartree\n", + "Final Energy (Noisy + DD):-1.127217 Hartree\n", + "Execution time (Ideal): 0.91s\n", + "Execution time (Noisy): 20.00s\n", + "Execution time (Noisy + DD):27.65s\n", + "\n", + "\n", + "Bond length: 0.82 Å\n" + ] + }, + { + "data": { + "image/png": "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Ubf29VKRaNJXSimlqghN+i6Q/Bxfh6CUUqoYxhjuuOMOWrduzaBBgzhw4MDpZUuWLKFPnz507tyZgQMHsnfvXgDeeustunTpQvv27bn88svJzMz0Vfheo0m/JOvn0vXPO+DYrpLLKqWU8onZs2ezYcMGVq1axVtvvcX8+fMB67HCv/3tb8ycOZMlS5Zwww038NBDDwFw2WWXsWjRIlasWEGrVq2YMmWKLz+CV+gjeyWp0ZDMiATCQ3SgCKWUKs6Vby44673BSXW5pkciJ3PyuKmI5Vd0TmBEcn2OnDjFrR8sOWPZx7f0cHnbv/zyC1dffTWBgYGcc845nH/++QBs2LCB1atXM2DAAADy8vKoW7cuAKtXr+af//wnx44dIyMjg4EDB7q8vcpKk35J6rRlVdLD9I2Ihfw8yDsFweG+jkoppVQhRbVsN8bQpk0bFiw4+4Bj7NixfP7557Rv3553332XlJQUL0TpW5r0XWUMzLoZso7DqI8hINDXESmlVIVS3Jl5eHBgsctjI0NKdWZfWO/evXnzzTe59tprOXDgAD/99BOjRo2iRYsWHDx4kAULFtCjRw9ycnLYuHEjbdq0IT09nbp165KTk8P06dOpV69embdfWWjSd5UIJJ4H2ema8JVSqoK59NJLmTdvHu3ataN58+b06dMHgJCQEGbOnMmdd95JWloaubm53H333bRp04bHH3+cbt260bBhQ9q1a0d6erqPP4XnadIvjeTr/3p98iiEx/guFqWUUmRkZADWpf3XXnutyDIdOnTgl19+Oev9W2+9lVtvvfWs9x999FG3xliRaOv9sji2E17vDn++5etIlFJKKZdp0i+LavWg9VBIPNfXkSillFIu08v7ZREQCJf856/59H0QXcd38SillFIu0DP98lo6DV7tDAd0nGillFIVm57pl1ezAXBwPcQ28XUkSimlVLH0TL+8ouvAwCchKASyMyDjQMl1lFJKKR/QpO8uxsCMUTD9CqvnPqWUUh4nItx3332n559//vkSH7l74403eP/99z0cWcWkl/fdRQR63QW5Wdp5j1JKeUloaCizZs3iwQcfpGbNmi7VGT9+vIejqrj0TN+dmvaHloOs1wfW6xm/Ukp5WFBQEOPGjeOll146a9mOHTvo378/SUlJ9O/fn507dwJW5zvPP/88ABMnTqR169YkJSVx1VVXkZ+f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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Energy (Ideal): -0.972283 Hartree\n", + "Final Energy (Noisy): -0.949198 Hartree\n", + "Final Energy (Noisy + DD):-0.977295 Hartree\n", + "Execution time (Ideal): 0.94s\n", + "Execution time (Noisy): 19.92s\n", + "Execution time (Noisy + DD):27.38s\n", + "\n", + "\n", + "Bond length: 0.86 Å\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Energy (Ideal): -0.954417 Hartree\n", + "Final Energy (Noisy): -0.942784 Hartree\n", + "Final Energy (Noisy + DD):-0.950476 Hartree\n", + "Execution time (Ideal): 0.93s\n", + "Execution time (Noisy): 5.68s\n", + "Execution time (Noisy + DD):7.63s\n", + "\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from scipy.stats import ttest_ind\n", + "\n", + "# Define bond lengths and corresponding file paths\n", + "bond_lengths = [\"0.62\", \"0.82\", \"0.86\"]\n", + "modes = [\"ideal\", \"noisy\", \"dd\"]\n", + "\n", + "file_map = {\n", + " \"ideal\": \"VQA+DD - ideal_{}_h2.csv\",\n", + " \"noisy\": \"VQA+DD - noisy_{}_h2.csv\",\n", + " \"dd\": \"VQA+DD - dd_{}_h2.csv\"\n", + "}\n", + "\n", + "# Loop through each bond length and generate plots + stats\n", + "for bond in bond_lengths:\n", + " print(f\"Bond length: {bond} Å\")\n", + " \n", + " # Load CSVs\n", + " df_ideal = pd.read_csv(file_map[\"ideal\"].format(bond))\n", + " df_noisy = pd.read_csv(file_map[\"noisy\"].format(bond))\n", + " df_dd = pd.read_csv(file_map[\"dd\"].format(bond))\n", + "\n", + " # Plot energy per step\n", + " plt.figure(figsize=(8, 5))\n", + " plt.plot(df_ideal[\"Step\"], df_ideal[\"Energy (Hartree)\"], label=\"Ideal\", linestyle='--')\n", + " plt.plot(df_noisy[\"Step\"], df_noisy[\"Energy (Hartree)\"], label=\"Noisy\", linestyle=':')\n", + " plt.plot(df_dd[\"Step\"], df_dd[\"Energy (Hartree)\"], label=\"Noisy + DD\", linestyle='-')\n", + " plt.xlabel(\"VQE Iteration\")\n", + " plt.ylabel(\"Energy (Hartree)\")\n", + " plt.title(f\"VQE Convergence @ Bond Length = {bond} Å\")\n", + " plt.legend()\n", + " plt.grid(True)\n", + " plt.show()\n", + "\n", + " # Print final energy values\n", + " energy_ideal = df_ideal[\"final_energy\"].dropna().values[0]\n", + " energy_noisy = df_noisy[\"final_energy\"].dropna().values[0]\n", + " energy_dd = df_dd[\"final_energy\"].dropna().values[0]\n", + " print(f\"Final Energy (Ideal): {energy_ideal:.6f} Hartree\")\n", + " print(f\"Final Energy (Noisy): {energy_noisy:.6f} Hartree\")\n", + " print(f\"Final Energy (Noisy + DD):{energy_dd:.6f} Hartree\")\n", + "\n", + " # Execution time comparison\n", + " exec_ideal = df_ideal[\"execution_secs\"].dropna().values[0]\n", + " exec_noisy = df_noisy[\"execution_secs\"].dropna().values[0]\n", + " exec_dd = df_dd[\"execution_secs\"].dropna().values[0]\n", + " print(f\"Execution time (Ideal): {exec_ideal:.2f}s\")\n", + " print(f\"Execution time (Noisy): {exec_noisy:.2f}s\")\n", + " print(f\"Execution time (Noisy + DD):{exec_dd:.2f}s\")\n", + " print(\"\\n\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Statistical Comparison (Steps 0-10)\n", + "Mean Energy (Noisy): -0.104941\n", + "Mean Energy (Noisy + DD):-0.391157\n", + "T-test p-value: 0.0100\n", + "→ Statistically significant improvement with DD in early steps.\n" + ] + } + ], + "source": [ + "from scipy.stats import ttest_ind\n", + "\n", + "# Truncate to first 11 steps (step 0 to step 10)\n", + "early_noisy = df_noisy[df_noisy[\"Step\"] <= 10][\"Energy (Hartree)\"]\n", + "early_dd = df_dd[df_dd[\"Step\"] <= 10][\"Energy (Hartree)\"]\n", + "\n", + "# Perform t-test on early steps\n", + "t_stat_early, p_val_early = ttest_ind(early_noisy, early_dd)\n", + "\n", + "print(\"Statistical Comparison (Steps 0-10)\")\n", + "print(f\"Mean Energy (Noisy): {early_noisy.mean():.6f}\")\n", + "print(f\"Mean Energy (Noisy + DD):{early_dd.mean():.6f}\")\n", + "print(f\"T-test p-value: {p_val_early:.4f}\")\n", + "\n", + "if p_val_early < 0.05:\n", + " print(\"→ Statistically significant improvement with DD in early steps.\")\n", + "else:\n", + " print(\"→ No statistically significant difference in early steps.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overall Statistical Comparison (Steps 0–10 across all bond lengths)\n", + " Mean Energy (Noisy): -0.400727\n", + " Mean Energy (Noisy + DD):-0.590821\n", + " T-test p-value: 0.0311\n", + "→ Statistically significant improvement with DD in early steps.\n" + ] + } + ], + "source": [ + "from scipy.stats import ttest_ind\n", + "import pandas as pd\n", + "\n", + "# Define bond lengths and the corresponding filenames\n", + "bond_lengths = [0.62, 0.82, 0.86]\n", + "noisy_prefix = \"VQA+DD - noisy_\"\n", + "dd_prefix = \"VQA+DD - dd_\"\n", + "suffix = \"_h2.csv\"\n", + "\n", + "# Accumulate early-step (0–10) energy values across all bond lengths\n", + "early_noisy_all = []\n", + "early_dd_all = []\n", + "\n", + "for bond in bond_lengths:\n", + " noisy_file = f\"{noisy_prefix}{bond}{suffix}\"\n", + " dd_file = f\"{dd_prefix}{bond}{suffix}\"\n", + " \n", + " df_noisy = pd.read_csv(noisy_file)\n", + " df_dd = pd.read_csv(dd_file)\n", + " \n", + " # Use 'Step' or fix column names if needed\n", + " df_noisy.columns = [col.strip().lower() for col in df_noisy.columns]\n", + " df_dd.columns = [col.strip().lower() for col in df_dd.columns]\n", + "\n", + " early_noisy = df_noisy[df_noisy[\"step\"] <= 12][\"energy (hartree)\"].dropna()\n", + " early_dd = df_dd[df_dd[\"step\"] <= 12][\"energy (hartree)\"].dropna()\n", + "\n", + " early_noisy_all.extend(early_noisy)\n", + " early_dd_all.extend(early_dd)\n", + "\n", + "# Perform an independent t-test across all early steps from all bond lengths\n", + "t_stat, p_value = ttest_ind(early_noisy_all, early_dd_all, equal_var=False)\n", + "\n", + "print(\"Overall Statistical Comparison (Steps 0–10 across all bond lengths)\")\n", + "print(f\" Mean Energy (Noisy): {pd.Series(early_noisy_all).mean():.6f}\")\n", + "print(f\" Mean Energy (Noisy + DD):{pd.Series(early_dd_all).mean():.6f}\")\n", + "print(f\" T-test p-value: {p_value:.4f}\")\n", + "\n", + "if p_value < 0.05:\n", + " print(\"→ Statistically significant improvement with DD in early steps.\")\n", + "else:\n", + " print(\"→ No statistically significant improvement with DD.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# File paths\n", + "paths = {\n", + " \"Run 1\": \"vqadd_jsd_run1.csv\",\n", + " \"Run 2\": \"vqadd_jsd_run2.csv\",\n", + " \"Run 3\": \"vqadd_jsd_run3.csv\"\n", + "}\n", + "\n", + "# Load and clean data\n", + "dfs = []\n", + "for run, path in paths.items():\n", + " df = pd.read_csv(path, sep=';', encoding='latin1')\n", + " df.columns = [col.strip() for col in df.columns]\n", + " df = df.applymap(lambda x: str(x).strip().replace(',', '.') if isinstance(x, str) else x)\n", + " df[\"Run\"] = run\n", + " dfs.append(df)\n", + "\n", + "# Combine\n", + "df_all = pd.concat(dfs, ignore_index=True)\n", + "\n", + "# Convert types\n", + "df_all[\"JSD w/o DD\"] = df_all[\"JSD w/o DD\"].astype(float)\n", + "df_all[\"JSD with DD\"] = df_all[\"JSD with DD\"].astype(float)\n", + "\n", + "# Compute improvement\n", + "df_all[\"JSD Improvement (%)\"] = 100 * (df_all[\"JSD w/o DD\"] - df_all[\"JSD with DD\"]) / df_all[\"JSD w/o DD\"]\n", + "\n", + "# Filter out outliers\n", + "filtered_df = df_all[\n", + " (df_all[\"JSD Improvement (%)\"] >= -200) &\n", + " (df_all[\"JSD Improvement (%)\"] <= 200)\n", + "]\n", + "\n", + "# Define custom colors\n", + "palette = sns.color_palette(\"Set2\")\n", + "\n", + "# Plot and save\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(x=\"Run\", y=\"JSD Improvement (%)\", data=filtered_df, palette=palette)\n", + "plt.title(\"Boxplot of JSD Improvement (%) per Run (Outliers Removed)\")\n", + "plt.ylabel(\"JSD Improvement (%)\")\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.savefig(\"jsd_improvement_boxplot.png\", dpi=300) # Save the plot as PNG\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/energy_curves_2025-05-20T23:19:03.png b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/energy_curves_2025-05-20T23:19:03.png new file mode 100644 index 0000000..fa2dba7 Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/energy_curves_2025-05-20T23:19:03.png differ diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/jsd_improvement_boxplot.png b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/jsd_improvement_boxplot.png new file mode 100644 index 0000000..00b77a4 Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/jsd_improvement_boxplot.png differ diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.62A.png b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.62A.png new file mode 100644 index 0000000..33d1c81 Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.62A.png differ diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.82A.png b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.82A.png new file mode 100644 index 0000000..8c496ce Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.82A.png differ diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.86A.png b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.86A.png new file mode 100644 index 0000000..99c2638 Binary files /dev/null and b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/visualizations/vqe_dd_comparison_0.86A.png differ diff --git a/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/vqa-dd.py b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/vqa-dd.py new file mode 100644 index 0000000..882303a --- /dev/null +++ b/src/mini_apps/circuit_optimization/VQA_Circuit-Optimization/vqa-dd.py @@ -0,0 +1,839 @@ +import re +import os +import json +import time +import datetime +import numpy as np +import matplotlib.pyplot as plt +import pennylane as qml +from typing import Dict, List, Tuple, Optional, Any +from pennylane.optimize import AdamOptimizer +from engine.manager import MiniAppExecutor +from engine.metrics.csv_writer import MetricsFileWriter +from scipy.stats import entropy + +# Quantum chemistry dataset handling +class QChemDatasetLoader: + def __init__(self, dataset_path: str): + self.dataset_path = dataset_path + self.dataset_file = os.path.join(dataset_path, "dataset.json") + self.meta_file = os.path.join(dataset_path, "meta.json") + self.dataset = None + self.metadata = None + self.dataset_keys = None + self.hamiltonians = [] # Store processed Hamiltonians + self.bond_lengths = [] # Store bond lengths + + def load(self) -> Tuple[Dict, Dict]: + try: + with open(self.dataset_file, 'r') as f: + self.dataset = json.load(f) + + with open(self.meta_file, 'r') as f: + self.metadata = json.load(f) + + print(f"[INFO] Successfully loaded dataset from {self.dataset_path}") + print(f"[INFO] Dataset contains {len(self.dataset)} data points") + print(f"[INFO] Molecule: {self.metadata.get('name', 'Unknown')}") + print(f"[DEBUG] Dataset type: {type(self.dataset)}") + + # Process the dataset based on its structure + self._process_dataset() + + return self.dataset, self.metadata + + except Exception as e: + print(f"[ERROR] Failed to load dataset: {e}") + raise + + def _process_dataset(self): + try: + if isinstance(self.dataset, dict) and 'data' in self.dataset: + for entry in self.dataset["data"]: + try: + bond_length = float(entry["parameters"]["bondlength"]) + term_str = entry["extra"]["hamiltonianTerms"] + # TEMPORARILY assume 2 qubits, just for parsing + coeffs, observables = self.parse_hamiltonian_terms(term_str, n_qubits=2) + n_qubits = len(observables[0]) # Use real size after parsing + self.hamiltonians.append({ + "coeffs": coeffs, + "observables": observables + }) + self.bond_lengths.append(bond_length) + except Exception as e: + print(f"[WARNING] Failed to parse real Hamiltonian data. Using dummy data. Reason: {e}") + self.hamiltonians.append({ + "coeffs": [1.0, -0.5, 0.3], + "observables": [["Z", "I"], ["I", "Z"], ["Z", "Z"]] + }) + self.bond_lengths.append(0.5) + if not self.hamiltonians: + print("[WARNING] Could not extract any Hamiltonian data. Creating dummy data for testing.") + for i in range(5): + self.hamiltonians.append({ + 'coeffs': [1.0, -0.5, 0.3], + 'observables': [['Z', 'I'], ['I', 'Z'], ['Z', 'Z']] + }) + self.bond_lengths.append(0.5 + i * 0.2) + print(f"[INFO] Processed {len(self.hamiltonians)} data points with corresponding bond lengths.") + except Exception as e: + print(f"[ERROR] Error processing dataset: {e}") + import traceback + traceback.print_exc() + print("[WARNING] Creating dummy data as fallback.") + self.hamiltonians = [] + self.bond_lengths = [] + for i in range(5): + self.hamiltonians.append({ + 'coeffs': [1.0, -0.5, 0.3], + 'observables': [['Z', 'I'], ['I', 'Z'], ['Z', 'Z']] + }) + self.bond_lengths.append(0.5 + i * 0.2) + + def parse_hamiltonian_terms(self, term_str: str, n_qubits: int = 8): + coeffs = [] + observables = [] + for line in term_str.strip().split("\n"): + match = re.match(r"\(([^)]+)\)\s+\[([^\]]+)\]", line.strip()) + if match: + coeff = float(match.group(1)) + terms = match.group(2).split() + + # Dynamically determine required qubit count + max_index = max([int(p[1:]) for p in terms]) if terms else 0 + vec_len = max(n_qubits, max_index + 1) + pauli_vec = ['I'] * vec_len + + for pauli in terms: + p_type = pauli[0] + p_index = int(pauli[1:]) + pauli_vec[p_index] = p_type + + coeffs.append(coeff) + observables.append(pauli_vec) + return coeffs, observables + + def get_hamiltonian(self, index: int) -> Tuple[List[float], List[List[str]]]: + if self.dataset is None: + self.load() + + if index >= len(self.hamiltonians): + raise IndexError(f"Index {index} out of range for dataset with {len(self.hamiltonians)} entries") + + hamiltonian_data = self.hamiltonians[index] + return hamiltonian_data['coeffs'], hamiltonian_data['observables'] + + def get_bond_length(self, index: int) -> float: + if self.dataset is None: + self.load() + + if index >= len(self.bond_lengths): + raise IndexError(f"Index {index} out of range for dataset with {len(self.bond_lengths)} entries") + + return self.bond_lengths[index] + + def get_number_of_qubits(self) -> int: + if self.metadata is None: + self.load() + + num_qubits = self.metadata.get("num_qubits", None) + + # If not specified in metadata, try to infer from the Hamiltonians + if num_qubits is None and self.hamiltonians: + # Get first Hamiltonian's observables + _, observables = self.get_hamiltonian(0) + if observables and isinstance(observables[0], list): + # Number of qubits is the length of the first observable term + num_qubits = len(observables[0]) + print(f"[INFO] Inferred {num_qubits} qubits from Hamiltonian observables") + else: + # Default to 2 qubits for H2 molecule + num_qubits = 2 + print(f"[WARNING] Could not infer number of qubits. Defaulting to {num_qubits}") + + return num_qubits or 2 # Default to 2 qubits for H2 molecule + + def get_num_data_points(self) -> int: + if self.dataset is None: + self.load() + + return len(self.hamiltonians) + + def debug_dataset_structure(self): + if self.dataset is None: + self.load() + + print(f"[DEBUG] Dataset type: {type(self.dataset)}") + + try: + if isinstance(self.dataset, dict): + keys = list(self.dataset.keys()) + print(f"[DEBUG] Dataset has {len(keys)} keys") + print(f"[DEBUG] First few keys: {keys[:3]}") + + # Print structure of first data point + if keys: + first_key = keys[0] + print(f"[DEBUG] Structure of first data point (key={first_key}):") + value = self.dataset[first_key] + print(f"[DEBUG] Type: {type(value)}") + + # Handle different value types + if isinstance(value, dict): + for k, v in value.items(): + print(f"[DEBUG] {k}: {type(v)}") + if isinstance(v, list) and len(v) > 0: + print(f"[DEBUG] First element type: {type(v[0])}") + if len(v) > 1: + print(f"[DEBUG] List length: {len(v)}") + elif isinstance(value, list): + print(f"[DEBUG] List length: {len(value)}") + if value: + print(f"[DEBUG] First element type: {type(value[0])}") + elif isinstance(value, str): + print(f"[DEBUG] String value: {value[:50]}{'...' if len(value) > 50 else ''}") + else: + print(f"[DEBUG] Value: {value}") + else: + print(f"[DEBUG] Dataset is not a dictionary. Type: {type(self.dataset)}") + + # Print processed data summary + print(f"[DEBUG] Processed {len(self.hamiltonians)} Hamiltonians") + print(f"[DEBUG] Processed {len(self.bond_lengths)} bond lengths") + + if self.hamiltonians and self.bond_lengths: + print(f"[DEBUG] First Hamiltonian coeffs: {self.hamiltonians[0]['coeffs'][:3]}...") + print(f"[DEBUG] First bond length: {self.bond_lengths[0]}") + + except Exception as e: + print(f"[DEBUG] Error in debug_dataset_structure: {e}") + + +def get_device(n_qubits: int, noisy: bool = False, noise_level: float = 0.05) -> qml.Device: + if noisy: + # Use mixed state simulator for noise + dev = qml.device("default.mixed", wires=n_qubits, shots=1000) + else: + # Use standard qubit simulator with shots for counts + dev = qml.device("default.qubit", wires=n_qubits, shots=1000) + return dev + +# Dynamical decoupling implementation +def apply_dd_sequence(wires) -> None: + for w in wires: + qml.PauliX(w) + qml.PauliY(w) + qml.PauliX(w) + qml.PauliY(w) + +def optimize_vqe(dev, hamiltonian, wires, max_steps=25, stepsize=0.1, use_dd=False, noise_level=0.05): + n_qubits = len(wires) + init_params = qml.numpy.array(np.random.uniform(0, 2*np.pi, size=(2, n_qubits*3)), requires_grad=True) + + # Define cost function for VQE + @qml.qnode(dev) + def cost_function(params): + vqe_ansatz(params, wires=range(n_qubits), use_dd=use_dd) + + if dev.name == "default.mixed": + apply_noise(wires=list(range(n_qubits)), noise_level=noise_level) + + return qml.expval(hamiltonian) + + # Setup optimizer + opt = AdamOptimizer(stepsize=stepsize) + params = init_params + + # Store optimization history + energies = [] + + # Run optimization + for step in range(max_steps): + params = opt.step(cost_function, params) + energy = cost_function(params) + energies.append(energy) + + if step % 5 == 0: + print(f"Step {step}: Energy = {energy:.6f}") + + # Return final energy and optimized parameters + final_energy = cost_function(params) + return final_energy, params + +def jensen_shannon_divergence(p, q): + # Ensure distributions sum to 1 + p = np.array(p) + q = np.array(q) + + if np.sum(p) != 0: + p = p / np.sum(p) + if np.sum(q) != 0: + q = q / np.sum(q) + + # Calculate midpoint distribution + m = 0.5 * (p + q) + + # Calculate JS divergence using KL divergence + jsd = 0.5 * (entropy(p, m) + entropy(q, m)) + + # Ensure the result is a finite number + if np.isnan(jsd) or np.isinf(jsd): + return 0.0 + + return jsd + +# Quantum chemistry circuits +def vqe_ansatz(params: np.ndarray, wires: List[int], use_dd: bool = False, dd_inserted: bool = False) -> None: + n_qubits = len(wires) + n_layers = params.shape[0] + + # Apply parameterized rotations and entangling layers + for layer in range(n_layers): + # Rotation layer + param_width = params.shape[1] + for i in range(n_qubits): + if i*3 + 2 >= param_width: + break # prevent out-of-bounds access + qml.RY(params[layer, i*3], wires=wires[i]) + qml.RZ(params[layer, i*3+1], wires=wires[i]) + qml.RY(params[layer, i*3+2], wires=wires[i]) + + # Entangling layer + for i in range(n_qubits): + qml.CNOT(wires=[wires[i], wires[(i+1) % n_qubits]]) + + # Apply DD sequence if enabled and not already inserted + if use_dd and not dd_inserted: + #print(f"[DEBUG] Inserting DD sequence on wires {wires}") + apply_dd_sequence(wires) + +# Noise model +def get_phase_damping_kraus(prob): + K0 = np.array([[1, 0], [0, np.sqrt(1 - prob)]]) + K1 = np.array([[0, 0], [0, np.sqrt(prob)]]) + return [K0, K1] + +def apply_noise(wires: List[int], noise_level: float = 0.05) -> None: + for wire in wires: + qml.QubitChannel(get_phase_damping_kraus(noise_level), wires=wire) + +# Hamiltonian construction +def construct_hamiltonian(coeffs: List[float], observables: List[List[str]]) -> qml.Hamiltonian: + obs_list = [] + + for obs_terms in observables: + pauli_product = [] + for wire, term in enumerate(obs_terms): + if term == "I": + continue + elif term == "X": + pauli_product.append(qml.PauliX(wire)) + elif term == "Y": + pauli_product.append(qml.PauliY(wire)) + elif term == "Z": + pauli_product.append(qml.PauliZ(wire)) + else: + raise ValueError(f"Unknown Pauli term: {term}") + + if pauli_product: + obs = qml.prod(*pauli_product) if len(pauli_product) > 1 else pauli_product[0] + else: + obs = qml.Identity(0) # Default to Identity on wire 0 if all were "I" + + obs_list.append(obs) + + if len(coeffs) != len(obs_list): + raise ValueError(f"Mismatch: {len(coeffs)} coeffs vs {len(obs_list)} observables") + + return qml.Hamiltonian(coeffs, obs_list) + +# Modified function to run all three scenarios in a single task +def run_combined_qchem_circuit_task(parameters: Dict, hamiltonian_data: Dict, + noise_level: float = 0.05) -> Dict: + try: + print(f"[INFO] Running combined QChem circuit with noise_level={noise_level}") + + n_qubits = len(hamiltonian_data["observables"][0]) + if n_qubits > 12: + print(f"[WARNING] Skipping Hamiltonian with {n_qubits} qubits — too large for memory.") + return { + "ideal": {"energy": None, "skipped": True}, + "noisy": {"energy": None, "skipped": True}, + "noisy_dd": {"energy": None, "skipped": True}, + "qubits": n_qubits + } + + circuit_depth = parameters['circuit_depth'] + + # Create devices for all three scenarios + dev_ideal = get_device(n_qubits, noisy=False) + dev_noisy = get_device(n_qubits, noisy=True, noise_level=noise_level) + dev_noisy_dd = get_device(n_qubits, noisy=True, noise_level=noise_level) + + # Extract Hamiltonian data + coeffs = hamiltonian_data['coeffs'] + observables = hamiltonian_data['observables'] + hamiltonian = construct_hamiltonian(coeffs, observables) + + # Generate random parameters if none provided + if 'circuit_params' in parameters and parameters['circuit_params'] is not None: + params = parameters['circuit_params'] + else: + # Each qubit needs 3 params per layer (RY, RZ, RY) + params = np.random.uniform(0, 2*np.pi, size=(circuit_depth, n_qubits*3)) + + # Run all three scenarios with timing + results = {} + + # 1. Ideal scenario + start_time = time.time() + ideal_energy, ideal_params = optimize_vqe( + dev_ideal, hamiltonian, wires=list(range(n_qubits)), + max_steps=parameters.get("max_steps", 25), + stepsize=parameters.get("stepsize", 0.1), + use_dd=False, + noise_level=0.0 + ) + ideal_time = time.time() - start_time + results["ideal"] = { + "energy": float(ideal_energy), + "execution_time": ideal_time, + "params": ideal_params + } + + # 2. Noisy scenario + start_time = time.time() + noisy_energy, noisy_params = optimize_vqe( + dev_noisy, hamiltonian, wires=list(range(n_qubits)), + max_steps=parameters.get("max_steps", 25), + stepsize=parameters.get("stepsize", 0.1), + use_dd=False, + noise_level=noise_level + ) + noisy_time = time.time() - start_time + results["noisy"] = { + "energy": float(noisy_energy), + "execution_time": noisy_time, + "params": noisy_params + } + + # 3. Noisy with DD scenario + start_time = time.time() + noisy_dd_energy, noisy_dd_params = optimize_vqe( + dev_noisy_dd, hamiltonian, wires=list(range(n_qubits)), + max_steps=parameters.get("max_steps", 25), + stepsize=parameters.get("stepsize", 0.1), + use_dd=True, + noise_level=noise_level + ) + noisy_dd_time = time.time() - start_time + results["noisy_dd"] = { + "energy": float(noisy_dd_energy), + "execution_time": noisy_dd_time, + "params": noisy_dd_params + } + + # Calculate JSD metrics using the best parameters from ideal scenario + try: + # Create circuits for state measurements + @qml.qnode(dev_ideal) + def circuit_ideal_probs(params): + vqe_ansatz(params, wires=range(n_qubits), use_dd=False) + return [qml.expval(qml.PauliZ(i)) for i in range(n_qubits)] + + @qml.qnode(dev_noisy) + def circuit_noisy_probs(params): + vqe_ansatz(params, wires=range(n_qubits), use_dd=False) + if dev_noisy.name == "default.mixed": + apply_noise(wires=range(n_qubits), noise_level=noise_level) + return [qml.expval(qml.PauliZ(i)) for i in range(n_qubits)] + + @qml.qnode(dev_noisy_dd) + def circuit_dd_probs(params): + vqe_ansatz(params, wires=range(n_qubits), use_dd=True) + if dev_noisy_dd.name == "default.mixed": + apply_noise(wires=range(n_qubits), noise_level=noise_level) + return [qml.expval(qml.PauliZ(i)) for i in range(n_qubits)] + + # Get expectation values using the ideal parameters + expvals_ideal = circuit_ideal_probs(ideal_params) + expvals_noisy = circuit_noisy_probs(ideal_params) + expvals_dd = circuit_dd_probs(ideal_params) + + # Convert expectation values to approximate state probabilities + def expvals_to_probs(expvals): + # Convert single-qubit Z expectations to probabilities of states + single_probs = [[(1 + ez)/2, (1 - ez)/2] for ez in expvals] + + # Simplified approach: use product state approximation + n_states = 2**len(expvals) + all_probs = np.zeros(n_states) + + for state_idx in range(n_states): + # Convert index to bit string + bitstring = format(state_idx, f'0{len(expvals)}b') + + # Calculate probability of this bitstring + prob = 1.0 + for q_idx, bit in enumerate(bitstring): + bit_val = int(bit) + prob *= single_probs[q_idx][bit_val] + + all_probs[state_idx] = prob + + return all_probs + + # Get approximate state probabilities + probs_ideal = expvals_to_probs(expvals_ideal) + probs_noisy = expvals_to_probs(expvals_noisy) + probs_dd = expvals_to_probs(expvals_dd) + + # Calculate JSD + jsd_noisy_vs_ideal = jensen_shannon_divergence(probs_ideal, probs_noisy) + jsd_dd_vs_ideal = jensen_shannon_divergence(probs_ideal, probs_dd) + jsd_improvement = max(0, (jsd_noisy_vs_ideal - jsd_dd_vs_ideal) / max(jsd_noisy_vs_ideal, 1e-10)) + + # Add JSD metrics to results + results["jsd_metrics"] = { + "jsd_noisy_vs_ideal": jsd_noisy_vs_ideal, + "jsd_dd_vs_ideal": jsd_dd_vs_ideal, + "jsd_improvement": jsd_improvement + } + + except Exception as e: + print(f"[WARNING] Error calculating JSD: {e}") + import traceback + traceback.print_exc() + results["jsd_metrics"] = { + "jsd_noisy_vs_ideal": None, + "jsd_dd_vs_ideal": None, + "jsd_improvement": None + } + + # Add common metadata + results["metadata"] = { + "bond_length": hamiltonian_data.get("bond_length", 0.0), + "noise_level": noise_level, + "n_qubits": n_qubits + } + + return results + + except Exception as e: + print(f"[ERROR] Combined circuit execution failed: {e}") + import traceback + traceback.print_exc() + return { + "error": str(e), + "ideal": {"energy": None}, + "noisy": {"energy": None}, + "noisy_dd": {"energy": None} + } + +# Modified QChemDDMiniApp class +class OptimizedQChemDDMiniApp: + def __init__(self, cluster_config: Dict, dataset_path: str, + parameters: Optional[Dict] = None, + scenario_label: str = "QChem DD Demo"): + + self.executor = MiniAppExecutor(cluster_config).get_executor() + self.dataset_loader = QChemDatasetLoader(dataset_path) + self.dataset, self.metadata = self.dataset_loader.load() + + # Set default parameters if none provided + if parameters is None: + n_qubits = self.dataset_loader.get_number_of_qubits() + parameters = { + 'n_qubits': n_qubits, + 'circuit_depth': 2, + 'max_steps': 25, # Reduced from default for faster execution + 'stepsize': 0.1, + # Each qubit needs 3 params per layer (RY, RZ, RY) + 'circuit_params': np.random.uniform(0, 2*np.pi, size=(2, n_qubits*3)) + } + + self.parameters = parameters + self.scenario_label = scenario_label + self.cluster_config = cluster_config + + # Set up results directory and file + self.current_datetime = datetime.datetime.now() + self.timestamp = self.current_datetime.strftime('%Y-%m-%dT%H:%M:%S') + self.file_name = f"qchem_dd_results_{self.timestamp}.csv" + + script_dir = os.path.dirname(os.path.abspath(__file__)) + self.result_dir = os.path.join(script_dir, "results") + if not os.path.exists(self.result_dir): + os.makedirs(self.result_dir) + self.result_file = os.path.join(self.result_dir, self.file_name) + + # Create metrics file writer + header = ["timestamp", "scenario", "num_qubits", "compute_time_sec", + "use_dd", "use_noise", "noise_level", "bond_length", "energy", + "jsd_noisy_vs_ideal", "jsd_dd_vs_ideal", "jsd_improvement"] + self.metrics_file_writer = MetricsFileWriter(self.result_file, header) + + def run_optimized_parallel_study(self, noise_level: float = 0.05) -> Dict: + start_time = time.time() + + # Get total number of data points + num_data_points = self.dataset_loader.get_num_data_points() + print(f"[INFO] Running optimized parallel calculations for {num_data_points} bond lengths with all three scenarios") + + # Create list of futures for all tasks + futures = [] + for data_index in range(num_data_points): + # Get Hamiltonian data + coeffs, observables = self.dataset_loader.get_hamiltonian(data_index) + bond_length = self.dataset_loader.get_bond_length(data_index) + + hamiltonian_data = { + 'coeffs': coeffs, + 'observables': observables, + 'bond_length': bond_length + } + + # Submit task to executor - one task per bond length + futures.append(self.executor.submit_task( + run_combined_qchem_circuit_task, + self.parameters, + hamiltonian_data, + noise_level=noise_level + )) + + # Get all results + results = self.executor.get_results(futures) + end_time = time.time() + total_compute_time = end_time - start_time + + print(f"[INFO] Completed {len(results)} bond length calculations in {total_compute_time:.2f} seconds") + + # Organize results by bond length + organized_results = {} + for i, result_dict in enumerate(results): + bond_length = self.dataset_loader.get_bond_length(i) + organized_results[bond_length] = result_dict + + # Record results in CSV file + if "error" not in result_dict: + # Ideal scenario + self.metrics_file_writer.write([ + self.timestamp, + "ideal", + self.parameters['n_qubits'], + result_dict["ideal"].get("execution_time", 0), + False, # use_dd + False, # use_noise + 0.0, # noise_level + bond_length, + result_dict["ideal"].get("energy", None), + None, # jsd metrics not applicable + None, + None + ]) + + # Noisy scenario + self.metrics_file_writer.write([ + self.timestamp, + "noisy", + self.parameters['n_qubits'], + result_dict["noisy"].get("execution_time", 0), + False, # use_dd + True, # use_noise + noise_level, + bond_length, + result_dict["noisy"].get("energy", None), + result_dict.get("jsd_metrics", {}).get("jsd_noisy_vs_ideal", None), + None, + None + ]) + + # Noisy with DD scenario + self.metrics_file_writer.write([ + self.timestamp, + "noisy_dd", + self.parameters['n_qubits'], + result_dict["noisy_dd"].get("execution_time", 0), + True, # use_dd + True, # use_noise + noise_level, + bond_length, + result_dict["noisy_dd"].get("energy", None), + None, + result_dict.get("jsd_metrics", {}).get("jsd_dd_vs_ideal", None), + result_dict.get("jsd_metrics", {}).get("jsd_improvement", None) + ]) + + return organized_results + + def close(self) -> None: + """Clean up resources.""" + if hasattr(self, 'metrics_file_writer'): + self.metrics_file_writer.close() + + def calculate_and_display_dd_improvement(self, results: Dict) -> None: + # Sort results by bond length + bond_lengths = sorted(results.keys()) + + # Prepare data for analysis + ideal_energies = [] + noisy_energies = [] + dd_energies = [] + + jsd_noisy_vs_ideal = [] + jsd_dd_vs_ideal = [] + jsd_improvements = [] + + for bond_length in bond_lengths: + result = results[bond_length] + + ideal_energy = result["ideal"].get("energy", None) + noisy_energy = result["noisy"].get("energy", None) + dd_energy = result["noisy_dd"].get("energy", None) + + ideal_energies.append(ideal_energy) + noisy_energies.append(noisy_energy) + dd_energies.append(dd_energy) + + # Extract JSD metrics + jsd_metrics = result.get("jsd_metrics", {}) + jsd_noisy_vs_ideal.append(jsd_metrics.get("jsd_noisy_vs_ideal", None)) + jsd_dd_vs_ideal.append(jsd_metrics.get("jsd_dd_vs_ideal", None)) + jsd_improvements.append(jsd_metrics.get("jsd_improvement", None)) + + # Calculate error metrics + errors_noisy = [] + errors_dd = [] + improvements = [] + + for i in range(len(bond_lengths)): + if ideal_energies[i] is None or noisy_energies[i] is None or dd_energies[i] is None: + errors_noisy.append(None) + errors_dd.append(None) + improvements.append(None) + continue + + error_noisy = abs(ideal_energies[i] - noisy_energies[i]) + error_dd = abs(ideal_energies[i] - dd_energies[i]) + + errors_noisy.append(error_noisy) + errors_dd.append(error_dd) + + # Calculate percent improvement + if error_noisy > 0: + improvement = (error_noisy - error_dd) / error_noisy * 100 + improvements.append(improvement) + else: + improvements.append(0) + + # Print summary + print("\nDynamic Decoupling Improvement Summary:") + print("Bond Length (Å) | Energy Error w/o DD | Energy Error with DD | Energy Improvement (%) | JSD w/o DD | JSD with DD | JSD Improvement (%)") + print("-" * 120) + + for i in range(len(bond_lengths)): + # Handle potential None values with safe formatting + bond_length_str = f"{bond_lengths[i]:.4f}" if bond_lengths[i] is not None else "N/A" + error_noisy_str = f"{errors_noisy[i]:.6f}" if errors_noisy[i] is not None else "N/A" + error_dd_str = f"{errors_dd[i]:.6f}" if errors_dd[i] is not None else "N/A" + improvement_str = f"{improvements[i]:.2f}" if improvements[i] is not None else "N/A" + + # Handle JSD metrics which might be None + jsd_noisy_str = f"{jsd_noisy_vs_ideal[i]:.6f}" if jsd_noisy_vs_ideal[i] is not None else "N/A" + jsd_dd_str = f"{jsd_dd_vs_ideal[i]:.6f}" if jsd_dd_vs_ideal[i] is not None else "N/A" + + # Calculate JSD improvement percentage safely + jsd_impr_pct = jsd_improvements[i] * 100 if jsd_improvements[i] is not None else None + jsd_impr_str = f"{jsd_impr_pct:.2f}" if jsd_impr_pct is not None else "N/A" + + print(f"{bond_length_str} | {error_noisy_str} | {error_dd_str} | {improvement_str} | {jsd_noisy_str} | {jsd_dd_str} | {jsd_impr_str}") + + # Plot energy curves + plt.figure(figsize=(10, 6)) + + # Filter out None values + valid_indices = [i for i in range(len(bond_lengths)) if ideal_energies[i] is not None] + valid_bond_lengths = [bond_lengths[i] for i in valid_indices] + valid_ideal = [ideal_energies[i] for i in valid_indices] + valid_noisy = [noisy_energies[i] for i in valid_indices] + valid_dd = [dd_energies[i] for i in valid_indices] + + if valid_bond_lengths: + plt.plot(valid_bond_lengths, valid_ideal, 'b-', label='Ideal') + plt.plot(valid_bond_lengths, valid_noisy, 'r--', label='Noisy') + plt.plot(valid_bond_lengths, valid_dd, 'g-.', label='Noisy+DD') + + plt.xlabel('Bond Length (Å)') + plt.ylabel('Energy') + plt.title('H2 Energy vs Bond Length') + plt.legend() + plt.grid(True) + plt.savefig(os.path.join(self.result_dir, f'energy_curves_{self.timestamp}.png')) + else: + print("[WARNING] No valid energy data points to plot") + +# Main execution +if __name__ == "__main__": + RESOURCE_URL_HPC = "ssh://localhost" + WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") + + cluster_info = { + "executor": "pilot", + "config": { + "resource": RESOURCE_URL_HPC, + "working_directory": WORKING_DIRECTORY, + "number_of_nodes": 2, + "cores_per_node": 8, + "gpus_per_node": 2, + "queue": "debug", + "walltime": 30, + "type": "ray", + "scheduler_script_commands": ["#SBATCH --partition=gpua16", "#SBATCH --gres=gpu:2"] + } + } + + # Path to the H2 molecule dataset + dataset_path = "/scratch/4891333/pq/examples/DD/pennylane-datasets/content/qchem/h2-molecule" + + try: + # Display introductory message + print("\nOptimized Quantum Chemistry with Dynamic Decoupling and VQE") + print("This application demonstrates quantum chemistry calculations with:") + print(" 1. H2 molecule data from PennyLane Datasets") + print(" 2. X-Y-X-Y dynamical decoupling (DD) sequences") + print(" 3. Efficient parallel execution of all bond lengths") + print(" 4. Combined ideal, noisy, and noisy+DD scenarios in a single run") + + # Create optimized QChem DD mini-app + qchem_dd_app = OptimizedQChemDDMiniApp(cluster_info, dataset_path, + parameters={ + 'n_qubits': 2, # H2 molecule typically needs 2 qubits + 'circuit_depth': 2, + 'max_steps': 25, # Reduce for faster execution + 'stepsize': 0.1, + 'circuit_params': None # Will be randomly generated + }) + + # Use a fixed noise level of 0.05 + NOISE_LEVEL = 0.05 + + print("\nRunning optimized parallel bond length study...") + # Run parallel bond length studies for all three cases in a single operation + results = qchem_dd_app.run_optimized_parallel_study(noise_level=NOISE_LEVEL) + + # Analyze and display results + qchem_dd_app.calculate_and_display_dd_improvement(results) + + print("\nExecution complete!") + + except Exception as e: + print(f"Error: {e}") + import traceback + traceback.print_exc() + finally: + try: + if 'qchem_dd_app' in locals(): + qchem_dd_app.close() + except: + pass \ No newline at end of file diff --git a/src/mini_apps/circuit_optimization/requirements.txt b/src/mini_apps/circuit_optimization/requirements.txt new file mode 100644 index 0000000..74c6645 --- /dev/null +++ b/src/mini_apps/circuit_optimization/requirements.txt @@ -0,0 +1,19 @@ +qiskit==1.2.4 +qiskit-aer==0.16.0 +qiskit-aer-gpu==0.15.1 +qiskit-addon-cutting==0.9.0 +qiskit-ionq==0.5.12 +qiskit-ibm-provider==0.11.0 +qiskit-ibm-runtime==0.29.0 +PennyLane==0.40.0 +PennyLane-qiskit==0.40.1 +PennyLane_Lightning==0.40.0 +Pilot-Quantum==0.31.23 +ray==2.34.0 +numpy==2.0.2 +matplotlib==3.10.1 +scipy==1.15.2 +scikit-learn==1.6.1 +seaborn==0.13.2 +pandas==2.2.3 +networkx==3.4.2 \ No newline at end of file diff --git a/src/mini_apps/qml_training/data/X_2D.npy b/src/mini_apps/qml_training/data/X_2D.npy deleted file mode 100644 index 42ebec7..0000000 --- a/src/mini_apps/qml_training/data/X_2D.npy +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bf6a3689d191abc150792b53a15b19b3df0090652f7524a541c2833bf9ce34d3 -size 400128 diff --git a/src/mini_apps/qml_training/qml_training_miniapp.py b/src/mini_apps/qml_training/qml_training_miniapp.py deleted file mode 100644 index b9eb5d4..0000000 --- a/src/mini_apps/qml_training/qml_training_miniapp.py +++ /dev/null @@ -1,173 +0,0 @@ -# This file is part of the Quantum Mini-Apps project, based on original work -# adapted from other open-source projects. Contributions made to this file -# are licensed under the terms of the Apache License, Version 2.0. - -# QuGEN Copyright notice: https://github.com/QutacQuantum/qugen -# Copyright 2023 QUTAC, BASF Digital Solutions GmbH, BMW Group, -# Lufthansa Industry Solutions AS GmbH, Merck KGaA (Darmstadt, Germany), -# Munich Re, SAP SE. - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at - -#     http://www.apache.org/licenses/LICENSE-2.0 - -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# system imports -import datetime -import os -import time - -# MiniApp framework imports -from engine.manager import MiniAppExecutor -from engine.metrics.csv_writer import MetricsFileWriter - -# QuGEN imports -from mini_apps.qml_training.utils.discrete_qcbm_model_handler import ( - DiscreteQCBMModelHandler, -) -from qugen.main.data.data_handler import load_data - - -class QMLTrainingMiniApp: - - def __init__(self, cluster_config, parameters=None, scenario_label="QML Training MiniApp"): - self.executor = MiniAppExecutor(cluster_config).get_executor() - self.parameters = parameters - self.scenario_label = scenario_label - self.cluster_config = cluster_config - self.model = None - self.current_datetime = datetime.datetime.now() - self.timestamp = self.current_datetime.strftime('%Y-%m-%dT%H:%M:%S') - self.file_name = f"qml_result_{self.timestamp}.csv" - - script_dir = os.path.dirname(os.path.abspath(__file__)) - # check whether dir exists if not create it - self.result_dir = os.path.join(script_dir, "results") - if not os.path.exists(self.result_dir): - os.makedirs(self.result_dir) - self.result_file = os.path.join(self.result_dir, self.file_name) - header = ["timestamp", "scenario_label", "num_qubits", "compute_time_sec", "parameters", "cluster_info"] - self.metrics_file_writer = MetricsFileWriter(self.result_file, header) - - def run(self): - start_time = time.time() - # Submit the standalone function instead of the instance method - futures = self.executor.submit_task(run_training_task, self.parameters) - result = self.executor.get_results([futures])[0] - end_time = time.time() - compute_time_ms = end_time - start_time - - self.metrics_file_writer.write([ - self.timestamp, - self.scenario_label, - self.parameters["build_parameters"]['n_qubits'], - compute_time_ms, - str(self.parameters), - str(self.cluster_config) - ]) - - self.metrics_file_writer.close() - - def close(self): - self.executor.close() - - -def run_training_task(parameters): - try: - # Create a new instance for each task - model = DiscreteQCBMModelHandler() - - # Construct the path to the dataset - package_path = os.path.dirname(os.path.abspath(__file__)) - data_set_path = os.path.join(package_path, "data", parameters["build_parameters"]["data_set_name"]) - - data, _ = load_data(data_set_path) - - # Build and train model - model.build( - parameters["build_parameters"]['model_type'], - parameters["build_parameters"]['data_set_name'], - n_qubits=parameters["build_parameters"]['n_qubits'], - n_registers=parameters["build_parameters"]['n_registers'], - circuit_depth=parameters["build_parameters"]['circuit_depth'], - circuit_type=parameters["build_parameters"]['circuit_type'], - transformation=parameters["build_parameters"]['transformation'], - hot_start_path=parameters.get("build_parameters", {}).get('hot_start_path', ''), - parallelism_framework=parameters["build_parameters"]['parallelism_framework'] - ) - - model.train( - data, - n_epochs=parameters["train_parameters"]['n_epochs'], - batch_size=parameters["train_parameters"]['batch_size'], - hist_samples=parameters["train_parameters"]['hist_samples'], - ) - - evaluation_df = model.evaluate(data) - minimum_kl_data = evaluation_df.loc[evaluation_df["kl_original_space"].idxmin()] - return minimum_kl_data["kl_original_space"] - except Exception as e: - print(f"Error in run_training_task: {str(e)}") - raise - - -if __name__ == "__main__": - RESOURCE_URL_HPC = "ssh://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - CORES_PER_NODE = 2 - - cluster_info = { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": CORES_PER_NODE, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "conda_environment": "/pscratch/sd/l/luckow/conda/quantum-mini-apps-qml", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - } - } - - qml_parameters = { - "build_parameters": { - 'model_type': "discrete", - 'data_set_name': "X_2D", - 'n_qubits': 8, - 'n_registers': 2, - 'circuit_depth': 2, - 'initial_sigma': 0.01, - 'circuit_type': "copula", - 'transformation': "pit", - 'hot_start_path': "", # path to pre-trained model parameters - "parallelism_framework": "jax" - }, - "train_parameters": { - 'n_epochs': 1, - 'batch_size': 200, - 'hist_samples': 100000 - } - } - - try: - - qml_mini_app = QMLTrainingMiniApp(cluster_info, qml_parameters) - #qml_mini_app.update_parameters(qml_parameters) - qml_mini_app.run() - except Exception as e: - print(f"Error: {e}") - finally: - qml_mini_app.close() - - diff --git a/src/mini_apps/qml_training/utils/__init__.py b/src/mini_apps/qml_training/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/mini_apps/qml_training/utils/discrete_qcbm_model_handler.py b/src/mini_apps/qml_training/utils/discrete_qcbm_model_handler.py deleted file mode 100644 index 43dd4ae..0000000 --- a/src/mini_apps/qml_training/utils/discrete_qcbm_model_handler.py +++ /dev/null @@ -1,531 +0,0 @@ -# This file is part of the Quantum Mini-Apps project, based on original work -# adapted from other open-source projects. Contributions made to this file -# are licensed under the terms of the Apache License, Version 2.0. - -# Copyright 2023 QUTAC, BASF Digital Solutions GmbH, BMW Group, -# Lufthansa Industry Solutions AS GmbH, Merck KGaA (Darmstadt, Germany), -# Munich Re, SAP SE. - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at - -#     http://www.apache.org/licenses/LICENSE-2.0 - -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from pathlib import Path - -import matplotlib.pyplot as plt -import json -import time -import hashlib -import os -import cma -import warnings -import pickle - -from typing import Optional, Callable - -import numpy as np -import jax -import jax.numpy as jnp - -from pandas.core.api import DataFrame as DataFrame -from qugen.main.generator.base_model_handler import BaseModelHandler -from qugen.main.generator.quantum_circuits.discrete_generator_pennylane import generate_samples -from qugen.main.data.data_handler import PITNormalizer, MinMaxNormalizer -from qugen.main.data.helper import random_angle, kl_divergence - - -import matplotlib.pyplot as plt -import matplotlib as mpl - - -jax.config.update("jax_enable_x64", True) -mpl.use("Agg") - - -class DiscreteQCBMModelHandler(BaseModelHandler): - """ - Parameters: - - """ - def __init__(self): - """Initialize the model handler by defining all attributes which should immediately be available across all methods.""" - super().__init__() - self.hist_samples = None - self.device = 'cpu' - self.n_qubits = None - self.n_registers = None - self.circuit_depth = None - self.weights = None - self.generator = None - self.num_params = None - self.circuit = None - self.n_epochs = None - self.sigma = None - self.batch_size = None - self.performed_trainings = 0 - self.hot_start_path = None - self.weights = None - self.save_artifacts = None - self.slower_progress_update = None - self.key = None - - - def build( - self, - model_name, - data_set, - n_qubits=8, - n_registers=2, - circuit_depth=1, - random_seed=2, - initial_sigma=2, - circuit_type='copula', - transformation='pit', - hot_start_path='', - save_artifacts=True, - parallelism_framework= "jax", - slower_progress_update=False - ) -> BaseModelHandler: - """Build the discrete QCBM model. - This defines the architecture of the model, including the circuit ansatz, data transformation and whether the artifacts are saved. - - Args: - model_name (str): The name which will be used to save the data to disk. - data_set: The name of the data set which gets is set as part of the model name - n_qubits (int, optional): Number of qubits. Defaults to 2. - n_registers (int, optional): Number of dimensions of the data. Defaults to 2. - circuit_depth (int, optional): Number of repetitions of qml.StronglyEntanglingLayers. Defaults to 1. - initial_sigma (float, optional): Initial value of sigma used in the CMA optimizer. Defaults to 2.0 - circuit_type (string, optional): name of the circuit anstaz to be used for the QCBM, either "copula" or "standard". Defaults to "copula" - transformation (str, optional): Type of normalization, either "minmax" or "pit". Defaults to "pit". - hot_start_path (str, optional): Path to the location of previously trained model parameters in numpy array format. Defaults to '' which implies that the model will be trained starting with random weights. - save_artifacts (bool, optional): Whether to save the artifacts to disk. Defaults to True. - slower_progress_update (bool, optional): Controls how often the progress bar is updated. If set to True, update every 10 seconds at most, otherwise use tqdm defaults. Defaults to False. - - Returns: - BaseModelHandler: Return the built model handler. It is not strictly necessary to overwrite the existing variable with this - since all changes are made in place. - """ - self.slower_progress_update = slower_progress_update - self.save_artifacts = save_artifacts - self.n_qubits = n_qubits - self.n_registers = n_registers - self.circuit_depth = circuit_depth - self.data_set = data_set - self.sigma= initial_sigma - self.hot_start_path = hot_start_path - time_str = str(time.time()).encode('utf-8') - uniq = hashlib.md5(time_str).hexdigest()[:4] - self.transformation = transformation - self.circuit_type = circuit_type - self.parallelism_framework = parallelism_framework - - self.model_name = model_name + '_' + self.data_set+ '_' + self.circuit_type + '_' + self.transformation+ '_' + 'qcbm_' + uniq - - # jax specific - self.key = jax.random.PRNGKey(random_seed) - - if self.circuit_type == 'copula' and self.transformation != 'pit': - raise ValueError("Copula circuit must have PIT transformation. Current transformation: " + self.transformation) - - - # create list of minimum and maximum of bins per register for histogram creation - all_bins = [] - all_ranges = [] - n = 2 ** (self.n_qubits // self.n_registers) - for _ in range(self.n_registers): - all_bins.append(n) - all_ranges.append([0, 1]) - self.all_bins = all_bins - self.all_ranges = all_ranges - self.path_to_models = "experiments/" + self.model_name - - self.metadata = dict({ - 'model_name': self.model_name, - 'data_set ': self.data_set, - 'n_qubits': self.n_qubits, - 'n_registers': self.n_registers, - 'circuit_type': self.circuit_type, - 'circuit_depth': self.circuit_depth, - 'transformation': self.transformation, - 'hot_start_path': self.hot_start_path, - "training_data": {}, - }) - - - if save_artifacts: - os.makedirs(self.path_to_models) - print('model_name', self.model_name) - with open( - self.path_to_models + "/" + "meta.json", "w" - ) as fp: - json.dump(self.metadata, fp) - - if self.circuit_type == 'copula': - from qugen.main.generator.quantum_circuits.discrete_generator_pennylane \ - import discrete_copula_circuit_JAX as get_generator - elif self.circuit_type == 'standard': - from qugen.main.generator.quantum_circuits.discrete_generator_pennylane \ - import discrete_standard_circuit_JAX as get_generator - else: - raise ValueError("Circuit value must be either 'standard' or 'copula'") - self.generator, self.num_params = get_generator(self.n_qubits, self.n_registers, self.circuit_depth) - return self - - - def save(self, file_path: Path, overwrite: bool = True) -> BaseModelHandler: - """Save the generator weights to disk. - - Args: - file_path (Path): The paths of the pickled generator weights. - overwrite (bool, optional): Whether to overwrite the file if it already exists. Defaults to True. - - Returns: - BaseModelHandler: The model, unchanged. - """ - if overwrite or not os.path.exists(file_path): - with open(file_path, "wb") as file: - pickle.dump(self.generator_weights, file) - return self - - def reload( - self, model_name: str, epoch: int, random_seed: Optional[int] = None - ) -> BaseModelHandler: - """Reload the model parameters and the lastest sigma for the continuing training of the generator from the file weights_file. - - Args: - weights_file (str): The path to the pickled tuple containing the generator weights and sigma value. - - Returns: - BaseModelHandler: The model, but changes have been made in place as well. - """ - - weights_file = "experiments/" + model_name + "/" + "parameters_training_iteration={0}.npy".format(str(epoch)) - meta_file = "experiments/"+ model_name + "/" + "meta.json" - reverse_file = "experiments/" + model_name + "/" + 'reverse_lookup.npy' - - self.weights, self.sigma = np.load(weights_file, allow_pickle=True) - self.reverse_lookup = jnp.load(reverse_file) - - with open(meta_file, 'r') as f: - self.metadata = json.load(f) - - if random_seed is None: - if self.key is None: - self.key = jax.random.PRNGKey(2) - else: - self.key = jax.random.PRNGKey(random_seed) - if self.key is not None: - warnings.warn( - "Random state already initalized in the model handler, but a random_seed was specified when reloading." - ) - - self.n_qubits = self.metadata["n_qubits"] - self.n_registers = self.metadata["n_registers"] - self.circuit_depth = self.metadata["circuit_depth"] - self.transformation = self.metadata["transformation"] - self.performed_trainings = len(self.metadata["training_data"]) - self.circuit_type = self.metadata['circuit_type'] - - if self.generator is None: - if self.circuit_type == 'copula': - from qugen.main.generator.quantum_circuits.discrete_generator_pennylane \ - import discrete_copula_circuit_JAX as get_generator - elif self.circuit_type == 'standard': - from qugen.main.generator.quantum_circuits.discrete_generator_pennylane \ - import discrete_standard_circuit_JAX as get_generator - else: - raise ValueError("Circuit value must be either 'standard' or 'copula'") - self.generator, self.num_params = get_generator(self.n_qubits, self.n_registers, self.circuit_depth) - return self - - - def plot_training_data(self, train_dataset: np.array): - """ Plot training data and compute an estimate of the true probability distribution """ - size = (5, 5) - plt.rcParams["figure.figsize"] = size - - data_histogram = np.histogramdd(train_dataset, bins=self.all_bins, range=self.all_ranges) - true_probability = data_histogram[0]/np.sum(data_histogram[0]) - - if self.n_registers ==2: - plt.imshow((true_probability), interpolation='none') - elif self.n_registers ==3: - z_slice = 1 - plt.imshow(true_probability[:, :, z_slice], interpolation='none') - plt.show() - - - def evaluator(self, solutions): - if self.parallelism_framework=="sequential": - return self.evaluator_sequential(solutions) - elif self.parallelism_framework=="jax": - return self.evaluator_jax(solutions) - - - def evaluator_sequential(self, solutions): - """Computes the loss function for all candidate solutions from CMA sequentially. - - Args: - solutions (list): List of the potential weights which the CMA algorithm has sampled. - - Returns: - loss (list): List of all training losses corresponding to each entry in solutions. - """ - print("Using Jax Sequential Version") - # Split the random key - self.key, subkey = jax.random.split(self.key) - - # Initialize the list to store binary samples - binary_samples = [] - - # Generate binary samples sequentially - for weights in solutions: - binary_sample = self.generator( - subkey, - weights, - n_shots=self.hist_samples, - ) - binary_samples.append(binary_sample) - - # Convert binary samples list to jnp.array - binary_samples = jnp.array(binary_samples) - - # Initialize the list to store samples - samples = [] - - # Iterate over binary samples to generate samples sequentially - for binary_sample in binary_samples: - subkey, next_subkey = jax.random.split(subkey) - sample = generate_samples(next_subkey, binary_sample, self.n_registers, self.n_qubits, noisy=False) - samples.append(sample) - - # Initialize the list to store losses - loss = [] - - # Calculate the loss sequentially for each sample - for sample in samples: - learned_histogram = jnp.histogramdd(sample, bins=self.all_bins, range=self.all_ranges) - learned_probability = learned_histogram[0]/jnp.sum(learned_histogram[0]) - kl_loss = kl_divergence(self.true_probability, learned_probability) - loss.append(kl_loss) - - # Convert loss to list and return - return loss.tolist() - - - def evaluator_jax(self, solutions): - """Computes the loss function for all candidate solutions from CMA - - Args: - solutions (list): List of the potential weights which the CMA algorithm has sampled. - - Returns: - loss (list): List of all training losses corresponding to each entry in solutions. - """ - print("Using Jax Evaluator") - self.key, subkey = jax.random.split(self.key) - - v_generator = jax.vmap( - lambda weights: self.generator( - subkey, - weights, - n_shots=self.hist_samples, - ) - ) - - solutions = jnp.array(solutions) - binary_samples = v_generator(solutions) - - def iterate_samples(subkey, binary_sample): - return generate_samples(subkey, binary_sample, self.n_registers, self.n_qubits, noisy=False) - - keys = jax.random.split(self.key, num=binary_samples.shape[0] + 1) - self.key, subkeys = keys[0], keys[1:] - samples = jax.vmap(iterate_samples)(subkeys, binary_samples) - - def iterate_loss(sample): - learned_histogram = jnp.histogramdd(sample, bins=self.all_bins, range=self.all_ranges) - learned_probability = learned_histogram[0]/jnp.sum(learned_histogram[0]) - return kl_divergence(self.true_probability, learned_probability) - loss = jax.vmap(iterate_loss)(samples) - return loss.tolist() - - - def train( - self, - train_dataset: np.array, - n_epochs = 500, - batch_size = 200, - hist_samples = 10000, - plot_training_data = False, - - ) -> BaseModelHandler: - - """Train the discrete QCBM. - - Args: - train_dataset (np.array): The training dataset. - n_epochs (int): The number of epochs. - batch_size (int, optional): The population size used for the CMA optimizer. Defaults to 200 - hist_samples (int, optional): Number of samples generated from the generator at every epoch to compute the loss fucntion. Defaults to 1e4 - plot_training_data (bool): If True, a plot of the training data is displayed for debugging purposes - - Returns: - BaseModelHandler: The trained model. - """ - - self.n_epochs = n_epochs # less data, so we need more epochs - self.batch_size = batch_size #aka population size - self.hist_samples = hist_samples - - if self.transformation == 'minmax': - self.normalizer = MinMaxNormalizer(epsilon=1e-6) - elif self.transformation == 'pit': - self.normalizer = PITNormalizer(epsilon=1e-6) - else: - raise ValueError("Transformation value must be either 'minmax' or 'pit'") - - train_dataset = self.normalizer.fit_transform(train_dataset) - self.reverse_lookup = self.normalizer.reverse_lookup - - if self.performed_trainings == 0: - self.previous_trained_epochs = 0 - else: - self.previous_trained_epochs = sum([self.metadata["training_data"][str(i)]["n_epochs"] for i in range(self.performed_trainings)]) - - training_data = {} - training_data["batch_size"] = self.batch_size - training_data["n_epochs"] = self.n_epochs - training_data["sigma"] = self.sigma - self.metadata["training_data"][str(self.performed_trainings)] = training_data - self.performed_trainings += 1 - if self.save_artifacts: - with open(self.path_to_models + "/" + "meta.json", "w+") as file: - json.dump(self.metadata, file) - - jnp.save(self.path_to_models + "/" + 'reverse_lookup.npy', self.reverse_lookup) - - self.data_histogram = np.histogramdd(train_dataset, bins=self.all_bins, range=self.all_ranges) - self.true_probability = self.data_histogram[0]/np.sum(self.data_histogram[0]) - - if plot_training_data ==True: - self.plot_training_data(train_dataset) - - # Try to upload pre-trained parameters for higher depth and default to random angle. - if self.weights is not None: - x0 = self.weights - print('Training starting from lastest model parameters') - - elif self.hot_start_path == '': - x0 = random_angle(self.num_params) - print('Training starting from random parameter values') - else: - try: - init_params, _ = np.load(self.hot_start_path, allow_pickle=True) - x0 = np.zeros(self.num_params) - x0[:len(init_params)] = init_params - print(f'Training starting from parameters in path {self.hot_start_path}') - except FileNotFoundError: - warnings.warn("Cannot find hot start parameters file, defaulting to using random parameter values") - x0 = random_angle(self.num_params) - - iter = 0 - print(f'starting training with sigma at value {self.sigma}') - log = [('iteration', 'n_epochs', 'training_batch_ratio', 'kl_div_transformed', 'time')] - bounds = [self.num_params * [-np.pi], self.num_params * [np.pi]] - options = {'bounds': bounds, 'maxfevals': self.n_epochs*self.batch_size, 'popsize': self.batch_size, 'verbose': -3} - es = cma.CMAEvolutionStrategy(x0, self.sigma, options) - mininterval = 10 - time_of_last_update = time.time() - while not es.stop(): - t_0 = time.time() - solutions = es.ask() - loss = self.evaluator(solutions) - es.tell(solutions, loss) - iter += 1 - if self.slower_progress_update: - cand_time = time.time() - time_since_last_update = cand_time - time_of_last_update - if time_since_last_update >= mininterval: - es.disp() - time_of_last_update = cand_time - - else: - es.disp() - log.append((iter, self.n_epochs, len(train_dataset) // self.batch_size, es.result[1], - time.time() - t_0)) - # save the logged process and the current weights to file - self.weights = es.result[0] - last_sigma = es.sigma - if self.save_artifacts: - file_path = f"{self.path_to_models}/parameters_training_iteration={iter + self.previous_trained_epochs}" - np.save(file_path, np.array([self.weights, last_sigma], dtype=object)) - np.save(self.path_to_models+ '/log_' + str(iter + self.previous_trained_epochs), np.array(log)) - - t_0 = time.time() - self.sigma = last_sigma - return self - - - def predict(self, - n_samples: int, - ) -> np.array: - """Generate samples from the trained model and perform the inverse of the data transformation - which was used to transform the training data to be able to compute the KL-divergence in the original space. - - Args: - n_samples (int, optional): Number of samples to generate. - - Returns: - np.array: Array of samples of shape (n_samples, sample_dimension). - """ - samples_transformed = self.predict_transform(n_samples) - - if self.transformation == 'pit': - self.transformer = PITNormalizer(epsilon=1e-6) - elif self.transformation == 'minmax': - self.transformer = MinMaxNormalizer(epsilon=1e-6) - - self.transformer.reverse_lookup = self.reverse_lookup - samples = self.transformer.inverse_transform(samples_transformed) - return samples - - def predict_transform(self, - n_samples: int, - ) -> np.array: - """Generate samples from the trained model in the transformed space (the n-dimensional unit cube). - - Args: - n_samples (int, optional): Number of samples to generate. - - Returns: - np.array: Array of samples of shape (n_samples, sample_dimension). - """ - if self.performed_trainings == 0: - raise ValueError( - "Please train the model before trying to generate samples." - ) - - # JAX - self.key, subkey = jax.random.split(self.key) - binary_samples = self.generator( - subkey, - weights=jnp.array(self.weights), - n_shots=n_samples, - ) - self.key, subkey = jax.random.split(self.key) - samples = generate_samples(subkey, binary_samples, self.n_registers, self.n_qubits, noisy=True) - - samples_transformed = np.array(samples) - - return samples_transformed - diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/README.md b/src/mini_apps/quantum_simulation/circuit_cutting/README.md deleted file mode 100644 index 5ce7771..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/README.md +++ /dev/null @@ -1,259 +0,0 @@ -# Quantum Circuit Cutting Mini-App Documentation - -## Overview -The Quantum Circuit Cutting Mini-App is a benchmarking tool designed to evaluate and compare the performance of quantum circuit cutting techniques against full circuit simulation. It supports both distributed and local execution modes, with capabilities for GPU acceleration and MPI-based parallel processing. - -## Key Features -- Circuit cutting with configurable subcircuit sizes -- Full circuit simulation with distributed state vector capabilities -- GPU acceleration support -- Flexible backend configuration for both cutting and full simulation -- Comprehensive metrics collection and reporting -- Support for both local and HPC (Perlmutter) environments - -## Background - -Circuit cutting is a technique to increase the size of circuits we can run on quantum hardware at the cost of an additional sampling overhead. A larger quantum circuit can be decomposed by cutting its gates and wires, resulting in smaller circuits that can be executed within the constraints of available quantum hardware. The results of these smaller circuits are combined to reconstruct the outcome of the original problem. Quantum Mini app framework uses Qiskit’s circuit quasiprobability decomposition (QPD) method. QPD allows the splitting of large quantum circuits into smaller sub-circuits that can be run on smaller quantum hardware or simulators with limited qubits. However, this comes with a cost: the number of times the sub-circuits need to be executed increases exponentially as the circuit size grows. - -## Configuration - -### Hardware Configuration -```python -BENCHMARK_CONFIG = { - 'num_runs': 3, - 'hardware_configs': [ - { - 'nodes': [1], - 'cores_per_node': 1, - 'gpus_per_node': [1] - } - ], - 'circuit_configs': [ - { - 'qubit_sizes': [34], - 'subcircuit_sizes': [17, 12], - 'num_samples': 1000 - } - ] -} -``` - -### Backend Options -```python -CIRCUIT_CUTTING_SIMULATOR_BACKEND_OPTIONS = { - "backend_options": { - "device": "GPU", - "method": "statevector", - "shots": 4096, - "blocking_enable": True, - "batched_shots_gpu": True, - "blocking_qubits": 23 - }, - "mpi": False -} -``` - -## Usage - -### Basic Execution -```python -from mini_apps.quantum_simulation.circuit_cutting.mini_app import QuantumSimulation - -# Create cluster configuration -cluster_config = create_cluster_info_perlmutter(nodes=1, cores=128, gpus=4) - -# Create parameters -parameters = create_cc_parameters( - circuit_size=34, - subcircuit_size=17, - num_samples=1000, - num_nodes=1, - num_cores=128, - num_gpus=4 -) - -# Initialize and run simulation -qs = QuantumSimulation(cluster_config, parameters) -qs.run() -qs.close() -``` - -### Running Benchmarks -```python -from mini_apps.quantum_simulation.circuit_cutting.mini_app import run_mini_app_benchmark - -# Execute benchmark suite -run_mini_app_benchmark() -``` - -## Key Components - -### CircuitCuttingBuilder -Builder class for configuring circuit cutting simulations with customizable settings: -- Subcircuit size -- Base qubits -- Observables -- Scale factor -- Backend options -- Resource allocation -- Result file paths - -### CircuitCutting -Main class implementing the circuit cutting algorithm: -- Pre-processing for circuit cutting -- Distributed execution of subcircuits -- Full circuit simulation -- Metrics collection and reporting - -## Metrics Collected -- Experiment start time -- Circuit and subcircuit sizes -- Number of tasks -- Transpilation times -- Execution times -- Circuit cutting specific metrics -- Full circuit simulation metrics -- Error estimation - -## Output Format -Results are saved in CSV format with comprehensive metrics including: -- Timing information -- Resource usage -- Error measurements -- Configuration details -- Performance metrics - -## Hardware Support -- Local execution -- HPC clusters (specifically Perlmutter) -- GPU acceleration -- MPI-based distributed computing - -## Dependencies -- Qiskit and related packages -- Ray for distributed execution -- NumPy for numerical operations -- MPI for distributed state vector simulation - -## Error Handling -The mini-app includes comprehensive error handling and logging: -- Configuration validation -- Runtime error capture -- Resource availability checks -- Execution state monitoring - -## Best Practices -1. Start with smaller circuits for testing -2. Monitor GPU memory usage -3. Adjust subcircuit sizes based on available resources -4. Use appropriate backend options for your hardware -5. Enable logging for debugging - -## Limitations -- GPU memory constraints for large circuits -- Overhead from circuit cutting for certain circuit topologies -- MPI scaling limitations for full circuit simulation - -## Example Configuration for Perlmutter -```python -cluster_config = { - "executor": "pilot", - "config": { - "resource": "slurm://localhost", - "working_directory": "/path/to/work", - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": 128, - "gpus_per_node": 4, - "queue": "premium", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": [ - "#SBATCH --constraint=gpu&hbm80g", - "#SBATCH --gpus-per-task=1", - "#SBATCH --ntasks-per-node=4", - "#SBATCH --gpu-bind=none" - ] - } -} -``` - - - - -# Qiskit GPU Compilation from Source on Perlmutter - -* Source: - * https://github.com/Qiskit/qiskit-aer/blob/main/CONTRIBUTING.md - - -* Modules: - - ``` - module load conda python - module load PrgEnv-gnu mpich cudatoolkit craype-accel-nvidia80 - ``` - -* Compiler Commands: - - * without cuquantum - ``` - conda install -c conda-forge mpi4py mpich=4.2.*=external_* - ``` - - ``` - python ./setup.py bdist_wheel -- -DAER_MPI=True -DAER_THRUST_BACKEND=CUDA - ``` - - * Install wheel: - ``` - pip install -U dist/*.whl - ``` - - * alternatively with cuquantum: - - * Install cuquantum: - - * Modify build script ```CMakeLists.txt```: - * remove old ref to -lcutensor - * ```CMAKELists.txt:``` remove `${CUDA_VERSION_MAJOR}` in path to cuquantum if you install cuquantum from tar.gz archive - - * Compile: - ``` - python ./setup.py bdist_wheel -- \ - -DAER_MPI=True \ - -DAER_THRUST_BACKEND=CUDA \ - -DCUQUANTUM_ROOT=$CUQUANTUM_ROOT \ - -DCUSTATEVEC_ROOT=$CUQUANTUM_ROOT \ - -DAER_ENABLE_CUQUANTUM=true \ - -DUSER_LIB_PATH=cuquantum-linux-x86_64-24.11.0.21_cuda12-archive/lib - ``` - * Install wheel: - pip install -U dist/*.whl - -# Run Examples - -* Setup environment: - - export MPICH_GPU_SUPPORT_ENABLED=1 - export NUM_GPUS=4 - export CUQUANTUM_ROOT=//cuquantum-linux-x86_64-24.11.0.21_cuda12-archive/ - export LD_LIBRARY_PATH=$CUQUANTUM_ROOT/lib - - -* Single Node: - - srun -n 2 python test_qiskit_aergpu.py - - srun --ntasks-per-node=4 --gpus-per-task=1 python test_qiskit_aergpu.py - -* Multi Node: - - srun -N 2 --ntasks-per-node=4 --gpus-per-task=1 python test_qiskit_aergpu.py - -# Other things - -* Cleaning - - pip uninstall qiskit-aer-gpu - pip uninstall qiskit-aer \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/README_Container_Perlmutter.md b/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/README_Container_Perlmutter.md deleted file mode 100644 index 389c926..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/README_Container_Perlmutter.md +++ /dev/null @@ -1,87 +0,0 @@ -# Running distributed statevector simulation with cuQuantum appliance 24.08 on Perlmutter - -## Overview - -Relevant documentation: -Shifter documentation: https://docs.nersc.gov/development/containers/shifter/how-to-use/ -cuQuantum documentation: https://docs.nvidia.com/cuda/cuquantum/latest/appliance/qiskit.html#getting-started -Relevant CuQuantum Issue: https://github.com/NVIDIA/cuQuantum/discussions/117 - -## Interactive Testing - -### Shifter - -Currently evaluating the following container versions: -* nvcr.io/nvidia/cuquantum-appliance:24.08-x86_64 (not compatible due to shifter lack of cuda 12.2 support) -* nvcr.io/nvidia/cuquantum-appliance:24.08-cuda11.8.0-devel-ubuntu22.04-x86_64 (compatible with shifter?? to be tested) - - - - -### Start SLURM Session - -* allocate an interactive GPU node - - salloc --account x --nodes 1 --qos interactive --time 04:00:00 --constraint gpu --gpus 4 - - -### Test CuQuantum 24.08 Container - -* Interactive Log into container - - shifter --image=nvcr.io/nvidia/cuquantum-appliance:24.08-x86_64 /bin/bash - - shifter --image=nvcr.io/nvidia/quantum/cuda-quantum:cu12-0.9.1 /bin/bash - - * Run test script - - export MPICH_GPU_SUPPORT_ENABLED=1 - /opt/conda/envs/cuquantum-24.08/bin/python - - - -* Run test script from outside container - - - * MPICH - $ export MPICH_GPU_SUPPORT_ENABLED=1 - - - $ export LD_LIBRARY_PATH=/opt/conda/envs/cuquantum-24.08/lib:/opt/conda/envs/cuquantum-24.08/lib/python3.11/site-packages/cuquantum/lib:/opt/udiImage/modules/gpu/lib64:/opt/udiImage/modules/mpich - - $ srun -n 2 --mpi=pmix shifter --env LD_LIBRARY_PATH=$LD_LIBRARY_PATH --image=nvcr.io/nvidia/cuquantum-appliance:24.08-x86_64 --module=cuda-mpich /opt/conda/envs/cuquantum-24.08/bin/python test_qiskit_cuquantum.py - - $ srun -n 2 --mpi=pmix shifter --env=/opt/conda/envs/cuquantum-24.08/lib:/opt/conda/envs/cuquantum-24.08/lib/python3.11/site-packages/cuquantum/lib:/opt/udiImage/modules/gpu/lib64:/opt/udiImage/modules/mpich --image=nvcr.io/nvidia/cuquantum-appliance:24.08-x86_64 --module=cuda-mpich /opt/conda/envs/cuquantum-24.08/bin/python test_qiskit_cuquantum.py - - - $ srun -n 2 \ - --mpi=pmix \ - shifter \ - --env LD_LIBRARY_PATH=/opt/udiImage/modules/gpu/lib64:/opt/udiImage/modules/mpich \ - --env CUQUANTUM_COMM_BACKEND=MPI \ - --env CUQUANTUM_ROOT=/opt/conda/envs/cuquantum-24.08/\ - --image=nvcr.io/nvidia/cuquantum-appliance:24.08-cuda11.8.0-devel-ubuntu22.04-x86_64 \ - --module=cuda-mpich \ - bash -c "export LD_LIBRARY_PATH=/opt/udiImage/modules/gpu/lib64:/opt/udiImage/modules/mpich:$LD_LIBRARY_PATH && \ - export PYTHONPATH = - /opt/conda/bin/conda run --prefix /opt/conda/envs/cuquantum-24.08/ python test_qiskit_cuquantum.py" - - - - -### Test CUDA-Q 24.11 Container (works) - -* Container: - * nvcr.io/nvidia/quantum/cuda-quantum:cu11-0.9.1 - -* Examplerun - $ export MPICH_GPU_SUPPORT_ENABLED=1 - $ srun -n 1 --mpi=pmix shifter --image=nvcr.io/nvidia/quantum/cuda-quantum:cu11-0.9.1 --module=cuda-mpich python test_cudaq.py - - - - - \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_cudaq.py b/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_cudaq.py deleted file mode 100644 index e09698a..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_cudaq.py +++ /dev/null @@ -1,27 +0,0 @@ -import cudaq -# from mpi4py import MPI - -# print(cudaq.get_targets()) -cudaq.set_target("nvidia", option="mgpu") -cudaq.mpi.initialize() - - -@cudaq.kernel -def ghz(numQubits:int): - qubits = cudaq.qvector(numQubits) - h(qubits.front()) - for i, qubit in enumerate(qubits.front(numQubits - 1)): - x.ctrl(qubit, qubits[i + 1]) - -#counts = cudaq.sample(ghz, 30, execution_mode=cudaq.ExecutionMode.MPI) -counts = cudaq.sample(ghz, 30) - -rank = cudaq.mpi.rank() -size = cudaq.mpi.num_ranks() -# rank = cudaq.mpi.rank() -print(f"rank: {rank}, num_ranks: {size}") -if rank == 0: - for bits, count in counts.items(): - print('Observed {} {} times.'.format(bits, count)) - -cudaq.mpi.finalize() \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_aergpu.py b/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_aergpu.py deleted file mode 100644 index 6dc1ee5..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_aergpu.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Only works with MPI-compile Qiskit-AER-GPU -""" - -import os -import sys -from qiskit import QuantumCircuit, transpile -from qiskit_aer import Aer, AerSimulator -import numpy as np -# from mpi4py import MPI - - -def test_ghz_circuit(n_qubits): - circuit = QuantumCircuit(n_qubits) - circuit.h(0) - for qubit in range(n_qubits - 1): - circuit.cx(qubit, qubit + 1) - return circuit - -# Configure GPU simulator with clean parameter formatting -simulator = AerSimulator( - method='statevector', - device='GPU', - blocking_enable=True, - blocking_qubits=24 -) - -# cuStateVec_enable=False, - -# Test execution -print("Created simulator with GPU device") -circuit = test_ghz_circuit(n_qubits=32) -print(f"Created GHZ circuit with {circuit.num_qubits} qubits") -circuit.measure_all() -print("Added measurements to circuit") -circuit = transpile(circuit, simulator) -print("Transpiled circuit for GPU simulator") -job = simulator.run(circuit) -print("Submitted job to simulator") -result = job.result() -dict = result.to_dict() -meta = dict.get('metadata', {}) -myrank = meta.get('mpi_rank', 0) if meta else None - -if myrank == 0: - print("Got result from simulator") - print(result.get_counts()) - diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_cuquantum.py b/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_cuquantum.py deleted file mode 100644 index 5396e2a..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/cuquantum_diststatevec/test_qiskit_cuquantum.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Only works with Ququantum Appliance -""" - -import os -import sys -sys.path.insert(0, "/opt/udiImage/modules/mpich") -sys.path.insert(0, "/opt/udiImage/modules/gpu/lib64") -print(str(sys.path)) - -# os.environ["LD_LIBRARY_PATH"] = "/opt/conda/envs/cuquantum-24.08/lib" -# os.system("printenv LD_LIBRARY_PATH") - -from qiskit import QuantumCircuit, transpile -from qiskit_aer import Aer -from cuquantum import contract -import numpy as np -from mpi4py import MPI -import cusvaer - - -# print(f"mpi4py: rank: {MPI.COMM_WORLD.Get_rank()}, size: {MPI.COMM_WORLD.Get_size()}") - -def test_ghz_circuit(n_qubits): - circuit = QuantumCircuit(n_qubits) - circuit.h(0) - for qubit in range(n_qubits - 1): - circuit.cx(qubit, qubit + 1) - return circuit - -def test_cutensor(): - a = np.random.rand(2, 2).astype(np.complex64) - b = np.random.rand(2, 2).astype(np.complex64) - result = contract("ij,jk->ik", a, b) - print(result) - - - -# Test the cuTensor library -# test_cutensor() - -# Test the GHZ circuit -# simulator = Aer.get_backend('aer_simulator_statevector') -# circuit = test_ghz_circuit(n_qubits=20) -# circuit.measure_all() -# circuit = transpile(circuit, simulator) -# job = simulator.run(circuit) -# result = job.result() - -# opt/nvidia/hpc_sdk/Linux_x86_64/22.7/math_libs/11.7/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/22.7/cuda/11.7/extras/CUPTI/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/22.7/cuda/11.7/extras/Debugger/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/22.7/cuda/11.7/nvvm/lib64:/opt/nvidia/hpc_sdk/Linux_x86_64/22.7/cuda/11.7/lib64:/opt/cray/libfabric/1.20.1/lib64 - -options = { - # 'device': "GPU", - # 'cusvaer_enable': True, - 'cusvaer_comm_plugin_type': cusvaer.CommPluginType.MPI_MPICH, # automatically select Open MPI or MPICH - 'cusvaer_comm_plugin_soname': 'libmpi.so', # MPI library name is libmpi.so - 'cusvaer_global_index_bits': [2, 1], # 8 devices per node, 4 nodes - 'cusvaer_p2p_device_bits': 2, # 8 GPUs in one node - 'precision': 'double' # use complex128 -} - -simulator = cusvaer.backends.StatevectorSimulator() -simulator.set_options(**options) - -circuit = test_ghz_circuit(n_qubits=30) -circuit.measure_all() -job = simulator.run(circuit) -result = job.result() -if result.mpi_rank == 0: - print(result.get_counts()) - print(f'backend: {result.backend_name}') diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/mini_app.py b/src/mini_apps/quantum_simulation/circuit_cutting/mini_app.py deleted file mode 100644 index e4ab2db..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/mini_app.py +++ /dev/null @@ -1,207 +0,0 @@ -import os -import sys -import math -import datetime -import time -import logging -import psutil -import subprocess -# import pdb - -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..")) - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_cutting.motif import ( - BASE_QUBITS, - NUM_SAMPLES, - OBSERVABLES, - SCALE_FACTOR, - CIRCUIT_CUTTING_SIMULATOR_BACKEND_OPTIONS, - FULL_CIRCUIT_SIMULATOR_BACKEND_OPTIONS, - SUB_CIRCUIT_TASK_RESOURCES, - SUBCIRCUIT_SIZE, - FULL_CIRCUIT_TASK_RESOURCES, - FULL_CIRCUIT_ONLY, - CIRCUIT_CUTTING_ONLY, - SCENARIO_LABEL, - CircuitCuttingBuilder -) - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - -# Define benchmark configurations at the top -BENCHMARK_CONFIG = { - 'num_runs': 3, - 'hardware_configs': [ - { - 'nodes': [1], - 'cores_per_node': 1, - 'gpus_per_node': [1] - } - ], - 'circuit_configs': [ - { - 'qubit_sizes': [34], - 'subcircuit_sizes': [17, 12], # 30//4 + 1 - 'num_samples': 1000 - } - ] -} - -timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") - - -class QuantumSimulation: - def __init__(self, cluster_config, parameters=None): - self.executor = MiniAppExecutor(cluster_config).get_executor() - self.parameters = parameters - - def run(self): - cc_builder = CircuitCuttingBuilder() - cc = ( - cc_builder.set_subcircuit_size(self.parameters[SUBCIRCUIT_SIZE]) - .set_base_qubits(self.parameters[BASE_QUBITS]) - .set_observables(self.parameters[OBSERVABLES]) - .set_scale_factor(self.parameters[SCALE_FACTOR]) - .set_result_file(os.path.join(SCRIPT_DIR, f"result_{timestamp}.csv")) - .set_sub_circuit_task_resources(self.parameters[SUB_CIRCUIT_TASK_RESOURCES]) - .set_full_circuit_task_resources( - self.parameters[FULL_CIRCUIT_TASK_RESOURCES] - ) - .set_full_circuit_only(self.parameters[FULL_CIRCUIT_ONLY]) - .set_circuit_cutting_only(self.parameters[CIRCUIT_CUTTING_ONLY]) - .set_circuit_cutting_qiskit_options(self.parameters[CIRCUIT_CUTTING_SIMULATOR_BACKEND_OPTIONS]) - .set_full_circuit_qiskit_options(self.parameters[FULL_CIRCUIT_SIMULATOR_BACKEND_OPTIONS]) - .set_num_samples(self.parameters[NUM_SAMPLES]) - .set_scenario_label(self.parameters[SCENARIO_LABEL]) - .build(self.executor) - ) - - # pdb.set_trace() - cc.run() - - def close(self): - self.executor.close() - # hack terminate all agents - # kill_processes_by_keyword("pilot.plugins.ray_v2.agent") - # stop_ray() - - - - -def create_cluster_info(nodes, cores, gpus): - return { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_LOCAL, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": nodes, - "cores_per_node": cores, - "gpus_per_node": gpus, - }, - } - -def create_cluster_info_perlmutter(nodes, cores=128, gpus=4): - return { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": nodes, - "cores_per_node": cores, - "gpus_per_node": gpus, - "queue": "premium", - #"queue": "regular", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=gpu&hbm80g", - "#SBATCH --gpus-per-task=1", - f"#SBATCH --ntasks-per-node={gpus}", - "#SBATCH --gpu-bind=none"], - } - } - -def create_cc_parameters(circuit_size, subcircuit_size, num_samples, num_nodes, num_cores, num_gpus): - return { - SUBCIRCUIT_SIZE: subcircuit_size, - BASE_QUBITS: circuit_size, - SCALE_FACTOR: 1, - OBSERVABLES: ["Z" + "I" * (circuit_size - 1)], - NUM_SAMPLES: num_samples, - SUB_CIRCUIT_TASK_RESOURCES: { - "num_cpus": 1, - "num_gpus": 1, - "memory": None, - }, - FULL_CIRCUIT_TASK_RESOURCES: { - "num_cpus": 1, - "num_gpus": num_gpus, - "num_nodes": num_nodes, - "memory": None, - }, - FULL_CIRCUIT_ONLY: False, - CIRCUIT_CUTTING_ONLY: True, - CIRCUIT_CUTTING_SIMULATOR_BACKEND_OPTIONS: { - #"backend_options": {"shots": 4096, "device":"CPU", "method":"statevector"}, - "backend_options": {"device":"GPU", "method":"statevector", "shots": 4096, - "blocking_enable":True, "batched_shots_gpu":True, - "blocking_qubits":23}, - "mpi": False - }, - FULL_CIRCUIT_SIMULATOR_BACKEND_OPTIONS: { - #"backend_options": {"shots": 4096, "device":"CPU", "method":"statevector"}, - "backend_options": {"device":"GPU", "method":"statevector", "shots": 4096, - "blocking_enable":True, "batched_shots_gpu":True, - "blocking_qubits":23}, - "mpi": True - }, - SCENARIO_LABEL: f"circuit_size_{circuit_size}_subcircuit_{subcircuit_size}_samples_{num_samples}_cores_{num_cores}_nvidia_80GB" - } - -def run_mini_app_benchmark(): - for run_idx in range(BENCHMARK_CONFIG['num_runs']): - logger.info(f"Starting benchmark run {run_idx + 1}/{BENCHMARK_CONFIG['num_runs']}") - - for hw_config in BENCHMARK_CONFIG['hardware_configs']: - for nodes in hw_config['nodes']: - for gpus in hw_config['gpus_per_node']: - cluster_info = create_cluster_info_perlmutter( - nodes=nodes, - cores=hw_config['cores_per_node'], - gpus=gpus - ) - - for circuit_config in BENCHMARK_CONFIG['circuit_configs']: - for qubit_size in circuit_config['qubit_sizes']: - for subcircuit_size in circuit_config['subcircuit_sizes']: - try: - cc_parameters = create_cc_parameters( - circuit_size=qubit_size, - subcircuit_size=subcircuit_size, - num_samples=circuit_config['num_samples'], - num_nodes=nodes, - num_cores=hw_config['cores_per_node'], - num_gpus=gpus - ) - - logger.info(f"Running configuration: {cc_parameters[SCENARIO_LABEL]}") - qs = QuantumSimulation(cluster_info, cc_parameters) - qs.run() - qs.close() - - except Exception as e: - logger.error(f"Error in configuration {cc_parameters[SCENARIO_LABEL]}: {e}") - raise e - -if __name__ == "__main__": - RESOURCE_URL_HPC = "slurm://localhost" - RESOURCE_URL_LOCAL = "ssh://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - # Create a logger - logger = logging.getLogger(__name__) - logger.setLevel(logging.DEBUG) - - run_mini_app_benchmark() diff --git a/src/mini_apps/quantum_simulation/circuit_cutting/motif.py b/src/mini_apps/quantum_simulation/circuit_cutting/motif.py deleted file mode 100644 index 42d1341..0000000 --- a/src/mini_apps/quantum_simulation/circuit_cutting/motif.py +++ /dev/null @@ -1,968 +0,0 @@ -# Standard library imports -import collections -import copy -import datetime -import json -import logging -import time -from time import sleep -from tracemalloc import start -import subprocess -import os - -# Third party imports -import fire -import numpy as np -import ray # Add this import statement - -# Qiskit imports -from qiskit.circuit.library import EfficientSU2 -from qiskit.primitives import PrimitiveResult -from qiskit.quantum_info import SparsePauliOp -from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager -from qiskit.providers.fake_provider import GenericBackendV2 -from qiskit_aer import AerSimulator -from qiskit_addon_cutting import ( - cut_wires, - expand_observables, - generate_cutting_experiments, - partition_problem, - reconstruct_expectation_values, -) -from qiskit_addon_cutting.automated_cut_finding import ( - DeviceConstraints, - OptimizationParameters, - find_cuts, -) -from qiskit_ibm_runtime import Batch, SamplerV2 -from qiskit import qpy - -# Local imports -from engine.metrics.csv_writer import MetricsFileWriter -from engine.base.base_motif import Motif -from mini_apps.quantum_simulation.motifs.qiskit_benchmark import generate_data - - -# Configuration parameter keys -# Circuit parameters -SUBCIRCUIT_SIZE = "subcircuit_size" # Size of subcircuits after cutting -BASE_QUBITS = "base_qubits" # Number of base qubits in circuit -OBSERVABLES = "observables" # Observable operators to measure -SCALE_FACTOR = "scale_factor" # Scaling factor for circuit size -NUM_SAMPLES = "num_samples" # Number of measurement samples - -# Resource configuration -SUB_CIRCUIT_TASK_RESOURCES = "sub_circuit_task_resources" # Resources for subcircuit tasks -FULL_CIRCUIT_TASK_RESOURCES = "full_circuit_task_resources" # Resources for full circuit tasks - -# Backend configuration -CIRCUIT_CUTTING_SIMULATOR_BACKEND_OPTIONS = "circuit_cutting_simulator_backend_options" # Backend options for cut circuits -FULL_CIRCUIT_SIMULATOR_BACKEND_OPTIONS = "full_circuit_simulator_backend_options" # Backend options for full circuit - -# Execution mode flags -FULL_CIRCUIT_ONLY = "full_circuit_only" # Run only full circuit simulation -CIRCUIT_CUTTING_ONLY = "circuit_cutting_only" # Run only circuit cutting simulation -SCENARIO_LABEL = "scenario_label" # Label for the simulation scenario - -# Default backend configuration -DEFAULT_SIMULATOR_BACKEND_OPTIONS = { - "backend_options": { - "device": "CPU", # Use CPU device - "method": "statevector" # Use statevector simulation method - } -} - -################################################################################################## -# Called from distributed executor, e.g., Ray or MPI - -# Circuit Cutting Simulation -def execute_sampler(backend_options, label, subsystem_subexpts, shots): - # Add error handling - try: - from qiskit_aer import AerSimulator - submit_start = time.time() - backend = AerSimulator(**backend_options["backend_options"]) - - with Batch(backend=backend) as batch: - sampler = SamplerV2(mode=batch) - job = sampler.run(subsystem_subexpts, shots=shots) - submit_end = time.time() - result_start = time.time() - result = job.result() - result_end = time.time() - - # debug - for pub_result in result: - # Debugging statements to inspect pub_result - print("Attributes of pub_result:", dir(pub_result)) - print("pub_result:", pub_result) - # Break after first iteration for debugging - break - - # Reconstruct the PrimitiveResult object to fix serialization issues with current Qiskit versions (at the time 1.3) - # see https://github.com/Qiskit/qiskit/issues/12787 - from qiskit.primitives.containers import ( - PrimitiveResult, - SamplerPubResult, - DataBin, - BitArray, - ) - - # Override DataBin class to fix serialization issues - class CustomDataBin(DataBin): - def __setattr__(self, name, value): - super().__init__() - self.__dict__[name] = value - - # Reconstruct the PrimitiveResult object to fix serialization issues - new_results = [] - for pub_result in result: - # Deep copy the metadata - new_metadata = copy.deepcopy(pub_result.metadata) - - # Access the DataBin object - data_bin = pub_result.data - - # Reconstruct DataBin - new_data_bin_dict = {} - - # Explicitly copy 'observable_measurements' - if hasattr(data_bin, "observable_measurements"): - observable_measurements = data_bin.observable_measurements - new_observable_array = np.copy(observable_measurements.array) - new_observable_bitarray = BitArray( - new_observable_array, observable_measurements.num_bits - ) - new_data_bin_dict["observable_measurements"] = new_observable_bitarray - - # Explicitly copy 'qpd_measurements' - if hasattr(data_bin, "qpd_measurements"): - qpd_measurements = data_bin.qpd_measurements - new_qpd_array = np.copy(qpd_measurements.array) - new_qpd_bitarray = BitArray(new_qpd_array, qpd_measurements.num_bits) - new_data_bin_dict["qpd_measurements"] = new_qpd_bitarray - - # Copy other attributes of DataBin (e.g., 'shape') - if hasattr(data_bin, "shape"): - new_data_bin_dict["shape"] = copy.deepcopy(data_bin.shape) - - # Create a new DataBin instance - new_data_bin = CustomDataBin(**new_data_bin_dict) - # new_data_bin.__setattr__ = custom_setattr - - # Create a new SamplerPubResult - new_pub_result = SamplerPubResult(data=new_data_bin, metadata=new_metadata) - new_results.append(new_pub_result) - - # Create a new PrimitiveResult - new_result = PrimitiveResult( - new_results, metadata=copy.deepcopy(result.metadata) - ) - - print( - f"Job {label} completed with job id {job.job_id()}, submit_time: {submit_end-submit_start} and execution_time: {result_end - result_start}, type: {type(new_result)}" - ) - return (label, new_result) - except Exception as e: - logging.error(f"Error executing sampler: {str(e)}") - raise - - -# Full Circuit Simulation -def run_full_circuit(observable, backend_options, full_circuit): - try: - from qiskit_aer.primitives import EstimatorV2 - from qiskit_aer import AerSimulator - - # Create simulator - simulator = AerSimulator(**backend_options["backend_options"]) - - # Create estimator using the simulator - estimator = EstimatorV2.from_backend(simulator) - - # Run estimation - result = estimator.run([(full_circuit, observable)]) - exact_expval = result.result()[0].data.evs - - return exact_expval - - except Exception as e: - logging.error(f"Unexpected error in full circuit simulation: {str(e)}") - return str(e) - # raise - -def load_circuit(circuit_file): - """Load circuit from file (qpy)""" - with open(circuit_file, 'rb') as fd: - circuits = qpy.load(fd) - return circuits[0] - -def load_observable(observable_file): - """Load observable from npy file""" - # Load NumPy file - loaded_data = np.load(observable_file, allow_pickle=True) - deserialized_observable = SparsePauliOp.from_list(loaded_data.tolist()) - return deserialized_observable - -def cli_run_full_circuit( - observable_file: str, - backend_options_file: str, - circuit_file: str - ): - """ - Run full circuit simulation from command line - - Args: - observable_file: Path to npy file containing observable data - backend_options_file: Path to JSON file containing backend options - circuit_file: Path to qpy file containing quantum circuit - - Returns: - float: Expectation value - """ - # Load inputs from files - observable = load_observable(observable_file) - with open(backend_options_file, 'r') as f: - backend_options = json.load(f) - full_circuit = load_circuit(circuit_file) - - # Import and run the original function - from mini_apps.quantum_simulation.circuit_cutting.motif import run_full_circuit - result = run_full_circuit(observable, backend_options, full_circuit) - - # Convert numpy types to Python native types for JSON serialization - if isinstance(result, np.ndarray): - result = result.tolist() - - # print(f"{result}") - return result - - - -##################################################################################################### - -class CircuitCuttingBuilder: - """ - Builder class for configuring and constructing `CircuitCutting` objects with customizable settings. - - Attributes: - subcircuit_size (int): Defines the number of qubits in each subcircuit. - base_qubits (list): Specifies the base qubits involved in the circuit. - observables (list): Lists the observables to be measured during the simulation. - scale_factor (float): Determines the scaling factor applied to the circuit parameters. - full_circuit_qiskit_options (dict): Configuration options for the Qiskit backend. - circuit_cutting_qiskit_options (dict): Configuration options for the Qiskit backend. - full_circuit_only (bool): When set to True, executes only the full circuit without any cutting. - circuit_cutting_only (bool): When set to True, enables only circuit cutting without full circuit execution. - num_samples (int): Number of samples to be used in the simulation. - sub_circuit_task_resources (dict): Specifies computational resources allocated for sub-circuit tasks, such as CPU, GPU, and memory. - full_circuit_task_resources (dict): Specifies computational resources allocated for full-circuit tasks, including CPU, GPU, and memory. - result_file (str): Path to the file where simulation results will be stored. - - Methods: - set_subcircuit_size(subcircuit_size: int) -> CircuitCuttingBuilder: - Sets the size of the subcircuits. - - set_base_qubits(base_qubits: list) -> CircuitCuttingBuilder: - Defines the base qubits for the circuit. - - set_observables(observables: list) -> CircuitCuttingBuilder: - Specifies the observables to measure during the simulation. - - set_scale_factor(scale_factor: float) -> CircuitCuttingBuilder: - Sets the scaling factor for circuit parameters. - - set_result_file(result_file: str) -> CircuitCuttingBuilder: - Defines the file path for storing simulation results. - - set_qiskit_backend_options(qiskit_backend_options: dict) -> CircuitCuttingBuilder: - Configures options for the Qiskit backend. - - set_full_circuit_qiskit_options(full_circuit_qiskit_options: dict) -> CircuitCuttingBuilder: - Configures Qiskit backend options specifically for the full circuit simulation. - - set_circuit_cutting_qiskit_options(circuit_cutting_qiskit_options: dict) -> CircuitCuttingBuilder: - Configures Qiskit backend options specifically for circuit cutting simulations. - - set_num_samples(num_samples: int) -> CircuitCuttingBuilder: - Sets the number of samples to be used in the simulation. - - set_sub_circuit_task_resources(sub_circuit_task_resources: dict) -> CircuitCuttingBuilder: - Allocates computational resources for sub-circuit tasks. - - set_full_circuit_task_resources(full_circuit_task_resources: dict) -> CircuitCuttingBuilder: - Allocates computational resources for full-circuit tasks. - - set_full_circuit_only(full_circuit_only: bool) -> CircuitCuttingBuilder: - Enables or disables the execution of only the full circuit. - - set_circuit_cutting_only(circuit_cutting_only: bool) -> CircuitCuttingBuilder: - Enables or disables the use of only circuit cutting. - - build(executor) -> CircuitCutting: - Constructs and returns a `CircuitCutting` object based on the configured settings. - """ - def __init__(self): - self.subcircuit_size = None - self.base_qubits = None - self.observables = None - self.scale_factor = None - self.full_circuit_qiskit_options = None - self.circuit_cutting_qiskit_options = None - self.full_circuit_only = False - self.circuit_cutting_only = False - self.num_samples = 10 - self.sub_circuit_task_resources = {"num_cpus": 1, "num_gpus": 0, "memory": None} - self.full_circuit_task_resources = {"num_cpus": 1, "num_gpus": 0, "memory": None} - - def set_subcircuit_size(self, subcircuit_size): - self.subcircuit_size = subcircuit_size - return self - - def set_base_qubits(self, base_qubits): - self.base_qubits = base_qubits - return self - - def set_observables(self, observables): - self.observables = observables - return self - - def set_scale_factor(self, scale_factor): - self.scale_factor = scale_factor - return self - - def set_result_file(self, result_file): - self.result_file = result_file - return self - - def set_full_circuit_qiskit_options(self, full_circuit_qiskit_options): - self.full_circuit_qiskit_options = full_circuit_qiskit_options - return self - - def set_circuit_cutting_qiskit_options(self, circuit_cutting_qiskit_options): - self.circuit_cutting_qiskit_options = circuit_cutting_qiskit_options - return self - - def set_num_samples(self, num_samples): - self.num_samples = num_samples - return self - - def set_sub_circuit_task_resources(self, sub_circuit_task_resources): - self.sub_circuit_task_resources = sub_circuit_task_resources - return self - - def set_full_circuit_task_resources(self, full_circuit_task_resources): - self.full_circuit_task_resources = full_circuit_task_resources - return self - - def set_full_circuit_only(self, full_circuit_only): - self.full_circuit_only = full_circuit_only - return self - - def set_circuit_cutting_only(self, circuit_cutting_only): - self.circuit_cutting_only = circuit_cutting_only - return self - - def set_scenario_label(self, scenario_label): - self.scenario_label = scenario_label - return self - - def build(self, executor): - return CircuitCutting( - executor, - self.subcircuit_size, - self.base_qubits, - self.observables, - self.scale_factor, - self.full_circuit_qiskit_options, - self.circuit_cutting_qiskit_options, - self.sub_circuit_task_resources, - self.full_circuit_task_resources, - self.full_circuit_only, - self.circuit_cutting_only, - self.result_file, - self.num_samples, - self.scenario_label - ) - - -class CircuitCutting(Motif): - - def __init__( - self, - executor, - subcircuit_size, - base_qubits, - observables, - scale_factor, - full_circuit_qiskit_options, - circuit_cutting_qiskit_options, - sub_circuit_task_resources, - full_circuit_task_resources, - full_circuit_only, - circuit_cutting_only, - result_file, - num_samples, - scenario_label - ): - super().__init__(executor, base_qubits) - self.subcircuit_size = subcircuit_size - self.observables = observables - self.scale_factor = scale_factor - self.result_file = result_file - self.full_circuit_qiskit_options = full_circuit_qiskit_options - self.circuit_cutting_qiskit_options = circuit_cutting_qiskit_options - self.base_qubits = base_qubits - self.experiment_start_time = datetime.datetime.now() - self.num_samples = num_samples - self.sub_circuit_task_resources = sub_circuit_task_resources - self.full_circuit_task_resources = full_circuit_task_resources - self.full_circuit_only = full_circuit_only - self.circuit_cutting_only = circuit_cutting_only - - self.scenario_label = scenario_label - self.metadata = None - header = [ - "experiment_start_time", - "subcircuit_size", - "base_qubits", - "observables", - "scale_factor", - "num_samples", - "number_of_tasks", - "metadata", - "cluster_config", - "full_circuit_qiskit_options", - "circuit_cutting_qiskit_options", - "circuit_cutting_task_resources", - "full_circuit_task_resources", - "find_cuts_time", - "circuit_cutting_transpile_time_secs", - "circuit_cutting_exec_time_secs", - "circuit_cutting_reconstruct_time_secs", - "circuit_cutting_total_runtime_secs", - "full_circuit_transpile_time_secs", - "full_circuit_exec_time_secs", - "full_circuit_total_runtime_secs", - "circuit_cutting_expval", - "full_circuit_expval", - "error_in_estimation", - "scenario_label" - ] - self.metrics_file_writer = MetricsFileWriter(self.result_file, header) - # Create a logger - logger = logging.getLogger(__name__) - logger.setLevel(logging.INFO) - - # Check if the logger already has handlers to prevent duplicates - if not logger.hasHandlers(): - # Create a console handler and set the log level - console_handler = logging.StreamHandler() - console_handler.setLevel(logging.INFO) - - # Create a formatter and add it to the console handler - formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") - console_handler.setFormatter(formatter) - - # Add the console handler to the logger - logger.addHandler(console_handler) - - self.logger = logger - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - if hasattr(self, 'metrics_file_writer'): - self.metrics_file_writer.close() - - def pre_processing(self, circuit, observable, num_samples=10): - """ - Preprocess the circuit by finding cuts and generating subexperiments. - - Args: - circuit (QuantumCircuit): The quantum circuit to process - observable (SparsePauliOp): The observable to measure - num_samples (int): Number of samples to generate - - Returns: - tuple: Contains subexperiments, coefficients, subobservables, - original observable, and circuit - """ - # Specify settings for the cut-finding optimizer - optimization_settings = OptimizationParameters(seed=111) - - # Specify the size of the QPUs available - device_constraints = DeviceConstraints( - qubits_per_subcircuit=self.subcircuit_size - ) - - cut_circuit, metadata = find_cuts( - circuit, optimization_settings, device_constraints - ) - self.metadata = metadata - - self.logger.info( - f"Full circuit size: {len(circuit.qubits)} \n" - f'Found solution using {len(metadata["cuts"])} cuts with a sampling ' - f'Sampling overhead of {metadata["sampling_overhead"]}.\n' - f'Lowest cost solution found: {metadata["minimum_reached"]}.' - ) - for cut in metadata["cuts"]: - self.logger.info(f"{cut[0]} at circuit instruction index {cut[1]}") - - qc_w_ancilla = cut_wires(cut_circuit) - observables_expanded = expand_observables( - observable.paulis, circuit, qc_w_ancilla - ) - - partitioned_problem = partition_problem( - circuit=qc_w_ancilla, observables=observables_expanded - ) - subcircuits = partitioned_problem.subcircuits - subobservables = partitioned_problem.subobservables - self.logger.info( - f"Sampling overhead: {np.prod([basis.overhead for basis in partitioned_problem.bases])}" - ) - - subexperiments, coefficients = generate_cutting_experiments( - circuits=subcircuits, observables=subobservables, num_samples=num_samples - ) - self.logger.info( - f"{sum(len(expts) for expts in subexperiments.values())} total subexperiments to run on backend." - ) - - return subexperiments, coefficients, subobservables, observable, circuit - - - - def run_circuit_cutting(self, circuit, observable, circuit_cutting_qiskit_options): - """ - Executes the circuit cutting portion of the quantum simulation. - - Args: - circuit (QuantumCircuit): The quantum circuit to be cut and executed - observable (SparsePauliOp): The observable to measure - pass_manager: The transpiler pass manager - - Returns: - tuple: (final_expval, metrics) containing: - - final_expval: The final expectation value - - metrics: Dictionary containing timing and execution metrics - """ - - transpile_backend = AerSimulator(**circuit_cutting_qiskit_options["backend_options"]) - - #transpile_backend = GenericBackendV2(num_qubits=circuit.num_qubits) - pass_manager = generate_preset_pass_manager( - optimization_level=0, backend=transpile_backend - ) - # start time - start_find_cuts = time.time() - subexperiments, coefficients, subobservables, observable, circuit = ( - self.pre_processing(circuit, observable, self.num_samples) - ) - end_find_cuts = time.time() - - transpile_start_time = time.time() - self.logger.info( - "*********************************** transpiling circuits ***********************************" - ) - # Transpile the subexperiments to ISA circuits - isa_subexperiments = {} - for label, partition_subexpts in subexperiments.items(): - isa_subexperiments[label] = pass_manager.run(partition_subexpts, num_processes=1) - self.logger.info( - "*********************************** transpiling done ***************************************" - ) - transpile_end_time = time.time() - transpile_time_secs = transpile_end_time - transpile_start_time - self.logger.info(f"Transpile time: {transpile_time_secs}") - - tasks = [] - sub_circuit_execution_time = time.time() - resources = copy.copy(self.sub_circuit_task_resources) - - self.logger.info( - f"********************** len of subexperiments {len(isa_subexperiments)}********************" - ) - - tasks = [] - active_tasks = [] - results_tuple = [] - number_of_tasks = 0 - - # calculate the number of GPUs available - if self.sub_circuit_task_resources["num_gpus"] > 0: - num_slots = self.executor.cluster_config["config"]["gpus_per_node"]*self.executor.cluster_config["config"]["number_of_nodes"] - else: - num_slots = self.executor.cluster_config["config"]["number_of_nodes"]* self.executor.cluster_config["config"]["cores_per_node"] - - # Oversubscribe the number of slots - num_slots = num_slots * 2 - - self.logger.info(f"Number of slots available: {num_slots}") - - for label, subsystem_subexpts in isa_subexperiments.items(): - self.logger.info( - f"*************** len of subsystem_subexpts {len(subsystem_subexpts)}**********" - ) - # Create a queue of all experiments that need to be run - experiment_queue = [(label, ss) for ss in subsystem_subexpts] - - while experiment_queue or active_tasks: - # Submit new tasks if we have capacity and experiments waiting - while len(active_tasks) < num_slots and experiment_queue: - label, ss = experiment_queue.pop(0) - task_future = self.executor.submit_task( - execute_sampler, - self.circuit_cutting_qiskit_options, - label, - [ss], - resources=resources, - shots=2**12, - ) - active_tasks.append(task_future) - tasks.append(task_future) - number_of_tasks += 1 - - # Check for completed tasks using ray.wait() - if active_tasks: - ready_refs, remaining_refs = ray.wait(active_tasks, timeout=0.1) # 100ms timeout - - # Process completed tasks - for task_ref in ready_refs: - result = ray.get(task_ref) # Get the result - results_tuple.append(result) - active_tasks.remove(task_ref) - - # if use_ray: - # for ss in subsystem_subexpts: - - # # if self.sub_circuit_task_resources["num_gpus"] > 0: - # # while not self.check_gpu_availability(): - # # print("No GPU available, retrying...") - # # time.sleep(1) - - # task_future = self.executor.submit_task( - # execute_sampler, - # self.circuit_cutting_qiskit_options, - # label, - # [ss], - # resources=resources, - # shots=2**12, - # ) - - # tasks.append(task_future) - # number_of_tasks = number_of_tasks + 1 - # else: - # # sequential version - # for ss in subsystem_subexpts: - # result = execute_sampler(self.circuit_cutting_qiskit_options, label, [ss], shots=2**12) - # print(result) - # results_tuple.append(result) - # number_of_tasks = number_of_tasks + 1 - - # temporary fix for the parallel version - # if use_ray: - # results_tuple = self.executor.get_results(tasks) - - sub_circuit_execution_end_time = time.time() - subcircuit_exec_time_secs = ( - sub_circuit_execution_end_time - sub_circuit_execution_time - ) - self.logger.info(f"Execution time for subcircuits: {subcircuit_exec_time_secs}") - - # Get all samplePubResults - samplePubResults = collections.defaultdict(list) - for result in results_tuple: - self.logger.info(f"Result: {result[0], result[1]}") - samplePubResults[result[0]].extend(result[1]._pub_results) - - results = {} - for label, samples in samplePubResults.items(): - results[label] = PrimitiveResult(samples) - - reconstruction_start_time = time.time() - # Get expectation values for each observable term - reconstructed_expvals = reconstruct_expectation_values( - results, - coefficients, - subobservables, - ) - reconstruction_end_time = time.time() - reconstruct_subcircuit_expectations_time_secs = ( - reconstruction_end_time - reconstruction_start_time - ) - - total_runtime_secs = reconstruction_end_time - start_find_cuts - - self.logger.info( - f"Execution time for reconstruction: {reconstruct_subcircuit_expectations_time_secs}" - ) - - final_expval = np.dot(reconstructed_expvals, observable.coeffs) - self.logger.info(f"Reconstructed expectation value: {np.real(np.round(final_expval, 8))}") - - metrics = { - 'find_cuts_time': end_find_cuts - start_find_cuts, - 'transpile_time': transpile_time_secs, - 'subcircuit_exec_time': subcircuit_exec_time_secs, - 'find_cuts_time': end_find_cuts - start_find_cuts, - 'reconstruction_time': reconstruct_subcircuit_expectations_time_secs, - 'total_runtime': total_runtime_secs, - 'number_of_tasks': number_of_tasks - } - - return final_expval, metrics - - def run_full_circuit_simulation(self, circuit, observable, full_circuit_qiskit_options): - """ - Execute the full circuit simulation either via direct execution or MPI. - - Args: - circuit (QuantumCircuit): The quantum circuit to simulate - observable (SparsePauliOp): The observable to measure - pass_manager: The transpiler pass manager - full_circuit_qiskit_options (dict): Backend options for full circuit simulation - - Returns: - tuple: (exact_expval, metrics) containing: - - exact_expval (float): The expectation value from full circuit simulation - - metrics (dict): Dictionary containing timing metrics - """ - # from qiskit_aer import AerSimulator - - # transpiler_options = {"device":"CPU", "method":"statevector", "shots": 1024} - # transpile_backend = AerSimulator(**transpiler_options) - # pass_manager = generate_preset_pass_manager( - # optimization_level=1, backend=transpile_backend - # ) - - - transpile_backend = GenericBackendV2(num_qubits=circuit.num_qubits) - pass_manager = generate_preset_pass_manager(0, transpile_backend) - - transpile_start = time.time() - full_circuit_transpilation = pass_manager.run(circuit) - transpile_end = time.time() - transpile_time = transpile_end - transpile_start - - - # backend = AerSimulator(**full_circuit_qiskit_options["backend_options"]) - self.logger.info(f"Execution time for full circuit transpilation: {transpile_time}") - - # Start timing the full circuit estimation - estimator_start = time.time() - - # num_nodes attribute in task resource description in Ray - ray_task_resources = {k: v for k, v in self.full_circuit_task_resources.items() if k != "num_nodes"} - - if "mpi" not in full_circuit_qiskit_options or full_circuit_qiskit_options["mpi"] == False: - # Execute the circuit without - # exact_expval = run_full_circuit(observable, full_circuit_qiskit_options, full_circuit_transpilation) - - # Submit task for non-MPI execution directly as a Ray / Dask task - full_circuit_task = self.executor.submit_task( - run_full_circuit, - observable, - full_circuit_qiskit_options, - full_circuit_transpilation, - resources=ray_task_resources - ) - exact_expval = self.executor.get_results([full_circuit_task]) - else: - - # Serialize the circuit and observable to files - # Get working directory from executor or use current directory as fallback - working_dir = self.executor.cluster_config["config"]["working_directory"] - - # Create full paths using working directory - hash_id = hex(hash(str(time.time())))[-5:] - circuit_file = os.path.join(working_dir, f"full_circuit_{hash_id}.qpy") - observable_file = os.path.join(working_dir, f"observable_{hash_id}.npy") - backend_file = os.path.join(working_dir, f"backend_options_{hash_id}.json") - - # Write files to working directory - with open(circuit_file, "wb") as f: - qpy.dump(full_circuit_transpilation, f) - - np.save(observable_file, observable.to_list()) - - with open(backend_file, "w") as f: - json.dump(full_circuit_qiskit_options, f) - - num_nodes = self.full_circuit_task_resources.get("num_nodes", 1) # Default to 1 if not specified - - # Submit task for MPI parallel execution via command line - - cmd = ["srun", "-N", str(num_nodes), - f"--ntasks-per-node={self.full_circuit_task_resources['num_gpus']}", "--gpus-per-task=1" , "python", "-m", - "mini_apps.quantum_simulation.motifs.circuit_cutting_motif", - observable_file, backend_file, circuit_file] - - self.logger.info(f"Running command: {' '.join(cmd)}") - task = self.executor.submit_task( - subprocess.run, - cmd, - capture_output=True, - text=True, - resources=ray_task_resources - ) - result = self.executor.get_results([task])[0] - - if result.returncode != 0: - raise RuntimeError(f"Command failed with error: {result.stderr}") - - # Log the number of output lines - output_lines = result.stdout.strip().split('\n') - self.logger.info(f"Number of output lines: {len(output_lines)}") - - - # result = subprocess.run(cmd, capture_output=True, text=True) - exact_expval = float(output_lines[0]) - - # delete the files - os.remove(circuit_file) - os.remove(observable_file) - os.remove(backend_file) - - estimator_time = time.time() - estimator_start - - self.logger.info(f"Execution time for full circuit: {estimator_time}") - self.logger.info(f"Exact expectation value: {np.round(exact_expval, 8)}") - - return exact_expval, { - 'transpile_time': transpile_time, - 'estimator_time': estimator_time, - 'total_time': transpile_time + estimator_time - } - - def run(self): - - self.logger.info(f"Circuit Size: {self.base_qubits} Running Full Circuit Only: {self.full_circuit_only} Circuit Cutting Only: {self.circuit_cutting_only}" ) - - # Configure backend and transpiler - circuit_cutting_qiskit_options = DEFAULT_SIMULATOR_BACKEND_OPTIONS - full_circuit_qiskit_options = DEFAULT_SIMULATOR_BACKEND_OPTIONS - - if self.full_circuit_qiskit_options is not None: - full_circuit_qiskit_options = self.full_circuit_qiskit_options - - if self.circuit_cutting_qiskit_options is not None: - circuit_cutting_qiskit_options = self.circuit_cutting_qiskit_options - - self.logger.info(f"Circuit Cutting Backend options: {circuit_cutting_qiskit_options}") - self.logger.info(f"Full Circuit Backend options: {full_circuit_qiskit_options}") - - circuit, observable = self._generate_circuit_and_observable() - - if self.full_circuit_only == False: # Run circuit cutting experiments - final_expval, metrics = self.run_circuit_cutting(circuit, observable, circuit_cutting_qiskit_options) - - # Store metrics for later use - circuit_cutting_transpile_time_secs = metrics['transpile_time'] - circuit_cutting_exec_time_secs = metrics['subcircuit_exec_time'] - circuit_cutting_find_cuts_time_secs = metrics['find_cuts_time'] - circuit_cutting_reconstruct_subcircuit_expectations_time_secs = metrics['reconstruction_time'] - circuit_cutting_total_runtime_secs = metrics['total_runtime'] - number_of_tasks = metrics['number_of_tasks'] - - if self.circuit_cutting_only == False: # Run full circuit simulation - exact_expval, full_metrics = self.run_full_circuit_simulation(circuit, observable, full_circuit_qiskit_options) - - # Store full circuit metrics analogously - full_circuit_transpile_time_secs = full_metrics['transpile_time'] - full_circuit_exec_time_sec = full_metrics['estimator_time'] - full_circuit_total_runtime_secs = full_metrics['total_time'] - - - # Calculate error in estimation between circuit cutting and full circuit simulation - if self.full_circuit_only == False and self.circuit_cutting_only == False: - error_in_estimation = np.real(np.round(final_expval - exact_expval, 8)) - self.logger.info(f"Error in estimation: {error_in_estimation}") - self.logger.info( - f"Relative error in estimation: {np.real(np.round((final_expval-exact_expval) / exact_expval, 8))}" - ) - - # Write metrics to file - self.metrics_file_writer.write( - [ - getattr(self, "experiment_start_time", None), - getattr(self, "subcircuit_size", None), - getattr(self, "base_qubits", None), - getattr(self, "observables", None), - getattr(self, "scale_factor", None), - getattr(self, "num_samples", None), - number_of_tasks if 'number_of_tasks' in locals() else None, - str(self.metadata) if hasattr(self, "metadata") else None, - str(self.executor.cluster_config) if hasattr(self.executor, "cluster_config") else None, - str(self.full_circuit_qiskit_options) if hasattr(self, "full_circuit_qiskit_options") else None, - str(self.circuit_cutting_qiskit_options) if hasattr(self, "circuit_cutting_qiskit_options") else None, - str(self.sub_circuit_task_resources) if hasattr(self, "sub_circuit_task_resources") else None, - str(self.full_circuit_task_resources) if hasattr(self, "full_circuit_task_resources") else None, - circuit_cutting_find_cuts_time_secs if 'circuit_cutting_find_cuts_time_secs' in locals() else None, - circuit_cutting_transpile_time_secs if 'circuit_cutting_transpile_time_secs' in locals() else None, - circuit_cutting_exec_time_secs if 'circuit_cutting_exec_time_secs' in locals() else None, - circuit_cutting_reconstruct_subcircuit_expectations_time_secs if 'circuit_cutting_reconstruct_subcircuit_expectations_time_secs' in - locals() else None, - circuit_cutting_total_runtime_secs if 'circuit_cutting_total_runtime_secs' in locals() else None, - full_circuit_transpile_time_secs if 'full_circuit_transpile_time_secs' in locals() else None, - full_circuit_exec_time_sec if 'full_circuit_exec_time_sec' in locals() else None, - full_circuit_total_runtime_secs if 'full_circuit_total_runtime_secs' in locals() else None, - final_expval if 'final_expval' in locals() else None, - exact_expval if 'exact_expval' in locals() else None, - float(error_in_estimation) if 'error_in_estimation' in locals() else None, - self.scenario_label - ] - ) - - self.metrics_file_writer.close() - - - def _generate_circuit_and_observable(self): - """ - Generates a quantum circuit and an observable. - - This method creates a random quantum circuit using the EfficientSU2 ansatz with a specified - number of qubits and entanglement pattern. The circuit parameters are assigned a fixed value. - It also constructs an observable by scaling the provided observables. - - Returns: - Tuple[QuantumCircuit, SparsePauliOp]: A tuple containing the generated quantum circuit and the observable. - """ - # Generate standard circuit comprising of 1 single qubit rotation and 1 entangling gates between all qubits for each layer - circuit = EfficientSU2(self.base_qubits * self.scale_factor, entanglement="linear", reps=2).decompose() - circuit.assign_parameters([0.4] * len(circuit.parameters), inplace=True) - - observable = SparsePauliOp([o * self.scale_factor for o in self.observables]) - - return circuit, observable - - - def write_metrics(self, metrics_data): - """ - Safely write metrics data with validation. - - Args: - metrics_data (list): List of metric values to write - """ - # Validate all required metrics are present - if len(metrics_data) != len(self.metrics_file_writer.header): - raise ValueError("Metrics data length does not match header length") - - # Convert None values to appropriate format - formatted_data = ['' if x is None else x for x in metrics_data] - - self.metrics_file_writer.write(formatted_data) - - - - - -if __name__ == '__main__': - """ - Run the full circuit simulation from the command line - Used for testing the full circuit simulation with distributed state vector simulation based on MPI - """ - fire.Fire(cli_run_full_circuit) \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_execution/README.md b/src/mini_apps/quantum_simulation/circuit_execution/README.md deleted file mode 100644 index 1c7eb59..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# Circuit Execution Mini-App - -## Overview -The Circuit Execution Mini-App is a benchmarking tool designed to evaluate the performance of quantum circuit execution across different quantum computing backends. It supports both simulator-based execution and real quantum hardware through various providers including IonQ and IBM Quantum. - -## Key Features -- Support for multiple quantum backends: - - Qiskit Aer Simulator - - IonQ Simulator and QPU - - IBM Quantum Runtime -- Configurable circuit parameters: - - Number of qubits - - Circuit depth - - Observable size - - Number of circuit entries -- Distributed execution capabilities using Ray/Dask -- Comprehensive performance metrics collection -- Support for both CPU and GPU-accelerated simulation - -## Background - -The Circuit Execution Mini-App emphasizes leveraging loosely and medium-coupled task parallelism to optimize quantum circuit execution by utilizing multiple processing elements (PEs), both classical and quantum. For instance, circuit execution is essential in tasks like sampling and estimating expectation values. Another use case involves parameterized circuits, where the same circuit is executed with varying parameters. Distributing such tasks across different PEs can significantly improve estimation accuracy. Similarly, parallelism can be employed by partitioning different terms of a Hamiltonian across multiple PEs. - -Various abstraction layers and tools support this parallelism. For example, Qiskit Aer offers multiprocessing and Dask executors at the backend device level, while Qiskit Serverless provides middleware-level support. - -The circuit execution mini-app utilizes the Qiskit library to generate random quantum circuits. These circuits are executed on different Aer simulator backends, including configurations with and without GPU support. To manage tasks across multiple nodes, the mini-app leverages a distributed Dask cluster environment orchestrated by the mini-app framework. - - -## Usage - -### Basic Configuration -```python -ce_parameters = { - "qubits": 10, - "num_entries": 1024, - "circuit_depth": 1, - "size_of_observable": 1, - "qiskit_backend_options": { - "method": "statevector", - "device": "CPU", - "cuStateVec_enable": False, - "shots": None - } -} -``` - -### Running the Mini-App -```python -from mini_apps.quantum_simulation.circuit_execution import QuantumSimulation - -# Configure cluster settings -cluster_info = { - "executor": "pilot", - "config": { - "resource": "slurm://localhost", - "working_directory": "/path/to/work", - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": 10, - "gpus_per_node": 0 - } -} - -# Initialize and run simulation -qs = QuantumSimulation(cluster_info) -futures = qs.submit_circuits(ce_parameters) -qs.wait(futures) -qs.close() -``` - -## Backend Options - -### Aer Simulator -```python -backend_options = { - "method": "statevector", - "device": "CPU", - "cuStateVec_enable": False -} -``` - -### IonQ -```python -backend_options = { - "api_key": "YOUR_IONQ_API_KEY", - "backend": "ionq_simulator" # or "ionq_qpu" -} -``` - -## Implementation Details - -The mini-app consists of two main components: - -1. **Circuit Execution Builder**: Configures the execution parameters and builds the circuit execution instance - - - -2. **Circuit Execution Motif**: Handles the actual execution of quantum circuits and metrics collection - - -## Performance Metrics -The mini-app collects and records the following metrics: -- Timestamp -- Number of qubits -- Number of circuit entries -- Circuit depth -- Observable size -- Total run time - -Results are saved in CSV format for further analysis. - -## Hardware Requirements -- For CPU simulation: Multi-core processor recommended -- For GPU acceleration: NVIDIA GPU with CUDA support -- For quantum hardware execution: Valid API credentials for the respective quantum provider - -## License -This project is part of the Quantum Mini-Apps framework and is licensed under the MIT License. diff --git a/src/mini_apps/quantum_simulation/circuit_execution/ce_local.py b/src/mini_apps/quantum_simulation/circuit_execution/ce_local.py deleted file mode 100644 index 316ed50..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/ce_local.py +++ /dev/null @@ -1,67 +0,0 @@ -import os - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_execution.motifs.circuit_execution_motif import CircuitExecutionBuilder, SIZE_OF_OBSERVABLE, CIRCUIT_DEPTH, \ - NUM_ENTRIES, QUBITS, QISKIT_BACKEND_OPTIONS - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - - -class QuantumSimulation: - def __init__(self, cluster_info): - self.executor = MiniAppExecutor(cluster_info).get_executor() - self.cluster_info = cluster_info - self.ce_builder = CircuitExecutionBuilder() - - - def submit_circuits(self, parameters, pilot=None): - self.ce = self.ce_builder.set_num_qubits(parameters[QUBITS]) \ - .set_n_entries(parameters[NUM_ENTRIES]) \ - .set_circuit_depth(parameters[CIRCUIT_DEPTH]) \ - .set_size_of_observable(parameters[SIZE_OF_OBSERVABLE]) \ - .set_cluster_info(cluster_info) \ - .set_result_file(os.path.join(SCRIPT_DIR, "results", "results_local_pilot.csv")) \ - .set_simulator(parameters["SIMULATOR"]) \ - .build(self.executor) - - return self.ce.submit_tasks() - - def wait(self, futures): - self.ce.wait(futures) - - def run(self, ce_parameters): - futures = qs.submit_circuits(ce_parameters) - return self.executor.get_results(futures) - - - def close(self): - self.executor.close() - - -if __name__ == "__main__": - RESOURCE_URL_HPC = "ssh://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - cluster_info = { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": 10 - } - } - - ce_parameters = { - QUBITS: 10, - NUM_ENTRIES: 10, - CIRCUIT_DEPTH: 1, - SIZE_OF_OBSERVABLE: 1, - "SIMULATOR": "aer_simulator", - } - - - qs = QuantumSimulation(cluster_info) - qs.run(ce_parameters) - qs.close() diff --git a/src/mini_apps/quantum_simulation/circuit_execution/ce_multi_pq.py b/src/mini_apps/quantum_simulation/circuit_execution/ce_multi_pq.py deleted file mode 100644 index a46ac7c..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/ce_multi_pq.py +++ /dev/null @@ -1,121 +0,0 @@ -import os - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_execution.motifs.circuit_execution_motif import CircuitExecutionBuilder, SIZE_OF_OBSERVABLE, CIRCUIT_DEPTH, \ - NUM_ENTRIES, QUBITS, QISKIT_BACKEND_OPTIONS - - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - -class QuantumSimulation: - def __init__(self, cluster_info): - self.executor = MiniAppExecutor(cluster_info).get_executor() - self.cluster_info = cluster_info - self.ce_builder = CircuitExecutionBuilder() - - - def submit_circuits(self, parameters, pilot=None): - self.ce = self.ce_builder.set_num_qubits(parameters[QUBITS]) \ - .set_n_entries(parameters[NUM_ENTRIES]) \ - .set_circuit_depth(parameters[CIRCUIT_DEPTH]) \ - .set_size_of_observable(parameters[SIZE_OF_OBSERVABLE]) \ - .set_qiskit_backend_options(parameters[QISKIT_BACKEND_OPTIONS]) \ - .set_cluster_info(cluster_info) \ - .set_result_file(os.path.join(SCRIPT_DIR, "results", "results_multi_pilot.csv")) \ - .set_pilot(pilot) \ - .set_simulator(parameters["SIMULATOR"]) \ - .build(self.executor) - - return self.ce.submit_tasks() - - def wait(self, futures): - self.ce.wait(futures) - - - def close(self): - self.executor.close() - - -if __name__ == "__main__": - - RESOURCE_URL_HPC = "ssh://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - # Loop to iterate over different numbers of qubits - # Create a list of qubit values: powers of two up to 16, then increments of 4 from 20 to 28 - qubit_values = [2**i for i in range(1, 5)] + list(range(20, 30, 2)) - - for nodes in [1]: - for cores_per_node in [10]: - try: - cluster_info = { - "executor": "multi-pilot", - "type": "dask", - "working_directory": WORKING_DIRECTORY, - "config": { - "cpu-pilot": { - "resource": RESOURCE_URL_HPC, - "number_of_nodes": 1, - "cores_per_node": cores_per_node, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - }, - "gpu-pilot": { - "resource": RESOURCE_URL_HPC, - "number_of_nodes": 1, - "cores_per_node": cores_per_node, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - }, - "ionq-pilot": { - "resource": RESOURCE_URL_HPC, - "number_of_nodes": 1, - "cores_per_node": cores_per_node, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - } - }, - } - - qs = QuantumSimulation(cluster_info) - - for qubits in [10]: - ce_parameters = { - QUBITS: qubits, # Adjust the number of qubits dynamically - NUM_ENTRIES: 10, - CIRCUIT_DEPTH: 1, - SIZE_OF_OBSERVABLE: 1, - "SIMULATOR": "aer_simulator", - QISKIT_BACKEND_OPTIONS: { - "method": "statevector", - "device": 'CPU', - "cuStateVec_enable": False, - "shots": None, - } - } - - aer_backend_futures = qs.submit_circuits(ce_parameters, pilot="cpu-pilot") - - # update backend to ionq - ce_parameters["SIMULATOR"] = "ionq_simulator" - ionq_backend_futures = qs.submit_circuits(ce_parameters, pilot="ionq-pilot") - - # update backend to cpu-pilot - ce_parameters["SIMULATOR"] = "aer_simulator" - ce_parameters[QISKIT_BACKEND_OPTIONS]["device"] = "CPU" - gpu_backend_futures = qs.submit_circuits(ce_parameters, pilot="gpu-pilot") - - qs.wait(aer_backend_futures + ionq_backend_futures + gpu_backend_futures) - qs.close() - except Exception as e: - print(e) - continue \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_execution/ce_perlmutter.py b/src/mini_apps/quantum_simulation/circuit_execution/ce_perlmutter.py deleted file mode 100644 index d37c72c..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/ce_perlmutter.py +++ /dev/null @@ -1,52 +0,0 @@ -import os - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_execution.motifs.circuit_execution_motif import CircuitExecutionBuilder, SIZE_OF_OBSERVABLE, CIRCUIT_DEPTH, \ - NUM_ENTRIES, QUBITS, QISKIT_BACKEND_OPTIONS - - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - -class QuantumSimulation: - def __init__(self, cluster_config): - self.executor = MiniAppExecutor(cluster_config).get_executor() - - def submit_circuits(self, parameters, pilot=None): - ce_builder = CircuitExecutionBuilder() - ce = ce_builder.set_num_qubits(parameters[QUBITS]) \ - .set_n_entries(parameters[NUM_ENTRIES]) \ - .set_circuit_depth(parameters[CIRCUIT_DEPTH]) \ - .set_size_of_observable(parameters[SIZE_OF_OBSERVABLE]) \ - .set_qiskit_backend_options(parameters[QISKIT_BACKEND_OPTIONS]) \ - .set_result_file(os.path.join(SCRIPT_DIR, "result.csv")) \ - .build(self.executor) - - return self.ce.submit_tasks() - - def wait(self, futures): - self.ce.wait(futures) - - - def close(self): - self.executor.close() - -if __name__ == "__main__": - scheduler_file = os.path.join(os.environ["SCRATCH"], "scheduler_file.json") - cluster_info = { - "executor": "dask", - "config": { - "scheduler_file": scheduler_file - } - } - - ce_parameters = { - QUBITS: 25, - NUM_ENTRIES: 1024, - CIRCUIT_DEPTH: 1, - SIZE_OF_OBSERVABLE: 1, - QISKIT_BACKEND_OPTIONS: {"method": "statevector", "device": 'GPU', "cuStateVec_enable": True, "shots": None} - } - - qs = QuantumSimulation(cluster_info, ce_parameters) - futures = qs.submit_circuits(ce_parameters) - qs.wait(futures) diff --git a/src/mini_apps/quantum_simulation/circuit_execution/ce_pilotquantum.py b/src/mini_apps/quantum_simulation/circuit_execution/ce_pilotquantum.py deleted file mode 100644 index 5296978..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/ce_pilotquantum.py +++ /dev/null @@ -1,97 +0,0 @@ -import os - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_execution.motifs.circuit_execution_motif import CircuitExecutionBuilder, SIZE_OF_OBSERVABLE, CIRCUIT_DEPTH, \ - NUM_ENTRIES, QUBITS, QISKIT_BACKEND_OPTIONS - - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - -class QuantumSimulation: - def __init__(self, cluster_info, parameters=None): - self.executor = MiniAppExecutor(cluster_info).get_executor() - self.ce_builder = CircuitExecutionBuilder() - self.cluster_info = cluster_info - - - def submit_circuits(self, parameters, pilot=None): - self.ce = self.ce_builder.set_num_qubits(self.parameters[QUBITS]) \ - .set_n_entries(self.parameters[NUM_ENTRIES]) \ - .set_circuit_depth(self.parameters[CIRCUIT_DEPTH]) \ - .set_size_of_observable(self.parameters[SIZE_OF_OBSERVABLE]) \ - .set_qiskit_backend_options(self.parameters[QISKIT_BACKEND_OPTIONS]) \ - .set_cluster_info(self.cluster_info) \ - .set_result_dir(os.path.join(SCRIPT_DIR, "results")) \ - .build(self.executor) - - return self.ce.submit_tasks() - - def wait(self, futures): - self.ce.wait(futures) - - def close(self): - self.executor.close() - - -if __name__ == "__main__": - - RESOURCE_URL_HPC = "slurm://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - # Loop to iterate over different numbers of qubits - # Create a list of qubit values: powers of two up to 16, then increments of 4 from 20 to 28 - qubit_values = [2**i for i in range(1, 5)] + list(range(20, 30, 2)) - - for nodes in [1]: - for cores_per_node in [2**i for i in range(0, 7)]: - try: - cluster_info = { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": cores_per_node, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "conda_environment": "/pscratch/sd/l/luckow/conda/quantum-mini-apps2", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - } - } - - qs = QuantumSimulation(cluster_info) - - for qubits in qubit_values: - ce_parameters = { - QUBITS: qubits, # Adjust the number of qubits dynamically - NUM_ENTRIES: 1024, - CIRCUIT_DEPTH: 1, - SIZE_OF_OBSERVABLE: 1, - QISKIT_BACKEND_OPTIONS: { - "method": "statevector", - "device": 'CPU', - "cuStateVec_enable": False, - "shots": None, - # "max_parallel_threads": cores_per_node, - # "max_parallel_experiments": cores_per_node, - # "statevector_parallel_threshold": qubits-1 - } - } - futures = qs.submit_circuits(ce_parameters) - qs.wait(futures) - qs.close() - except Exception as e: - print(e) - continue - - -# ce_parameters = { -# QUBITS: 25, -# NUM_ENTRIES: 1024, -# CIRCUIT_DEPTH: 1, -# SIZE_OF_OBSERVABLE: 1, -# QISKIT_BACKEND_OPTIONS: {"method": "statevector", "device": 'CPU', "cuStateVec_enable": False, "shots": None} -# } \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_execution/ce_pq_ionq.py b/src/mini_apps/quantum_simulation/circuit_execution/ce_pq_ionq.py deleted file mode 100644 index d6eee3a..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/ce_pq_ionq.py +++ /dev/null @@ -1,83 +0,0 @@ -import os - -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.circuit_execution.motifs.circuit_execution_motif import CircuitExecutionBuilder, SIZE_OF_OBSERVABLE, CIRCUIT_DEPTH, \ - NUM_ENTRIES, QUBITS, QISKIT_BACKEND_OPTIONS - - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - -class QuantumSimulation: - def __init__(self, cluster_info, parameters=None): - self.executor = MiniAppExecutor(cluster_info).get_executor() - self.ce_builder = CircuitExecutionBuilder() - self.cluster_info = cluster_info - - - def submit_circuits(self, parameters, pilot=None): - self.ce = self.ce_builder.set_num_qubits(parameters[QUBITS]) \ - .set_n_entries(parameters[NUM_ENTRIES]) \ - .set_circuit_depth(parameters[CIRCUIT_DEPTH]) \ - .set_size_of_observable(parameters[SIZE_OF_OBSERVABLE]) \ - .set_cluster_info(cluster_info) \ - .set_result_file(os.path.join(SCRIPT_DIR, "results", "results_local_pilot.csv")) \ - .set_simulator(parameters["SIMULATOR"]) \ - .build(self.executor) - - return self.ce.submit_tasks() - - def wait(self, futures): - self.ce.wait(futures) - - - def close(self): - self.executor.close() - - -if __name__ == "__main__": - - RESOURCE_URL_HPC = "ssh://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - # Loop to iterate over different numbers of qubits - # Create a list of qubit values: powers of two up to 16, then increments of 4 from 20 to 28 - qubit_values = [2**i for i in range(1, 5)] + list(range(20, 30, 2)) - - for nodes in [1]: - for cores_per_node in [10]: - try: - cluster_info = { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": 1, - "cores_per_node": cores_per_node, - "gpus_per_node": 0, - "queue": "debug", - "walltime": 30, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=cpu"] - } - } - - qs = QuantumSimulation(cluster_info) - - for qubits in [10]: - ce_parameters = { - QUBITS: qubits, # Adjust the number of qubits dynamically - NUM_ENTRIES: 1, - CIRCUIT_DEPTH: 1, - SIZE_OF_OBSERVABLE: 1, - QISKIT_BACKEND_OPTIONS: { - "method": "statevector", - "backend": "ionq_simulator" - } - } - futures = qs.submit_circuits(ce_parameters) - qs.wait(futures) - qs.close() - except Exception as e: - print(e) - continue \ No newline at end of file diff --git a/src/mini_apps/quantum_simulation/circuit_execution/motifs/circuit_execution_motif.py b/src/mini_apps/quantum_simulation/circuit_execution/motifs/circuit_execution_motif.py deleted file mode 100644 index 89bbc2c..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/motifs/circuit_execution_motif.py +++ /dev/null @@ -1,173 +0,0 @@ -import os -import time - - -from qiskit import transpile -from qiskit_aer.primitives import Estimator as AirEstimator -from qiskit_ibm_runtime import EstimatorV2 -from qiskit_ibm_runtime import QiskitRuntimeService -from qiskit.quantum_info import Pauli -from qiskit_ionq import IonQProvider - - - -from engine.metrics.csv_writer import MetricsFileWriter -from engine.base.base_motif import Motif -from mini_apps.quantum_simulation.circuit_execution.motifs.qiskit_benchmark import generate_data -import datetime -# from qiskit_rigetti import RigettiQCSProvider -from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager - -def run_circuit(circ_obs, qiskit_backend_options, simulator): - transpiled_circuit = circ_obs[0] - observable = circ_obs[1] - estimator_result = None - if simulator in ["ionq_simulator", "ionq_qpu"]: - key = qiskit_backend_options.get("api_key", None) - if key is not None: - key = os.environ["IONQ_API_KEY"] - if key is None: - ionq_provider = IonQProvider() - else: - ionq_provider = IonQProvider(token=key) - backend = ionq_provider.get_backend(simulator) - transpiled_circuit = transpile(circ_obs[0], backend=backend, optimization_level=3) - estimator_result = backend.run(transpiled_circuit).result() - elif simulator in ["aer_simulator"]: - estimator = AirEstimator(backend_options=qiskit_backend_options) - estimator_result = estimator.run(transpiled_circuit, Pauli(observable)).result() - else: - service = QiskitRuntimeService() - backend = service.backend(simulator) - estimator_result = EstimatorV2(mode=backend).run([(transpiled_circuit, observable)]).result() - print(estimator_result) - return estimator_result - - -class CircuitExecutionBuilder: - def __init__(self): - self.depth_of_recursion = 1 - self.num_qubits = 10 - self.n_entries = 10 - self.circuit_depth = 1 - self.size_of_observable = 1 - self.qiskit_backend_options = {"method": "statevector"} - self.result_dir = os.environ['HOME'] - # create a date-time based file name - self.current_datetime = time.time() - curent_datetime = datetime.datetime.now() - self.file_name = f"ce_result_{curent_datetime.strftime('%Y-%m-%dT%H:%M:%S')}.csv" - self.result_file = os.path.join(self.result_dir, self.file_name) - self.cluster_info = None - self.pilot = None - self.simulator = "aer_simulator" - self.resources_per_task = {} - - def set_depth_of_recursion(self, depth_of_recursion): - self.depth_of_recursion = depth_of_recursion - return self - - def set_num_qubits(self, num_qubits): - self.num_qubits = num_qubits - return self - - def set_n_entries(self, n_entries): - self.n_entries = n_entries - return self - - def set_circuit_depth(self, circuit_depth): - self.circuit_depth = circuit_depth - return self - - def set_size_of_observable(self, size_of_observable): - self.size_of_observable = size_of_observable - return self - - def set_qiskit_backend_options(self, qiskit_backend_options): - self.qiskit_backend_options = qiskit_backend_options - return self - - def set_result_file(self, result_file): - os.makedirs(os.path.dirname(result_file), exist_ok=True) - self.result_file = result_file - return self - - def set_cluster_info(self, cluster_info): - self.cluster_info = cluster_info - return self - - def set_pilot(self, pilot): - self.pilot = pilot - return self - - def set_simulator(self, simulator): - self.simulator = simulator - return self - - def set_resources_per_task(self, resources_per_task): - self.resources_per_task = resources_per_task - return self - - def build(self, executor): - return CircuitExecution(executor, self.depth_of_recursion, self.num_qubits, self.n_entries, self.circuit_depth, - self.size_of_observable, self.qiskit_backend_options, self.result_file, self.current_datetime, self.cluster_info, self.pilot, self.simulator, self.resources_per_task) - - -class CircuitExecution(Motif): - def __init__(self, executor, depth_of_recursion, num_qubits, n_entries, circuit_depth, size_of_observable, - qiskit_backend_options, result_file, timestamp, cluster_info, pilot, simulator, resources_per_task): - super().__init__(executor, num_qubits) - self.depth_of_recursion = depth_of_recursion - self.n_entries = n_entries - self.circuit_depth = circuit_depth - self.size_of_observable = size_of_observable - self.qiskit_backend_options = qiskit_backend_options - self.result_file = result_file - self.timestamp = timestamp - self.cluster_info = cluster_info - self.pilot = pilot - self.simulator = simulator - self.resources_per_task = resources_per_task - - header = ["timestamp", "num_qubits", "n_entries", "circuit_depth", "size_of_observable", "depth_of_recursion", - "tasks_wait_time", "total_run_time"] - self.metrics_file_writer = MetricsFileWriter(self.result_file, header) - - - def submit_tasks(self): - circuits, observables = generate_data( - depth_of_recursion=1, - num_qubits=self.num_qubits, - n_entries=self.n_entries, - circuit_depth=self.circuit_depth, - size_of_observable=self.size_of_observable - ) - - circuits_observables = zip(circuits, observables) - - # Submit all the tasks - futures = self.executor.submit_tasks(run_circuit, circuits_observables, self.qiskit_backend_options, self.simulator, pilot=self.pilot, resources=self.resources_per_task) - - return futures - - def wait(self, futures): - # wait for the tasks to complete - start_time = time.time() - self.executor.wait(futures) - end_time = time.time() - tasks_wait_time = end_time-start_time - total_run_time = end_time-self.timestamp - self.metrics_file_writer.write([self.timestamp, self.num_qubits, self.n_entries, self.circuit_depth, - self.size_of_observable, self.depth_of_recursion, - tasks_wait_time, total_run_time]) - - self.metrics_file_writer.close() - - - - -SIZE_OF_OBSERVABLE = "size_of_observable" -CIRCUIT_DEPTH = "circuit_depth" -NUM_ENTRIES = "num_entries" -QUBITS = "qubits" -QISKIT_BACKEND_OPTIONS = "qiskit_backend_options" diff --git a/src/mini_apps/quantum_simulation/circuit_execution/motifs/qiskit_benchmark.py b/src/mini_apps/quantum_simulation/circuit_execution/motifs/qiskit_benchmark.py deleted file mode 100644 index 8f87c8c..0000000 --- a/src/mini_apps/quantum_simulation/circuit_execution/motifs/qiskit_benchmark.py +++ /dev/null @@ -1,119 +0,0 @@ -# This code is a Qiskit project. -# -# (C) Copyright IBM 2023. -# -# This code is licensed under the Apache License, Version 2.0. You may -# obtain a copy of this license in the LICENSE.txt file in the root directory -# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. -# -# Any modifications or derivative works of this code must retain this -# copyright notice, and modified files need to carry a notice indicating -# that they have been altered from the originals. - - -"""This is benchmark program for stress testing compute resources.""" -import argparse -import time -from typing import List - -from qiskit import QuantumCircuit, transpile -from qiskit.circuit.random.utils import random_circuit -# from qiskit.primitives import Estimator -# from qiskit.providers import Backend -# from qiskit.providers.fake_provider import ConfigurableFakeBackend -from qiskit.quantum_info.random import random_pauli_list - - -# from quantum_serverless import QuantumServerless, get, distribute_task, put - - -# @distribute_task() -def generate_circuits( - depth_of_recursion: int, num_qubits: int, depth_of_circuit: int, n_circuits: int -): - """Generates random circuits.""" - circuits = [random_circuit(num_qubits, depth_of_circuit) for _ in range(n_circuits)] - if depth_of_recursion <= 1: - return circuits - else: - return circuits + generate_circuits( - depth_of_recursion - 1, num_qubits, depth_of_circuit, n_circuits - ) - - -# @distribute_task() -def generate_observables( - depth_of_recursion: int, num_qubits: int, size: int, n_observables: int -): - """Generated random observables.""" - observables = [random_pauli_list(num_qubits, size) for _ in range(n_observables)] - if depth_of_recursion <= 1: - return observables - else: - return observables + generate_observables(depth_of_recursion - 1, num_qubits, size, n_observables) - - -# @distribute_task() -def generate_data( - depth_of_recursion: int, - num_qubits: int, - n_entries: int, - circuit_depth: int = 2, - size_of_observable: int = 2, -): - return generate_circuits( - depth_of_recursion=depth_of_recursion, - num_qubits=num_qubits, - n_circuits=n_entries, - depth_of_circuit=circuit_depth, - ), generate_observables( - depth_of_recursion=depth_of_recursion, - num_qubits=num_qubits, - size=size_of_observable, - n_observables=n_entries, - ) - - - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "--depth_of_recursion", - help="Depth of recursion in generating data.", - default=3, - type=int, - ) - parser.add_argument( - "--num_qubits", help="Number of qubits used in program.", default=2, type=int - ) - parser.add_argument("--n_entries", help="Number of circuits.", default=10, type=int) - parser.add_argument( - "--circuit_depth", help="Depth of circuits.", default=3, type=int - ) - parser.add_argument( - "--size_of_observable", - help="Size of observables in program.", - default=3, - type=int, - ) - parser.add_argument("--n_backends", help="Number of backends", default=3, type=int) - parser.add_argument( - "--n_graphs", help="Number of graphs to run", default=1, type=int - ) - - args = parser.parse_args() - - t0: float = time.time() - results = run_graph( - depth_of_recursion=args.depth_of_recursion, - num_qubits=args.num_qubits, - n_entries=args.n_entries, - circuit_depth=args.circuit_depth, - size_of_observable=args.size_of_observable, - n_backends=args.n_backends, - ) - runtime = time.time() - t0 - - print(f"Execution time: {runtime}") - print(f"Results: {results}") diff --git a/src/mini_apps/quantum_simulation/distributed_state_vector/README.md b/src/mini_apps/quantum_simulation/distributed_state_vector/README.md deleted file mode 100644 index d2ae6ae..0000000 --- a/src/mini_apps/quantum_simulation/distributed_state_vector/README.md +++ /dev/null @@ -1,259 +0,0 @@ -# Distributed State Vector Mini App Documentation - -## Overview -The Distributed State Vector Mini App is a quantum circuit simulation tool that leverages distributed computing resources to perform quantum state vector calculations using PennyLane's lightning.gpu backend with NVIDIA cuQuantum. It supports both single-node and multi-node GPU execution through MPI. - -## Key Features -- Distributed quantum state vector simulation -- Support for both CPU (lightning.qubit) and GPU (lightning.gpu) backends -- MPI-enabled parallel execution -- Configurable circuit parameters (qubits, layers, runs) -- Optional Jacobian calculation -- Performance metrics collection -- QJIT (Quantum Just-In-Time) compilation support - -## Background - -The distributed state vector mini-app utilizes multiple processing elements, i. e., cores, nodes, and GPU, to benchmark the computational and memory needs of quantum simulations by partitioning and distributing the state vector, i. e., the state of a quantum system. In this motif, coupling is tight and occurs between classical tasks. Updates to the state vector are done by multiplying a unitary matrix. This computation is conducted concurrently. Depending on the type of operation, only local or non-local qubits, i. e., qubits placed on different processing elements, can be affected. Operations on local qubits can be performed without data exchange, while non-local or global qubits may require significant data movement. Thus, MPI is commonly used to facilitate the communication between tasks. Examples of distributed state vectors include QULAC (CPU/GPU) and cuQuantum’s cuStateVec (GPU). Further, different programming frameworks utilize cuQuantum to provide a distributed state vector simulation, e. g., Pennylane and Qiskit. - -Distributed State Vector Mini-App implementation involves PennyLane’s ```lightning.gpu``` to assess the performance of a strongly entangling layered (SEL) circuit featuring two layers, which is frequently utilized for classification tasks. For gradient calculation, the motif use adjoint differentiation, a method designed for efficient gradient computation in quantum simulations, with lower memory and computational requirements than other methods like finite difference, which requires multiple circuit evaluations. - -## Usage - -### Configuration Parameters -```python -parameters = { - "num_runs": 3, # Number of simulation runs - "n_wires": 30, # Number of qubits - "n_layers": 2, # Number of circuit layers - "enable_jacobian": False, # Enable Jacobian calculation - "diff_method": "adjoint", # Differentiation method (adjoint, parameter-shift, None) - "enable_qjit": False, # Enable QJIT compilation - "pennylane_device_config": { - "name": "lightning.gpu", # PennyLane device backend - "mpi": "True", # Enable MPI distribution - "batch_obs": "False" # Enable batch observations - } -} -``` - -### Running the App - -#### 1. Via Python API -```python -from mini_apps.quantum_simulation.distributed_state_vector.mini_app import QuantumSimulation - -# Configure cluster settings -cluster_config = { - "executor": "pilot", - "config": { - "number_of_nodes": 1, - "gpus_per_node": 4, - # ... other cluster configurations - } -} - -# Initialize and run simulation -qs = QuantumSimulation(cluster_config, parameters) -qs.run() -``` - -#### 2. Via Command Line -```bash -# Using MPI -mpirun -n python motif.py --n-wires 30 --n-layers 2 --device lightning.gpu --mpi True - -# Using SLURM -srun -N -n python motif.py --n-wires 30 --n-layers 2 --device lightning.gpu --mpi True -``` - -## Output and Metrics -The app generates performance metrics in CSV format, stored in the `results` directory. - -## Circuit Details -The quantum circuit implements a Strongly Entangling Layer pattern: -- Uses PennyLane's `StronglyEntanglingLayers` -- Measures PauliZ expectation values for each qubit -- Supports differentiation through various methods (adjoint, parameter-shift) - -## Hardware Requirements -- NVIDIA GPUs with cuQuantum support -- MPI-enabled environment for distributed execution -- Sufficient GPU memory for larger qubit counts - - -# Pennylane Lightning.GPU from Source on Perlmutter - -## Installation - -* Source: - * https://pennylane.ai/blog/2023/09/distributing-quantum-simulations-using-lightning-gpu-with-NVIDIA-cuQuantum - * https://github.com/PennyLaneAI/pennylane-lightning - * https://discuss.pennylane.ai/t/pennylane-multi-gpu-script-fails-with-error-even-there-are-enough-gpus/3978/28 - - -# ⚡ PennyLane Lightning GPU on Perlmutter (Cray MPICH + CUDA 12) - -This repository provides instructions for setting up and running the [`pennylane-lightning[gpu]`](https://github.com/PennyLaneAI/pennylane-lightning) backend on NERSC's **Perlmutter** system. These steps are validated for `v0.41.0-rc` and are compatible with **Cray MPICH**, **CUDA 12**, and **Lightning GPU**. - ---- - -## 📦 Requirements - -- Python 3.10+ (Python 3.11 recommended) -- Pennylane Lightning (v0.41.0) -- Access to NERSC's Perlmutter system -- Cray MPICH and CUDA 12 toolchain - ---- - -## 🔧 Setup Instructions - -### 1. Load Required Modules - -``` -module load python/3.11 -module load PrgEnv-gnu cray-mpich cudatoolkit craype-accel-nvidia80 - -cd $SCRATCH -python -m venv lgpu_env && source lgpu_env/bin/activate -``` - -### 2. Clone and Install Dependencies - -``` -git clone https://github.com/PennyLaneAI/pennylane-lightning.git -cd pennylane-lightning -git checkout latest_release ### Testing with (v0.41.0) -``` - -### 3. Install Lightning Qubit with CrayPE Compilers - -``` -python -m pip install -r requirements-dev.txt && CC=$(which cc) CXX=$(which CC) python -m pip install . --verbose -``` - -### 4. Switch to Lightning GPU with MPI Support - -``` -PL_BACKEND="lightning_gpu" python scripts/configure_pyproject_toml.py -CMAKE_ARGS="-DENABLE_MPI=ON" CC=$(which mpicc) CXX=$(which mpicxx) python -m pip install . --verbose -``` - -### 5. Install mpi4py with Cray MPICH - -``` -MPICC="cc -shared" pip install --force-reinstall --no-cache-dir --no-binary=mpi4py mpi4py -``` - -### 6. Set Library Paths for custatevec - -``` -export LD_LIBRARY_PATH=$CRAY_LD_LIBRARY_PATH:$LD_LIBRARY_PATH -``` - -### 7. 🚀 Running an MPI Job - -1. Allocate Interactive GPU Job (4 GPUs) - - ``` - salloc -N 1 -c 32 --qos interactive --time 0:30:00 \ - --constraint gpu --ntasks-per-node=4 \ - --gpus-per-task=1 --gpu-bind=none --account=XYZ - ``` - -2. Run Your Script with MPI - - ``` - srun -n 4 python myscript.py - ``` - - - - -## Pennylane - -* Qjit has jax as dependency... - -## Mini-App Usage - - - -* Test MPI Run of Motif - -``` -salloc --account xxx --nodes 2 --qos interactive --time 04:00:00 --constraint gpu --gpus 8 -``` - -``` -srun -N 2 -n 8 python motif.py --num-runs 1 --n-wires 31 --n-layers 2 --enable-jacobian False --diff-method adjoint --device lightning.gpu --mpi True - -``` - - -## Miscellaneous - -* Other maybe useful commands to try: - - * clean - ``` - make clean - ``` - - - * alternative compiler commands: - - * Adjust CMAkeList.txt to use Cray compiler - - ``` - set(CMAKE_C_COMPILER "/opt/cray/pe/craype/2.7.30/bin/cc") - set(CMAKE_CXX_COMPILER "/opt/cray/pe/craype/2.7.30/bin/CC") - ``` - * compile - - ``` - PL_BACKEND="lightning_gpu" python scripts/configure_pyproject_toml.py - CMAKE_ARGS="-DENABLE_MPI=ON" python -m pip install -e . --config-settings editable_mode=compat -vv - ``` - - * howto parse a compile - - ``` - cmake -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ - ``` diff --git a/src/mini_apps/quantum_simulation/distributed_state_vector/exploration.ipynb b/src/mini_apps/quantum_simulation/distributed_state_vector/exploration.ipynb deleted file mode 100644 index 96d89db..0000000 --- a/src/mini_apps/quantum_simulation/distributed_state_vector/exploration.ipynb +++ /dev/null @@ -1,158 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Standard library imports\n", - "import argparse\n", - "import json\n", - "import os\n", - "import subprocess\n", - "import sys\n", - "import time\n", - "from timeit import default_timer as timer\n", - "import logging\n", - "# Third party imports\n", - "import pennylane as qml\n", - "from pennylane import numpy as np\n", - "import jax.numpy as jnp\n", - "from pennylane import qjit \n", - "from qiskit import QuantumCircuit\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import jax\n", - "jax.devices()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "\n", - "for n_wires in [29, 30, 31]:\n", - " n_layers = 2\n", - " rank = 0\n", - " num_runs = 1\n", - " dev = qml.device(\"lightning.qubit\", wires=n_wires)\n", - "\n", - " # Create QNode of device and circuit\n", - " def circuit_adj(weights):\n", - " qml.StronglyEntanglingLayers(weights, wires=list(range(n_wires)))\n", - " return [qml.expval(qml.PauliZ(i)) for i in range(n_wires)]\n", - " #return qml.expval(qml.PauliZ(0))\n", - "\n", - " params = jnp.array(\n", - " np.random.random(qml.StronglyEntanglingLayers.shape(n_layers=n_layers, n_wires=n_wires)), \n", - " dtype=jnp.float64\n", - " )\n", - "\n", - " enable_jacobian = False\n", - " if enable_jacobian:\n", - " diff_method = \"adjoint\"\n", - " # print(f\"Initializing QNode with jacobian enabled: interface=autograd, diff_method={diff_method}\")\n", - " circuit_adj = qml.qnode(dev, interface=\"autograd\", diff_method=diff_method)(circuit_adj)\n", - " else:\n", - " # print(\"Initializing QNode without jacobian\")\n", - " circuit_adj = qml.qnode(dev)(circuit_adj) \n", - "\n", - " enable_qjit = True\n", - " if enable_qjit:\n", - " circuit_adj = qjit(circuit_adj)\n", - "\n", - " # Create MetricsWriter instance if rank 0\n", - " timing = []\n", - " for t in range(num_runs):\n", - " start = time.time() \n", - " if enable_jacobian:\n", - " # print(\"Calculating Jacobian\")\n", - " result = qml.jacobian(circuit_adj)(params)\n", - " else:\n", - " # print(\"Calculating State Vector without Jacobian\")\n", - " result = circuit_adj(params)\n", - " end = time.time()\n", - " timing.append(end - start)\n", - "\n", - " # Calculate and print average time\n", - " avg_time = np.mean(timing)\n", - " print(f\"Number Qubits: {n_wires}, Number Layers: {n_layers}, Device: {dev.name}, JIT: {enable_qjit}, Jacobian: {enable_jacobian}, Average time per run: {avg_time:.4f} seconds\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Export the circuit to OpenQASM\n", - "qiskit_dev = qml.device(\"qiskit.aer\", wires=n_wires)\n", - "\n", - "@qml.qnode(qiskit_dev)\n", - "def circuit_qiskit(weights):\n", - " qml.StronglyEntanglingLayers(weights, wires=list(range(n_wires)))\n", - " return qml.math.hstack([qml.expval(qml.PauliZ(i)) for i in range(n_wires)])\n", - "\n", - "circuit_qiskit(params)\n", - "\n", - "qiskit_circuit = qiskit_dev._circuit # Access the Qiskit QuantumCircuit object\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "qasm_code = qiskit_circuit.qasm() # Export to OpenQASM\n", - "\n", - "# Save the QASM code to a file\n", - "with open(\"circuit.qasm\", \"w\") as f:\n", - " f.write(qasm_code)\n", - "\n", - "# Print the QASM code\n", - "print(qasm_code)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dev.name" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/src/mini_apps/quantum_simulation/distributed_state_vector/mini_app.py b/src/mini_apps/quantum_simulation/distributed_state_vector/mini_app.py deleted file mode 100644 index ed61116..0000000 --- a/src/mini_apps/quantum_simulation/distributed_state_vector/mini_app.py +++ /dev/null @@ -1,117 +0,0 @@ -import os -import sys -import logging -from engine.manager import MiniAppExecutor -from mini_apps.quantum_simulation.distributed_state_vector.motif import DistStateVector -import json - -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..")) - -class QuantumSimulation: - def __init__(self, cluster_config, parameters=None): - self.executor = MiniAppExecutor(cluster_config).get_executor() - self.parameters = parameters - self.sv = None - - def update_parameters(self, parameters): - self.parameters = parameters - if self.sv is None: - self.sv = DistStateVector(self.executor, self.parameters) - - - def run(self): - self.sv = DistStateVector(self.executor, self.parameters) - self.sv.run() - - -# Define benchmark configurations at the top -BENCHMARK_CONFIG = { - 'num_runs': 3, - 'hardware_configs': [ - { - 'nodes': [64], - 'cores_per_node': 128, - 'gpus_per_node': [4] - } - ], - 'circuit_configs': [ - { - 'qubit_sizes': [35, 36, 37, 38, 39, 40, 41], - 'enable_jacobian': [False, True], - } - ] -} - - -def create_cluster_info_perlmutter(nodes, cores=128, gpus=4): - return { - "executor": "pilot", - "config": { - "resource": RESOURCE_URL_HPC, - "working_directory": WORKING_DIRECTORY, - "type": "ray", - "number_of_nodes": nodes, - "cores_per_node": cores, - "gpus_per_node": gpus, - #"queue": "premium", - "queue": "regular", - "walltime": 360, - "project": "m4408", - "scheduler_script_commands": ["#SBATCH --constraint=gpu&hbm80g", - "#SBATCH --gpus-per-task=1", - f"#SBATCH --ntasks-per-node={gpus}", - "#SBATCH --gpu-bind=none"], - } - } - - -if __name__ == "__main__": - RESOURCE_URL_HPC = "slurm://localhost" - WORKING_DIRECTORY = os.path.join(os.environ["HOME"], "work") - - qs = None - try: - # Iterate over hardware configurations - for hw_config in BENCHMARK_CONFIG['hardware_configs']: - for nodes in hw_config['nodes']: - for gpus in hw_config['gpus_per_node']: - # Update cluster configuration - cluster_info = create_cluster_info_perlmutter(nodes, cores=128, gpus=gpus) - try: - qs = QuantumSimulation(cluster_info, parameters=None) - # Iterate over circuit configurations - for circuit_config in BENCHMARK_CONFIG['circuit_configs']: - for qubit_size in circuit_config['qubit_sizes']: - for enable_jacobian in circuit_config['enable_jacobian']: - # Update quantum simulation parameters - sv_parameters = { - "num_runs": BENCHMARK_CONFIG['num_runs'], - "n_wires": qubit_size, - "n_layers": 2, - "enable_jacobian": enable_jacobian, - "diff_method": "adjoint", - "enable_qjit": False, - "pennylane_device_config": { - "device": 'lightning.gpu', - "mpi": "True" - } - } - - qs.update_parameters(sv_parameters) - - print(f"Running with {nodes} nodes, {gpus} GPUs, {qubit_size} qubits, enable_jacobian={enable_jacobian}") - - try: - qs.run() - except Exception as e: - print(f"Error @ {qubit_size} qubits (enable_jacobian: ): {e}") - finally: - pass - except Exception as e: - print(f"Error: {e}") - finally: - qs.executor.close() - except Exception as e: - print(f"Error: {e}") - finally: - pass diff --git a/src/mini_apps/quantum_simulation/distributed_state_vector/motif.py b/src/mini_apps/quantum_simulation/distributed_state_vector/motif.py deleted file mode 100644 index c65b2a6..0000000 --- a/src/mini_apps/quantum_simulation/distributed_state_vector/motif.py +++ /dev/null @@ -1,336 +0,0 @@ -# Part of is taken from Pennylane: https://pennylane.ai/blog/2023/09/distributing-quantum-simulations-using-lightning-gpu-with-NVIDIA-cuQuantum - -# Standard library imports -import argparse -import json -import os -import subprocess -import sys -import time -from timeit import default_timer as timer -import logging -from datetime import datetime - -# Third party imports -import pennylane as qml - -# import jax.numpy as jnp -from pennylane import qjit -from mpi4py import MPI -from pennylane import numpy as np - -from engine.base.base_motif import Motif -from engine.metrics.csv_writer import MetricsFileWriter - - -RUN_SCRIPT = os.path.join(os.path.dirname(__file__)) - -RAY_TASK_RESOURCES = { - "num_cpus": 1, - "num_gpus": 1, - "memory": None, - } - -class DistStateVector(Motif): - - def __init__(self, executor, parameters): - """ - Initialize with either a parameters dictionary or a path to a JSON file - """ - super().__init__(executor) - if isinstance(parameters, str): - self.parameters = self._load_parameters_from_file(parameters) - else: - self.parameters = parameters - - # Create a logger - logger = logging.getLogger(__name__) - logger.setLevel(logging.INFO) - - # Check if the logger already has handlers to prevent duplicates - if not logger.hasHandlers(): - # Create a console handler and set the log level - console_handler = logging.StreamHandler() - console_handler.setLevel(logging.INFO) - - # Create a formatter and add it to the console handler - formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") - console_handler.setFormatter(formatter) - - # Add the console handler to the logger - logger.addHandler(console_handler) - - self.logger = logger - - def _load_parameters_from_file(self, file_path): - try: - with open(file_path, 'r') as f: - return json.load(f) - except FileNotFoundError: - print(f"Error: File {file_path} not found") - sys.exit(1) - except json.JSONDecodeError: - print(f"Error: Invalid JSON format in {file_path}") - sys.exit(1) - - def run(self): - """ Called from mini_app.py to generate srun or mpirun command""" - - # Check if MPI is enabled in the device config - mpi_enabled = self.parameters.get("pennylane_device_config", {}).get("mpi", "").lower() == "true" - - # set startup for external tasks to later measure the overhead - self.parameters["agent_timestamp"] = datetime.now().strftime("%Y%m%d_%H%M%S") - - num_nodes = 1 - num_gpus = 0 - if mpi_enabled and self.executor is not None: - self.logger.info(f"Running simulation via Pilot/MPI with parameters: {self.parameters}") - # Serialize the circuit and observable to files - # Get working directory from executor or use current directory as fallback - #working_dir = self.executor.cluster_config["config"]["working_directory"] - - num_nodes = self.executor.cluster_config.get("config", {}).get("number_of_nodes", 1) - num_gpus_per_node = self.executor.cluster_config.get("config", {}).get("gpus_per_node", 0) - num_gpus = num_nodes * num_gpus_per_node - - # Submit task for MPI parallel execution via command line - cmd = ["srun", "-N", str(num_nodes), - f"-n {num_gpus}", "python", - sys.modules[self.__class__.__module__].__file__] - - # Add parameters as command line arguments - if isinstance(self.parameters, dict): - for key, value in self.parameters.items(): - if key == "pennylane_device_config": - for device_key, device_value in value.items(): - cmd.extend([f"--{device_key}", str(device_value)]) - else: - cmd.extend([f"--{key.replace('_', '-')}", str(value)]) - - self.logger.info(f"Running command: {' '.join(cmd)}") - task = self.executor.submit_task( - subprocess.run, - cmd, - capture_output=True, - text=True, - resources=RAY_TASK_RESOURCES - ) - result = self.executor.get_results([task])[0] - - if result.returncode != 0: - raise RuntimeError(f"Command failed with error: {result.stderr}") - - # Log the number of output lines - output_lines = result.stdout.strip().split('\n') - self.logger.info(f"Number of output lines: {len(output_lines)}") - # Log the complete stdout - self.logger.info(f"Complete output:\n{result.stdout}") - - else: - # Run directly in process if MPI is not enabled - try: - self.logger.info(f"Running simulation in_process with parameters: {self.parameters}") - self.run_simulation(self.parameters) - except Exception as e: - self.logger.error(f"Simulation failed with error: {str(e)}") - self.logger.exception("Full traceback:") - raise RuntimeError(f"Simulation failed: {str(e)}") from e - - @staticmethod - def run_simulation(parameters): - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - size = comm.Get_size() - - pennylane_device_config = parameters["pennylane_device_config"] - num_runs = parameters["num_runs"] - n_layers = parameters["n_layers"] - n_wires = parameters["n_wires"] - pennylane_device_config["wires"] = n_wires - diff_method = parameters["diff_method"] - enable_jacobian = parameters.get("enable_jacobian", False) - enable_qjit = parameters.get("enable_qjit", False) - if diff_method == "None": - diff_method = None - if pennylane_device_config["mpi"].lower() == "true": - pennylane_device_config["mpi"] = True - else: - pennylane_device_config["mpi"] = False - - # for computation of task startup overhead - start_time_agent_str = parameters.get("agent_timestamp", datetime.now().strftime("%Y%m%d_%H%M%S")) - start_time_agent = datetime.strptime(start_time_agent_str, "%Y%m%d_%H%M%S").timestamp() - start_time_process = time.time() - mpi_startup_time = start_time_process - start_time_agent - - # Instantiate CPU (lightning.qubit) or GPU (lightning.gpu) device - # mpi=True to switch on distributed simulation - # batch_obs=True to reduce the device memory demand for adjoint backpropagation - - # Print device configuration with rank information - if rank == 0: - print(f"Initializing device with configuration:\n{json.dumps(pennylane_device_config, indent=2)}") - - dev = qml.device(**pennylane_device_config) - - # Create QNode of device and circuit - def circuit_adj(weights): - qml.StronglyEntanglingLayers(weights, wires=list(range(n_wires))) - return qml.math.hstack([qml.expval(qml.PauliZ(i)) for i in range(n_wires)]) - #return qml.expval(qml.PauliZ(0)) - - params = np.array( - np.random.random(qml.StronglyEntanglingLayers.shape(n_layers=n_layers, n_wires=n_wires)), - dtype=np.float64 - ) - - if enable_jacobian: - print(f"Initializing QNode with jacobian enabled: interface=autograd, diff_method={diff_method}") - circuit_adj = qml.qnode(dev, interface="autograd", diff_method=diff_method)(circuit_adj) - else: - print("Initializing QNode without jacobian") - circuit_adj = qml.qnode(dev, diff_method=None)(circuit_adj) - - if enable_qjit: - circuit_adj = qjit(circuit_adj) - - # Set trainable parameters for calculating circuit Jacobian at the rank=0 process - if rank == 0: - params = np.random.random(qml.StronglyEntanglingLayers.shape(n_layers=n_layers, n_wires=n_wires)) - else: - params = None - - # Broadcast the trainable parameters across MPI processes from rank=0 process - params = comm.bcast(params, root=0) - - # Create MetricsWriter instance if rank 0 - if rank == 0: - # Create results directory if it doesn't exist - results_dir = os.path.abspath("results") - if not os.path.exists(results_dir): - os.makedirs(results_dir) - print(f"Results directory: {results_dir}") - - # Create a timestamp and initialize the MetricsFileWriter with the path to the results directory - metrics_writer = MetricsFileWriter( - os.path.join(results_dir, f"distributed_state_vector_{start_time_agent_str}.csv"), - header=[ - "timestamp", - "num_gpus", - "wires", - "layers", - "time", - "expval", - "enable_jacobian", - "enable_qjit", - "mpi_startup_time" - ] - ) - timing = [] - for t in range(num_runs): - start = time.time() - if enable_jacobian: - print("Calculating Jacobian") - result = qml.jacobian(circuit_adj)(params) - else: - print("Calculating State Vector without Jacobian") - result = circuit_adj(params) - end = time.time() - runtime = end - start - timing.append(runtime) - - if rank == 0: - metrics = [ - start_time_agent_str, - size, - n_wires, - n_layers, - runtime, - str(result[0])[:10], - enable_jacobian, - enable_qjit, - mpi_startup_time - ] - metrics_writer.write(metrics) - print("timestamp: ", start_time_agent_str, " num_gpus: ", size, " wires: ", n_wires, - " layers ", n_layers, " time: ", runtime, " result q0: ", result[0], - " enable_qjit: ", enable_qjit, " mpi: ", pennylane_device_config["mpi"], - " mpi_startup_time: ", mpi_startup_time - ) - - if rank == 0: - metrics_writer.close() - - # MPI barrier to ensure all calculations are done - comm.Barrier() - - - -if __name__ == "__main__": - """ Run script from command line via mpirun or srun on Perlmutter or SLURM managed clusters - """ - - - parser = argparse.ArgumentParser(description='Distributed State Vector Simulation') - group = parser.add_mutually_exclusive_group() - group.add_argument('--config', type=str, - help='Path to JSON configuration file') - group.add_argument('--use-cli', action='store_true', - help='Use command line parameters instead of config file') - - # Command line parameters - parser.add_argument('--num-runs', type=int, default=2, - help='Number of runs (default: 2)') - parser.add_argument('--n-wires', type=int, default=10, - help='Number of wires (default: 10)') - parser.add_argument('--n-layers', type=int, default=2, - help='Number of layers (default: 2)') - parser.add_argument('--diff-method', type=str, default='None', - choices=['adjoint', 'parameter-shift', 'None'], - help='Differentiation method (default: adjoint)') - parser.add_argument('--device', type=str, default='lightning.gpu', - help='PennyLane device name (default: lightning.gpu)') - parser.add_argument('--mpi', type=str, default='True', - choices=['True', 'False'], - help='Enable MPI (default: True)') - parser.add_argument('--enable-jacobian', type=str, default='False', - choices=['True', 'False'], - help='Enable Jacobian calculation (default: False)') - parser.add_argument('--batch-obs', type=str, default='False', - choices=['True', 'False'], - help='Enable batch observations (default: False)') - parser.add_argument('--enable-qjit', type=str, default='False', - choices=['True', 'False'], - help='Enable QJIT compilation (default: True)') - parser.add_argument('--agent-timestamp', type=str, - default=datetime.now().strftime("%Y%m%d_%H%M%S"), - help='Timestamp for logging (default: current time in format YYYYMMDD_HHMMSS)') - - args = parser.parse_args() - - if args.config: - # Use JSON config file - dist_state_vector = DistStateVector(None, args.config) - - else: - # Use command line parameters - parameters = { - "num_runs": args.num_runs, - "n_wires": args.n_wires, - "n_layers": args.n_layers, - "diff_method": args.diff_method, - "enable_jacobian": args.enable_jacobian.lower() == 'true', - "enable_qjit": args.enable_qjit.lower() == 'true', - "agent_timestamp": args.agent_timestamp, - "pennylane_device_config": { - "name": args.device, - "mpi": args.mpi, - "batch_obs": args.batch_obs.lower() == 'true' - } - } - dist_state_vector = DistStateVector(None, parameters) - - # Run the simulation - dist_state_vector.run() -