https://github.com/carlolepelaars/skq
Scientific Toolkit for Quantum Computing
https://github.com/carlolepelaars/skq
numpy python quantum quantum-computing quantum-machine-learning
Last synced: about 2 months ago
JSON representation
Scientific Toolkit for Quantum Computing
- Host: GitHub
- URL: https://github.com/carlolepelaars/skq
- Owner: CarloLepelaars
- License: apache-2.0
- Created: 2024-07-12T13:11:02.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-01T20:33:19.000Z (over 1 year ago)
- Last Synced: 2025-03-21T06:12:48.122Z (over 1 year ago)
- Topics: numpy, python, quantum, quantum-computing, quantum-machine-learning
- Language: Python
- Homepage: https://carlolepelaars.github.io/skq/
- Size: 1.65 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# skq


[](https://github.com/astral-sh/uv)
[](https://github.com/astral-sh/ruff)
Scientific Toolkit for Quantum Computing
This library is used in the [q4p (Quantum Computing for Programmers)](https://github.com/CarloLepelaars/q4p) course.

NOTE: This library is developed for educational purposes. While we strive for correctness of everything, the code is provided as is and not guaranteed to be bug-free. For sensitive applications make sure you check computations.
## Why SKQ?
- Exploration: Play with fundamental quantum building blocks using [NumPy](https://numpy.org).
- Education: Learn quantum computing concepts and algorithms.
- Integration: Combine classical components with quantum components.
- Democratize quantum for Python programmers and data scientists: Develop quantum algorithms in your favorite environment and easily export to your favorite quantum computing platform for running on real quantum hardware.
## Install
```bash
pip install -U skq
```
## Quickstart
### Circuit Conversion
Run this code snippet to initialize Grover's algorithm and convert to Qiskit to run on quantum hardware. The algorithm can also be run within `skq` as a classical simulation.
```python
from skq.circuits import Grover
# Initialize Grover's search skq Circuit
circuit = Grover().circuit(n_qubits=3, target_state=np.array([0, 0, 0, 0, 1, 0, 0, 0]), n_iterations=1)
# Conversion to Qiskit
qiskit_circuit = circuit.convert(framework="qiskit")
qiskit_circuit.draw()
# ┌───┐┌──────────────┐┌──────────────────┐┌─┐
# q_0: ┤ H ├┤0 ├┤0 ├┤M├──────
# ├───┤│ ││ │└╥┘┌─┐
# q_1: ┤ H ├┤1 PhaseOracle ├┤1 GroverDiffusion ├─╫─┤M├───
# ├───┤│ ││ │ ║ └╥┘┌─┐
# q_2: ┤ H ├┤2 ├┤2 ├─╫──╫─┤M├
# └───┘└──────────────┘└──────────────────┘ ║ ║ └╥┘
# c: 3/══════════════════════════════════════════╩══╩══╩═
# 0 1 2
# Run circuit as classical simulation
print(grover([1,0,0,0,0,0,0,0]))
# array([0.03125, 0.03125, 0.03125, 0.03125, 0.78125, 0.03125, 0.03125, 0.03125])
```
### Circuits from scratch
You can also build your own custom circuits from scratch using individual gates. All gates can be converted to popular frameworks like Qiskit and OpenQASM.
```python
from skq.gates import H, I, CX
from skq.circuits import Concat, Circuit
H() # Hadamard gate (NumPy array)
# H([[ 0.70710678+0.j, 0.70710678+0.j],
# [ 0.70710678+0.j, -0.70710678+0.j]])
I() # Identity gate (NumPy array)
# I([[1.+0.j, 0.+0.j],
# [0.+0.j, 1.+0.j]])
CX() # CNOT gate (NumPy array)
# CX([[1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
# [0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j],
# [0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j],
# [0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j]])
# Initialize Bell State skq Circuit
circuit = Circuit([Concat([H(), I()]), CX()])
# Simulate circuit classically
state = np.array([1, 0, 0, 0]) # |00> state
circuit(state)
# array([0.70710678+0.j, 0, 0, 0.70710678+0.j])
# Conversion to Qiskit (Identity gates are removed)
qiskit_circuit = circuit.convert(framework="qiskit")
qiskit_circuit.draw()
# ┌───┐
# q_0: ┤ H ├──■──
# └───┘┌─┴─┐
# q_1: ─────┤ X ├
# └───┘
# Conversion to OpenQASM
qasm_circuit = circuit.convert(framework="qasm")
print(qasm_circuit)
# h q[0];
# cx q[0], q[1];
```
