Files
blackroad-operating-system/packs/research-lab/quantum/lucidia_quantum/qnn.py
Alexa Louise 0108860bff feat: Add Research Lab pack with paralleled math modules
Create comprehensive research-lab pack structure with mathematical
and quantum computing modules from blackroad-prism-console:

Math Modules:
- hilbert_core.py: Hilbert space symbolic reasoning
- collatz/: Distributed Collatz conjecture verification
- linmath/: Linear mathematics C library
- lucidia_math_forge/: Symbolic proof engine
- lucidia_math_lab/: Experimental mathematics

Quantum Modules:
- lucidia_quantum/: Quantum core
- quantum_engine/: Circuit simulation

Experiments:
- br_math/: Gödel gap, quantum experiments

Includes pack.yaml manifest and comprehensive README.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 23:49:03 -06:00

59 lines
1.7 KiB
Python

"""Helper builders for Qiskit EstimatorQNN and SamplerQNN."""
from __future__ import annotations
from typing import Optional
from qiskit import QuantumCircuit
from qiskit.circuit import ParameterVector
from qiskit_machine_learning.neural_networks import EstimatorQNN, SamplerQNN
from .backends import AerCPUBackend, QuantumBackend
def build_estimator_qnn(
feature_map: QuantumCircuit,
ansatz: QuantumCircuit,
observable: QuantumCircuit | None,
input_size: int,
weight_size: int,
backend: Optional[QuantumBackend] = None,
) -> EstimatorQNN:
"""Construct an :class:`EstimatorQNN` with gradients enabled."""
backend = backend or AerCPUBackend()
input_params = ParameterVector("x", length=input_size)
weight_params = ParameterVector("w", length=weight_size)
return EstimatorQNN(
feature_map=feature_map,
ansatz=ansatz,
observable=observable,
input_params=input_params,
weight_params=weight_params,
backend=backend.simulator,
input_gradients=True,
)
def build_sampler_qnn(
feature_map: QuantumCircuit,
ansatz: QuantumCircuit,
input_size: int,
weight_size: int,
num_classes: int,
backend: Optional[QuantumBackend] = None,
) -> SamplerQNN:
"""Construct a probabilistic :class:`SamplerQNN`."""
backend = backend or AerCPUBackend()
input_params = ParameterVector("x", length=input_size)
weight_params = ParameterVector("w", length=weight_size)
return SamplerQNN(
feature_map=feature_map,
ansatz=ansatz,
input_params=input_params,
weight_params=weight_params,
output_shape=num_classes,
backend=backend.simulator,
)