random.py
random_unitary
Sample a Haar-random unitary
Constructs a complex Ginibre matrix
py
def random_unitary(n: int) -> pt.TensorImplementation
python
def random_unitary(n: int) -> pt.Tensor:
l = pt.from_numpy(np.random.randn(n, n))
r = pt.from_numpy(np.random.randn(n, n))
Z = (l + 1j * r).to(C128)
Q, R = pt.linalg.qr(Z)
phases = pt.tensor([R[i, i] / pt.abs(R[i, i]) for i in range(n)], dtype=C128)
A = pt.diag(phases)
return Q @ Arandom_state
Sample a Haar-random pure state
Draws a Haar unitary
py
def random_state(n: int) -> pt.TensorImplementation
python
def random_state(n: int) -> pt.Tensor:
U = random_unitary(n)
vec = pt.eye(n, dtype=C128)
vec = vec[int(np.random.randint(0, n))]
vec = U @ vec
vec = vec / pt.linalg.norm(vec)
return vec.to(C128)