Skip to main content

Framework for running, monitoring and analysing quantum algorithms.

Project description

Quantum Pipeline

Overview

The Quantum Pipeline project is an extensible framework designed for exploring Variational Quantum Eigensolver (VQE) algorithms. It combines quantum and classical computing to estimate the ground-state energy of molecular systems.

The framework provides modules to handle algorithm orchestration, prametrising it as well as monitoring and data visualization. Data is organised in extensible dataclasses, which can also be streamed via Kafka for further processing.

Currently, it offers VQE as its primary algorithm with basic functionality, but aims to evolve into a convenient tool for running various quantum algorithms.


Features

  • Molecule Loading: Load and validate molecular data from files.
  • Hamiltonian Preparation: Generate second-quantized Hamiltonians for molecular systems.
  • Quantum Circuit Construction: Create parameterized ansatz circuits with customizable repetitions.
  • VQE Execution: Solve Hamiltonians using the VQE algorithm with support for various optimizers.
  • Visualization Tools: Plot molecular structures, energy convergence, and operator coefficients.
  • Report Generation: Automatically generate detailed reports for each processed molecule.
  • Kafka Integration: Stream simulation results to Apache Kafka for real-time data processing.
  • Advanced Backend Options: Customize simulation parameters such as qubit count, shot count, and optimization levels.
  • Containerized Execution: Deploy as a Docker container.

Directory Structure

quantum_pipeline/
├── configs/              # Configuration settings and argument parsers
├── drivers/              # Molecule loading and basis set validation
├── features/             # Quantum circuit and Hamiltonian features
├── mappers/              # Fermionic-to-qubit mapping implementations
├── report/               # Report generation utilities
├── runners/              # VQE execution logic
├── solvers/              # VQE solver implementations
├── stream/               # Kafka streaming and messaging utilities
├── structures/           # Quantum and classical data structures
├── utils/                # Utility functions (logging, visualization, etc.)
├── visual/               # Visualization tools for molecules and operators
└── quantum_pipeline.py   # Main entry point

Installation

  1. Clone the Repository:

    git clone https://github.com/your-repo/quantum_pipeline.git
    cd quantum_pipeline
    
  2. Set Up a Virtual Environment (optional but recommended):

    python3 -m venv env
    source env/bin/activate
    
  3. Install Dependencies:

    pip install -r requirements.txt
    
  4. (Optional) Run in Docker:

    docker-compose up --build
    

    or

    docker build .
    

Usage

1. Prepare Input Data

Molecules should be defined like this:

[
    {
        "symbols": ["H", "H"],
        "coords": [[0.0, 0.0, 0.0], [0.0, 0.0, 0.74]],
        "multiplicity": 1,
        "charge": 0,
        "units": "angstrom",
        "masses": [1.008, 1.008]
    },
    {
        "symbols": ["O", "H", "H"],
        "coords": [[0.0, 0.0, 0.0], [0.0, 0.757, 0.586], [0.0, -0.757, 0.586]],
        "multiplicity": 1,
        "charge": 0,
        "units": "angstrom",
        "masses": [15.999, 1.008, 1.008]
    }
]

2. Run the Pipeline

Run the main script to process molecules:

python quantum_pipeline.py -f data/molecule.json -b sto-3g --max-iterations 100 --optimizer COBYLA --report

Defaults for each option can be found in configs/defaults.py and the help message (python quantum_pipeline.py -h). Other available parameters include:

  • -f FILE, --file FILE: Path to the molecule data file (required).
  • -b BASIS, --basis BASIS: Specify the basis set for the simulation.
  • --local: Use a local quantum simulator instead of IBM Quantum.
  • --min-qubits MIN_QUBITS: Specify the minimum number of qubits required.
  • --max-iterations MAX_ITERATIONS: Set the maximum number of VQE iterations.
  • --optimizer OPTIMIZER: Choose from a variety of optimization algorithms.
  • --output-dir OUTPUT_DIR: Specify the directory for storing output files.
  • --log-level {DEBUG,INFO,WARNING,ERROR}: Set the logging level.
  • --shots SHOTS: Number of shots for quantum circuit execution.
  • --optimization-level {0,1,2,3}: Circuit optimization level.
  • --report: Generate a PDF report after simulation.
  • --kafka: Stream data to Apache Kafka for real-time processing.

