2025-11-10T02:59:56.765376

GUPPY: Pythonic Quantum-Classical Programming

Koch, Lawrence, Singhal et al.
We present ongoing work on Guppy, a domain-specific language embedded in Python that allows users to write high-level hybrid quantum programs with complex control flow in Pythonic syntax, aiming to run them on actual quantum hardware.
academic

GUPPY: Pythonic Quantum-Classical Programming

Basic Information

  • Paper ID: 2510.12582
  • Title: GUPPY: Pythonic Quantum-Classical Programming
  • Authors: Mark Koch, Alan Lawrence, Kartik Singhal, Seyon Sivarajah, Ross Duncan (Quantinuum, United Kingdom)
  • Classification: cs.PL (Programming Languages), cs.SE (Software Engineering), quant-ph (Quantum Physics)
  • Publication Date: October 14, 2025 (arXiv preprint)
  • Paper Link: https://arxiv.org/abs/2510.12582v1

Abstract

This paper introduces Guppy, a domain-specific language (DSL) embedded in Python that enables users to write high-level hybrid quantum programs with complex control flow using Pythonic syntax, with the goal of executing these programs on actual quantum hardware.

Research Background and Motivation

Problem Definition

  1. Python's Dominance in Quantum Computing: According to recent surveys, over 90% of quantum computing researchers and practitioners use Python, yet existing frameworks are limited by circuit-level abstractions and provide limited support for high-level control flow.
  2. Real-time Quantum-Classical Computing Requirements: Algorithms such as repeat-until-success protocols require real-time classical data processing based on quantum measurement results, a need that will grow with next-generation quantum devices.
  3. Limitations of Existing Approaches:
    • Most Python frameworks construct quantum program representations by tracing the Python interpreter, unable to capture native Python control flow syntax
    • Conditional statements and loops must be expressed through higher-order combinators or other syntactic structures
    • Lack of linear type systems to prevent quantum programming errors

Research Motivation

Develop a programming language that maintains Python's friendly syntax and ecosystem advantages while supporting complex quantum-classical hybrid computation.

Core Contributions

  1. Proposed Guppy DSL: A domain-specific language embedded in Python supporting Pythonic syntax for writing quantum-classical hybrid programs
  2. Implemented Linear Type System: Captures quantum programming errors (such as violations of the no-cloning theorem) at compile time through linear Qubit types
  3. Support for Complex Control Flow: Native support for conditional statements, loops, and other control flow structures based on measurement results
  4. Static Compilation to Hugr IR: Compiles to the novel quantum intermediate representation Hugr, supporting expression and optimization of quantum-classical programs
  5. Python Interoperability: Seamless integration with the Python ecosystem through py(...) expressions

Methodology Details

Task Definition

Design a programming language capable of:

  • Using familiar Python syntax
  • Supporting quantum-classical hybrid computation
  • Providing compile-time safety guarantees
  • Generating programs executable on quantum hardware

Language Design Architecture

1. Core Syntax Features

  • Pythonic Control Flow: Supports if, for, while, break, continue, return statements
  • Strong Type System: Requires type annotations; variables must be assigned in all control flow paths with a unique static type
  • Basic Types: Supports bool, int, float, None and corresponding operations

2. Quantum Operation Design

@guppy
def rx(q: Qubit, a: float) -> Qubit:
    # Linear type: Qubit cannot be copied or implicitly discarded
    return h(rz(h(q), a))

Linear Type System Characteristics:

  • Qubit values are processed linearly and cannot be copied or implicitly discarded
  • Quantum operation signatures such as: h: Qubit -> Qubit
  • Compile-time detection of programming errors:
    q = Qubit()
    return cx(q, q)  # Error: same qubit used multiple times
    
    q = Qubit()
    h(q)  # Error: return value not used
    

3. Collection Types

  • Linear Lists and Tuples: Used to represent qubit registers
  • Special Operations:
    • get function: Returns the qubit at a specified index and a new list with that qubit removed
    • apply method: Applies a function at specified indices, e.g., qs.apply(cx, (i, j))
  • List Comprehensions: Supports [h(q) for q in qs] syntax

4. Higher-Order Function Support

  • Functions are first-class values using Callable type constructor
  • Supports nested function definitions and variable capture
  • Supports recursion and mutual recursion

5. Python Interoperability

import networkx as nx
g = nx.erdos_renyi_graph(20, 0.25)

@guppy
def apply_graph(qs: list[Qubit]) -> list[Qubit]:
    for i, j in py(g.edges()):  # py() expression calls Python code
        qs = qs.apply(zz, (i, j))
    return qs

Compilation Architecture

Compilation Target: Hugr IR

  • Hierarchical Unified Graph Representation
  • Data Flow Graph: Nodes represent pure function calls; edges represent data dependencies
  • Structured Control Flow: Branches and iterations represented through Conditional and TailLoop nodes
  • Linear Type Support: Constraints ensure node outputs have only one data flow edge

Compilation Pipeline

  1. Guppy source code parsing
  2. Type checking and static analysis
  3. Hugr graph representation generation
  4. Optimization and target code generation

Experimental Setup

Example Program Verification

1. Quantum Teleportation Protocol

