Files
lucidia-core/quantum/qnn.py
Alexa Louise 6afdb4b148 Initial extraction from blackroad-prism-console
Lucidia Core - AI reasoning engines for specialized domains:
- Physicist (867 lines) - energy modeling, force calculations
- Mathematician (760 lines) - symbolic computation, proofs
- Geologist (654 lines) - terrain modeling, stratigraphy
- Engineer (599 lines) - structural analysis, optimization
- Painter (583 lines) - visual generation, graphics
- Chemist (569 lines) - molecular analysis, reactions
- Analyst (505 lines) - pattern recognition, insights
- Plus: architect, researcher, mediator, speaker, poet, navigator

Features:
- FastAPI wrapper with REST endpoints for each agent
- CLI with `lucidia list`, `lucidia run`, `lucidia api`
- Codex YAML configurations for agent personalities
- Quantum engine extensions

12,512 lines of Python across 91 files.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 08:00:53 -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,
)