mirror of
https://github.com/blackboxprogramming/lucidia.git
synced 2026-03-17 02:57:11 -05:00
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from __future__ import annotations
|
|
from dataclasses import dataclass
|
|
import random
|
|
|
|
@dataclass
|
|
class Qubit:
|
|
"""
|
|
Represents a single qubit that can be measured in the computational basis.
|
|
|
|
Attributes
|
|
----------
|
|
alpha : complex
|
|
Amplitude for the |0> state.
|
|
beta : complex
|
|
Amplitude for the |1> state.
|
|
"""
|
|
alpha: complex
|
|
beta: complex
|
|
|
|
def measure(self) -> int:
|
|
"""
|
|
Measure this qubit and collapse it to either |0> or |1>.
|
|
|
|
The probability of obtaining 0 is |alpha|^2 and the probability of obtaining 1 is |beta|^2.
|
|
After measurement, the qubit collapses to the observed basis state.
|
|
|
|
Returns
|
|
-------
|
|
int
|
|
0 if the outcome is |0>, 1 if the outcome is |1>.
|
|
"""
|
|
p_zero = abs(self.alpha)**2
|
|
rnd = random.random()
|
|
if rnd < p_zero:
|
|
# Collapse to |0>
|
|
self.alpha, self.beta = 1+0j, 0+0j
|
|
return 0
|
|
else:
|
|
# Collapse to |1>
|
|
self.alpha, self.beta = 0+0j, 1+0j
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Demonstration: measure a qubit multiple times
|
|
import math
|
|
# Normalized state |psi> = sqrt(0.36)|0> + sqrt(0.64)|1>
|
|
amp0 = math.sqrt(0.36)
|
|
amp1 = math.sqrt(0.64)
|
|
q = Qubit(alpha=amp0, beta=amp1)
|
|
print("Measuring the qubit five times (state is reset each time):")
|
|
for _ in range(5):
|
|
q2 = Qubit(alpha=amp0, beta=amp1)
|
|
print(q2.measure())
|