All Projects → harshangrjn → QuantumCircuitOpt.jl

harshangrjn / QuantumCircuitOpt.jl

Licence: other
A Julia/JuMP Package for Optimal Quantum Circuit Design

Programming Languages

julia
2034 projects

Projects that are alternatives of or similar to QuantumCircuitOpt.jl

qibo
A framework for quantum computing with hardware acceleration.
Stars: ✭ 120 (+166.67%)
Mutual labels:  quantum-computing, quantum-circuit, quantum-algorithms
Quantumflow Dev
QuantumFlow: A Quantum Algorithms Development Toolkit
Stars: ✭ 43 (-4.44%)
Mutual labels:  quantum-computing, quantum-algorithms
public research
Publicly available research done by BOHR.TECHNOLOGY.
Stars: ✭ 16 (-64.44%)
Mutual labels:  quantum-computing, quantum-algorithms
Quantum Algorithms Tutorials
Tutorials for Quantum Algorithms with Qiskit implementations.
Stars: ✭ 115 (+155.56%)
Mutual labels:  quantum-computing, quantum-algorithms
Yao.jl
Extensible, Efficient Quantum Algorithm Design for Humans.
Stars: ✭ 514 (+1042.22%)
Mutual labels:  quantum-computing, quantum-algorithms
Awesome Quantum Software
Curated list of open-source quantum software projects.
Stars: ✭ 647 (+1337.78%)
Mutual labels:  quantum-computing, quantum-algorithms
Openfermion Psi4
OpenFermion plugin to interface with the electronic structure package Psi4.
Stars: ✭ 63 (+40%)
Mutual labels:  quantum-computing, quantum-algorithms
Qiskit Terra
Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and algorithms.
Stars: ✭ 3,177 (+6960%)
Mutual labels:  quantum-computing, quantum-circuit
Recirq
Research using Cirq!
Stars: ✭ 119 (+164.44%)
Mutual labels:  quantum-computing, quantum-algorithms
Qpanda 2
QPanda 2 is an open source quantum computing framework developed by OriginQC that can be used to build, run, and optimize quantum algorithms.
Stars: ✭ 128 (+184.44%)
Mutual labels:  quantum-computing, quantum-algorithms
Scaffcc
Compilation, analysis and optimization framework for the Scaffold quantum programming language.
Stars: ✭ 133 (+195.56%)
Mutual labels:  quantum-computing, quantum-algorithms
Strawberryfields
Strawberry Fields is a full-stack Python library for designing, simulating, and optimizing continuous variable (CV) quantum optical circuits.
Stars: ✭ 505 (+1022.22%)
Mutual labels:  quantum-computing, quantum-algorithms
Grove
Quantum algorithms built using pyQuil.
Stars: ✭ 332 (+637.78%)
Mutual labels:  quantum-computing, quantum-algorithms
Awesome Ai Books
Some awesome AI related books and pdfs for learning and downloading, also apply some playground models for learning
Stars: ✭ 855 (+1800%)
Mutual labels:  quantum-computing, quantum-algorithms
Blueqat
Quantum Computer Library for Everyone
Stars: ✭ 298 (+562.22%)
Mutual labels:  quantum-computing, quantum-algorithms
Openfermion
The electronic structure package for quantum computers.
Stars: ✭ 1,099 (+2342.22%)
Mutual labels:  quantum-computing, quantum-algorithms
Pytket
Python module for interfacing with the CQC t|ket> library of quantum software
Stars: ✭ 162 (+260%)
Mutual labels:  quantum-computing, quantum-algorithms
Openfermion Cirq
Quantum circuits for simulations of quantum chemistry and materials.
Stars: ✭ 258 (+473.33%)
Mutual labels:  quantum-computing, quantum-algorithms
Cirq
A python framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
Stars: ✭ 3,115 (+6822.22%)
Mutual labels:  quantum-computing, quantum-algorithms
Teach Me Quantum
⚛ 10 week Practical Course on Quantum Information Science and Quantum Computing - with Qiskit and IBMQX
Stars: ✭ 118 (+162.22%)
Mutual labels:  quantum-computing, quantum-algorithms


