Skip to content

random.py

random_unitary

Sample a Haar-random unitary UU(n).

Constructs a complex Ginibre matrix Z and returns the Q factor of Z=QR with diagonal phase correction QQdiag(Rii/|Rii|).

py
def random_unitary(n: int) -> pt.Tensor
Implementation
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 @ A

random_state

Sample a Haar-random pure state |ψCn.

Draws a Haar unitary U and applies it to a uniformly chosen computational basis vector, then normalizes.

py
def random_state(n: int) -> pt.Tensor
Implementation
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)