|
|
import pytest
|
|
|
import torch
|
|
|
import numpy as np
|
|
|
from quantum_peer_model import QuantumPeerModel
|
|
|
from quantum_circuit import QuantumCircuit
|
|
|
from quantum_topology import ChernSimonsTopology
|
|
|
from quantum_gates import QuantumGate
|
|
|
|
|
|
@pytest.fixture
|
|
|
def model():
|
|
|
return QuantumPeerModel(device="cpu")
|
|
|
|
|
|
@pytest.fixture
|
|
|
def quantum_circuit():
|
|
|
topology = ChernSimonsTopology(depth=3)
|
|
|
return QuantumCircuit(topology)
|
|
|
|
|
|
def test_circuit_initialization(quantum_circuit):
|
|
|
"""Test quantum circuit initialization"""
|
|
|
assert quantum_circuit is not None
|
|
|
assert len(quantum_circuit.gates) > 0
|
|
|
gate_types = {gate.gate_type for gate in quantum_circuit.gates}
|
|
|
required_gates = {"H", "CNOT", "Phase", "X", "Z"}
|
|
|
assert required_gates.issubset(gate_types)
|
|
|
|
|
|
def test_quantum_evolution(quantum_circuit):
|
|
|
"""Test quantum state evolution"""
|
|
|
initial_state = np.zeros(quantum_circuit.topology.dimension)
|
|
|
initial_state[0] = 1
|
|
|
|
|
|
final_state = quantum_circuit.evolve(initial_state)
|
|
|
assert isinstance(final_state, np.ndarray)
|
|
|
assert np.allclose(np.sum(np.abs(final_state) ** 2), 1)
|
|
|
|
|
|
def test_gate_operations():
|
|
|
"""Test individual quantum gates"""
|
|
|
gates = {
|
|
|
"H": QuantumGate("H"),
|
|
|
"X": QuantumGate("X"),
|
|
|
"Z": QuantumGate("Z"),
|
|
|
"Phase": QuantumGate("Phase"),
|
|
|
"CNOT": QuantumGate("CNOT")
|
|
|
}
|
|
|
|
|
|
state = np.array([1, 0])
|
|
|
h_state = gates["H"].apply(state, None)
|
|
|
expected = np.array([1, 1]) / np.sqrt(2)
|
|
|
assert np.allclose(h_state, expected)
|
|
|
|
|
|
x_state = gates["X"].apply(state, None)
|
|
|
assert np.allclose(x_state, np.array([0, 1]))
|
|
|
|
|
|
@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA not available")
|
|
|
def test_model_gpu_support():
|
|
|
"""Test GPU support when available"""
|
|
|
model = QuantumPeerModel(device="cuda")
|
|
|
assert model.llm_interface.model.device.type == "cuda"
|
|
|
response = model.generate("Test prompt")
|
|
|
assert isinstance(response, str)
|
|
|
|
|
|
def test_topology_scaling():
|
|
|
"""Test topology scaling with different depths"""
|
|
|
depths = [2, 3, 4]
|
|
|
for depth in depths:
|
|
|
topology = ChernSimonsTopology(depth)
|
|
|
assert topology.dimension == 2 ** depth
|
|
|
assert len(topology.connections) == (depth * (depth - 1)) // 2
|
|
|
|
|
|
def test_model_generation(model):
|
|
|
"""Test text generation with quantum enhancement"""
|
|
|
prompt = "Explain quantum computing in"
|
|
|
response = model.generate(
|
|
|
prompt,
|
|
|
max_length=50,
|
|
|
quantum_params={"gates": ["H", "CNOT"]}
|
|
|
)
|
|
|
assert isinstance(response, str)
|
|
|
assert len(response) > len(prompt) |