Example Configurations

Basic configuration (utilizes the defaults.py config) emphasizes performance over accuracy:

python quantum_pipeline.py -f data/molecules.json

Configuration with custom parameters:

python quantum_pipeline.py -f data/molecule.json -b cc-pvdz --max-iterations 200 --optimizer L-BFGS-B --shots 2048 --report

3. Kafka Integration

Enable streaming to Apache Kafka via --kafka parameter:

python quantum_pipeline.py -f data/molecule.json --kafka

Examples

Python API

The framework can be used programmatically:

from quantum_pipeline.runners.vqe_runner import VQERunner

backend = VQERunner.default_backend()
runner = VQERunner(
    filepath='data/molecules.json',
    basis_set='sto3g',
    max_iterations=1,
    convergence_threshold=1e-6,
    optimizer='COBYLA',
    ansatz_reps=3
)
runner.run(backend)

Docker Example

Run the pipeline in a Docker container:

docker run --rm quantum_pipeline:latest --file /app/data/molecule.json --basis sto-3g --max-iterations 10

Example KafkaConsumer

You can test the Kafka integration with a simple consumer like this:

from kafka import KafkaConsumer
from quantum_pipeline.stream.serialization.interfaces.vqe import VQEDecoratedResultInterface

class KafkaMessageConsumer:
    def __init__(self, topic='vqe_results', bootstrap_servers='localhost:9092'):
        self.deserializer = VQEDecoratedResultInterface()
        self.consumer = KafkaConsumer(
            topic,
            bootstrap_servers=bootstrap_servers,
            value_deserializer=self.deserializer.from_avro_bytes,
            auto_offset_reset='earliest',
            enable_auto_commit=True,
            group_id='vqe_consumer_group'
        )

    def consume_messages(self):
        try:
            for message in self.consumer:
                try:
                    # Process the message
                    decoded_message = message.value
                    yield decoded_message
                except Exception as e:
                    print(f"Error processing message: {str(e)}")
                    continue
        except Exception as e:
            print(f"Error in consumer: {str(e)}")
        finally:
            self.consumer.close()

Then you can use the consumer like this:

consumer = KafkaMessageConsumer()
for msg in consumer.consume_messages():
    print(f"Received message: {msg}")

Contributing

For now, this project is not open for contributions since it is a university project, but feel free to fork it and make your own version.


License

This project is licensed under the MIT License. See the LICENSE file for more details.


Contact

For questions or support, please reach out to:

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

quantum_pipeline-1.2.1.tar.gz (61.0 kB view details)

Uploaded Source

Built Distribution

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

quantum_pipeline-1.2.1-py3-none-any.whl (54.7 kB view details)

Uploaded Python 3

File details

Details for the file quantum_pipeline-1.2.1.tar.gz.

File metadata

  • Download URL: quantum_pipeline-1.2.1.tar.gz
  • Upload date:
  • Size: 61.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quantum_pipeline-1.2.1.tar.gz
Algorithm Hash digest
SHA256 bdfe1cd310b826b49c71712e336aa539f2a37040461d45e89a59e0f63304f09d
MD5 2826e74d96c56251a9ca5d786507fd22
BLAKE2b-256 c46a8dc041631161edfa1cfcc69ec4fbf3ab8deaa182099bc49b6cead55961f5

See more details on using hashes here.

File details

Details for the file quantum_pipeline-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for quantum_pipeline-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f263c6e894191a6d07ff628c50df17eed589443c2356e7ad751a403a209e369d
MD5 47644f02001bf7ea688fe856451d34a2
BLAKE2b-256 a7d64a1940873f6292f42ec4e32697dd7b945343eb6a586a49346b9d3e0dfcbf

See more details on using hashes here.

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