Files
lucidia-main/quantum/q_algorithms.py
blackboxprogramming 6e36a6feeb Update q_algorithms.py
2025-08-08 14:04:06 -07:00

81 lines
2.0 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from typing import Tuple
import math
import cmath
@dataclass
class Qubit:
"""
A simple representation of a qubit for algorithm demonstrations.
Attributes
----------
alpha : complex
Amplitude of the |0> basis state.
beta : complex
Amplitude of the |1> basis state.
"""
alpha: complex
beta: complex
def normalize(self) -> None:
"""
Normalize the qubit so that |alpha|^2 + |beta|^2 = 1.
"""
norm = math.sqrt(abs(self.alpha)**2 + abs(self.beta)**2)
if norm == 0:
raise ValueError("Cannot normalize a zero vector.")
self.alpha /= norm
self.beta /= norm
def hadamard(qubit: Qubit) -> Qubit:
"""
Apply the Hadamard gate to a single qubit.
The Hadamard transform creates superposition: H|0> = (|0> + |1>)/sqrt(2), H|1> = (|0> - |1>)/sqrt(2).
Parameters
----------
qubit : Qubit
The input qubit to transform.
Returns
-------
Qubit
A new qubit after applying the Hadamard gate.
"""
inv_sqrt2 = 1.0 / math.sqrt(2)
new_alpha = inv_sqrt2 * (qubit.alpha + qubit.beta)
new_beta = inv_sqrt2 * (qubit.alpha - qubit.beta)
return Qubit(alpha=new_alpha, beta=new_beta)
def phase_shift(qubit: Qubit, theta: float) -> Qubit:
"""
Apply a phase shift gate to the |1> component of a qubit.
Parameters
----------
qubit : Qubit
The input qubit.
theta : float
Phase angle in radians.
Returns
-------
Qubit
A new qubit with the |1> component phase-shifted.
"""
return Qubit(alpha=qubit.alpha, beta=qubit.beta * cmath.exp(1j * theta))
if __name__ == "__main__":
# Example: apply Hadamard to |0> and then a phase shift of π/2
q0 = Qubit(alpha=1+0j, beta=0+0j)
hq = hadamard(q0)
print("After Hadamard:", hq)
pq = phase_shift(hq, math.pi / 2)
print("After phase shift (\u03c0/2):", pq)