@guppy
def teleport(src: Qubit, tgt: Qubit) -> Qubit:
    tmp, tgt = cx(h(Qubit()), tgt)
    src, tmp = cx(src, tmp)
    
    if measure(h(src)):
        tgt = z(tgt)
    if measure(tmp):
        tgt = x(tgt)
    return tgt

2. Repeat-Until-Success Protocol

@guppy
def rus(q: Qubit, tries: int) -> Qubit:
    for _ in range(tries):
        a, b = h(Qubit()), h(Qubit())
        b, a = cx(b, tdg(a))
        
        if not measure(t(a)):
            discard(b)
            continue
            
        q, b = cx(z(t(q)), b)
        if measure(t(b)):
            break
        q = x(q)
    return q

Compilation Verification

  • All example programs successfully compile to Hugr IR
  • Type checking correctly captures linear type violations
  • Control flow correctly transforms to structured representation

Experimental Results

Language Feature Verification

  1. Type Safety: Linear type system successfully detects quantum programming errors
  2. Expressiveness: Successfully implements complex quantum algorithms (teleportation, RUS protocol)
  3. Python Compatibility: Integrates with Python ecosystem through py() expressions
  4. Compilation Correctness: Generated Hugr IR correctly represents program semantics

Case Studies

  • Quantum Teleportation: Demonstrates conditional control flow based on measurement results
  • RUS Protocol: Demonstrates complex loop and jump logic
  • Network Graph Application: Illustrates practical value of Python interoperability

Quantum Programming Language Comparison

1. Standalone Languages

  • Q#: Supports hybrid quantum algorithms but lacks safety guarantees (uses opaque pointers rather than linear types)
  • Silq: Imperative language with linear types but lower syntactic accessibility

2. Python-Embedded Frameworks

  • Existing Frameworks: Catalyst, Qrisp, Cirq, ProjectQ, Pytket, PyQuil, Qiskit
  • Limitations: Rely on Python interpreter tracing, unable to capture native control flow syntax
  • AutoQASM/blqs: Use AutoGraph for improvements but still limited

3. Functional Quantum Languages

  • Proto-Quipper, QWire, Qimaera: Based on functional programming paradigm
  • Entry Barrier: Less friendly for programmers preferring imperative style

Technical Innovation

  1. First to Support: Pythonic syntax + linear types + complex control flow simultaneously
  2. Static Compilation Approach: Avoids interpreter tracing limitations
  3. Practical Balance: Finds equilibrium between type safety and usability

Conclusions and Discussion

Main Conclusions

  1. Guppy successfully combines Python's ease of use with quantum programming's safety requirements
  2. Linear type system effectively prevents common quantum programming errors
  3. Static compilation to Hugr IR supports efficient optimization and multi-target deployment
  4. Python interoperability maintains ecosystem advantages

Limitations

  1. Type System Complexity: Linear types may present a learning curve for beginners
  2. Feature Completeness: Currently supports only basic quantum gates; lacks advanced features
  3. Python Feature Support: Does not yet support strings, sets, dictionaries, and other types
  4. Linear Reference Mechanism: Unsafe nature of apply method requires better language-level solutions

Future Directions

  1. Extended Type System: Support more Python built-in types and user-defined types
  2. Advanced Quantum Features: Automatic generation of controlled and adjoint versions, automatic uncomputation
  3. Linear References: Design safer local linear suspension mechanisms
  4. Toolchain Refinement: Improve error messages, debugging support, performance optimization

In-Depth Evaluation

Strengths

  1. Strong Innovation: First successful combination of Pythonic syntax and linear types in quantum programming
  2. High Practical Value: Addresses actual pain points in quantum programming
  3. Reasonable Design: Achieves good balance between safety and usability
  4. Advanced Technology: Based on modern compiler techniques and intermediate representations

Weaknesses

  1. Limited Experimental Validation: Primarily verification through examples; lacks large-scale program testing
  2. Missing Performance Evaluation: No data on compilation time, runtime performance, etc.
  3. Insufficient User Studies: Lacks assessment of real user experience
  4. Ecosystem Dependency: Depends on maturity of Hugr IR and TKET compiler

Impact

  1. Academic Contribution: Provides new insights for quantum programming language design
  2. Industrial Value: Potential to become a practical quantum programming tool
  3. Standards Promotion: May influence future quantum programming language standards
  4. Educational Significance: Lowers barriers to quantum programming education

Applicable Scenarios

  1. Quantum Algorithm Research: Suitable for developing and testing new quantum algorithms
  2. Hybrid Computing Applications: Particularly suitable for applications requiring complex control flow
  3. Education and Training: Can be used for quantum programming instruction
  4. Prototype Development: Suitable for rapid prototyping and proof-of-concept

References

This paper cites 27 related references, covering:

  • Quantum programming languages (Q#, Silq, Proto-Quipper, etc.)
  • Python quantum frameworks (Qiskit, Cirq, PyQuil, etc.)
  • Compiler technology (MLIR, LLVM, AutoGraph)
  • Quantum computing theory (linear types, quantum circuit optimization)

Summary: This is a high-quality systems paper proposing innovative quantum programming language design. Although still in early stages, it demonstrates strong technical potential and practical promise. Subsequent work should focus on large-scale validation, performance optimization, and user experience improvement.