A Julia Package for Optimal Quantum Circuit Design

Status: CI codecov version

Dev version: Documentation

QuantumCircuitOpt is a Julia package which implements discrete optimization-based methods for provably optimal synthesis of an architecture for Quantum circuits. While programming Quantum Computers, a primary goal is to build useful and less-noisy quantum circuits from the basic building blocks, also termed as elementary gates which arise due to hardware constraints. Thus, given a desired quantum computation, as a target gate, and a set of elemental one- and two-qubit gates, this package provides a provably optimal, exact (up to global phase and machine precision) or an approximate decomposition with minimum number of elemental gates and CNOT gates. Now, this package also supports multi-qubit gates in the elementary gates set, such as the global rotation gate. Note that QuantumCircuitOpt currently supports only decompositions of circuits up to ten qubits.

Installation

QuantumCircuitOpt is a registered package and can be installed by entering the following in the Julia REPL-mode:

import Pkg
Pkg.add("QuantumCircuitOpt")

Usage

  • Clone the repository.
  • Open a terminal in the repo folder and run julia --project=..
  • Hit ] to open the project environment and run test to run unit tests. If you see an error because of missing packages, run resolve.

On how to use this package, check the Documentation's quick start guide and the examples folder for several important circuit decompositions.

Video Links

For more technical details about the package, check out these video links:

Sample Circuit Synthesis

Here is a sample usage of QuantumCircuitOpt to optimally decompose a 2-qubit controlled-Z gate (CZGate) using the entangling CNOT gate and an one-qubit universal rotation gate (U3Gate) with three discretized Euler angles (θ,ϕ,λ):

import QuantumCircuitOpt as QCOpt
using JuMP
using Gurobi

# Target: CZGate
function target_gate()
    return Array{Complex{Float64},2}([1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 -1]) 
end

params = Dict{String, Any}(
"num_qubits" => 2, 
"maximum_depth" => 4,    
"elementary_gates" => ["U3_1", "U3_2", "CNot_1_2", "Identity"],
"target_gate" => target_gate(),
"objective" => "minimize_depth",
"decomposition_type" => "exact_optimal",
       
"U3_θ_discretization" => -π/2:π,
"U3_ϕ_discretization" => -π/2:π,
"U3_λ_discretization" => -π/2:π,
)

qcm_optimizer = JuMP.optimizer_with_attributes(Gurobi.Optimizer, "presolve" => 1) 
QCOpt.run_QCModel(params, qcm_optimizer)

If you prefer to decompose a target gate of your choice, update the target_gate() function and the set of elementary_gates accordingly in the above sample code.

Bug reports and Contributing

Please report any issues via the Github issue tracker. All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc.

QuantumCircuitOpt is being actively developed and suggestions or other forms of contributions are encouraged.

Acknowledgement

This work was supported by Los Alamos National Laboratory's LDRD Early Career Research award. The primary developer of this package is Harsha Nagarajan (@harshangrjn).

Citing QuantumCircuitOpt

If you find QuantumCircuitOpt useful in your work, we request you to cite the following paper (IEEE link, arXiv link):

@inproceedings{QCOpt_SC2021,
  title={{QuantumCircuitOpt}: An Open-source Framework for Provably Optimal Quantum Circuit Design},
  author={Nagarajan, Harsha and Lockwood, Owen and Coffrin, Carleton},
  booktitle={SC21: The International Conference for High Performance Computing, Networking, Storage, and Analysis},
  series={Second Workshop on Quantum Computing Software},
  pages={55--63},
  year={2021},
  doi={10.1109/QCS54837.2021.00010},
  organization={IEEE Computer Society}
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].