Skip to main content

QuPRS: Quantum Path-sum Reduction and Solver

Project description

PyPI version License PyPI - Python Version DOI GitHub last commit

QuPRS: Quantum Path-sum Reduction and Solver

QuPRS("kyu-parse") is a tool for Quantum Circuit tool integrate Path-sum Reduction and Solver.

In quantum computing, verifying whether an optimized or compiled quantum circuit is functionally equivalent to the original circuit is a crucial task. QuPRS aims to solve this problem, and its features include:

  • Novel verification method: Based on pathsum, which is a circuit representation method different from traditional matrix products.
  • Multiple verification strategies:
    1. Hybrid mode (RR + WMC): Combines the efficiency of reduction rules and the completeness of weighted model counting.
    2. Reduction rules only (RR): Extremely fast, suitable for circuits that can be simplified by local rules.
    3. WMC only: A powerful SAT-based method for more complex circuit structures.
  • Seamless integration with Qiskit ecosystem: Circuits can be directly loaded from Qiskit QuantumCircuit objects or QASM files.

Contents

Installation

It is recommended to install QuPRS in a virtual environment.

  1. Create and activate a Conda virtual environment:

    conda create --name QuPRS python=3.12 # Or your preferred Python version
    conda activate QuPRS
    
  2. Install QuPRS using pip:

    pip install QuPRS
    

    or install QuPRS latest commit:

    pip install git+https://github.com/PhysicsQoo/QuPRS.git
    

Using QuPRS

This tool can build quantum circuit using path-sum formulation.

First, import the necessary components from the QuPRS library.

from QuPRS.pathsum import pathsum

Create pathsum Circuit

Create a pathsum Circuit You can create a pathsum.QuantumCircuit object directly:

qubit_num = 2
circuit = pathsum.QuantumCircuit(qubit_num)
circuit = circuit.h(0) # Apply Hadamard gate to qubit 0
circuit = circuit.h(0) # Apply Hadamard gate to qubit 0 again (H*H = I)
# Add more gates as needed
# e.g., circuit = circuit.cx(0, 1)

Import From qasm

pathsum supports importing circuits from QASM files or strings.

From a QASM file:

filename = "my_circuit.qasm"
# Ensure my_circuit.qasm exists and contains valid QASM code
# Example my_circuit.qasm:
# OPENQASM 2.0;
# include "qelib1.inc";
# qreg q[2];
# h q[0];
# cx q[0],q[1];

circuit = pathsum.load_from_qasm_file(filename)

Or

qasm_str = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[2];
h q[0];
cx q[0],q[1];
"""
circuit = pathsum.load_from_qasm_str(qasm_str)

Equivalence Checking

QuPRS provides tools for checking the equivalence of two quantum circuits, potentially imported from Qiskit or QASM files.

Importing Circuits for Equivalence Checking You can load circuits from QASM files or define them directly using Qiskit for comparison.

Circuit Prepare

  • Load from QASM files
    # Assuming circuit1.qasm and circuit2.qasm exist
    from QuPRS.interface.load_qiskit import load_circuit
    
    circuit1 = load_circuit("circuit1.qasm")
    circuit2 = load_circuit("circuit2.qasm")
    
  • Direct import from Qiskit QuantumCircuit objects:
    from qiskit import QuantumCircuit 
    
    # Define circuit1 using Qiskit
    circuit1 = QuantumCircuit(2)
    circuit1.h(1)
    circuit1.cx(0, 1)
    circuit1.h(1)
    
    # Define circuit2 using Qiskit
    circuit2 = QuantumCircuit(2)
    circuit2.cz(0, 1)
    

Run Equivalence Checking

  • Hybrid: Reduction Rules (RR) and Weighted Model Counting (WMC)

    This method combines RR with WMC for equivalence checking.

    from QuPRS.interface.load_qiskit import qasm_eq_check_with_wmc
    
    output_dict = qasm_eq_check_with_wmc(circuit1, circuit2)
    
  • Using Reduction Rules (RR)

    This method checks if two circuits are equivalent primarily using Reduction Rules.

    from QuPRS.interface.load_qiskit import qasm_eq_check
    
    output_dict, circuit = qasm_eq_check(circuit1, circuit2)
    
  • WMC only (without RR)

    To perform equivalence checking using only WMC, you need to disable the Reduction Rules switch.

    from QuPRS.interface.load_qiskit import qasm_eq_check_with_wmc
    from QuPRS.pathsum import set_reduction_switch
    
    set_reduction_switch(False)
    output_dict = qasm_eq_check_with_wmc(circuit1, circuit2)
    

Cite

If you use QuPRS in your research, please consider citing it.

This code is associated with a forthcoming publication. Please cite this repository for now, and check back for the full paper citation.

DOI

License Information

  • This project’s original source code is licensed under: MIT
  • Kenji Hashimoto’s binary component (QuPRS/utils/gpmc) is licensed under the MIT License and the file (QuPRS/utils/Qiskit_Circuit_Utils.py) contains functions (random_circuit, random_clifford_T_circuit) that are derived from the Qiskit library. The original Qiskit code is licensed under the Apache 2.0. see: NOTICE

Acknowledgements

This project utilizes gpmc, a binary component developed by Kenji Hashimoto, for parts of its Weighted Model Counting functionality.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quprs-0.7.1.tar.gz (372.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quprs-0.7.1-py3-none-any.whl (369.4 kB view details)

Uploaded Python 3

File details

Details for the file quprs-0.7.1.tar.gz.

File metadata

  • Download URL: quprs-0.7.1.tar.gz
  • Upload date:
  • Size: 372.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quprs-0.7.1.tar.gz
Algorithm Hash digest
SHA256 ff04bfeb958f70028a7eea996699df9dcc9f62ff7c893958e5201bd2181a7f47
MD5 18c48d3b77316f3619a47dc5e97bd707
BLAKE2b-256 b6993bc0cd2481aeb3921f247b1772459b53ae189bb9d5a4b3674b9c22623586

See more details on using hashes here.

Provenance

The following attestation bundles were made for quprs-0.7.1.tar.gz:

Publisher: python-publish.yml on PhysicsQoo/QuPRS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quprs-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: quprs-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 369.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quprs-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0e3a09554f9e4b0b06f21501508b6f23883057cf619a7c4e766d9402af1c14eb
MD5 8da52b533cb4e9f807580e4dfb6c3362
BLAKE2b-256 bcb6ff0e1be4d1ea4f5113c3b81685ed2ab019ed3217f3d31436baab92b03067

See more details on using hashes here.

Provenance

The following attestation bundles were made for quprs-0.7.1-py3-none-any.whl:

Publisher: python-publish.yml on PhysicsQoo/QuPRS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page