"""Quantum state vectors

The quantum state of :math:`n` quantum bits is represented as a 1D array of complex
numbers of length :math:`2^n`; the components of the state vector in the
computational basis.

The computational basis for :math:`n` qubits is ordered by the number represented
by the associated classical bitstring.

import numpy as np

__all__ = ["from_classical"]  # type: ignore

def from_classical(bitstring):
    """Return a quantum state corresponding to a classical bitstring.

    bitstring : sequence of bits
        Can be a string like "01011", or a sequence of

    state : ndarray[(2**n,), complex]
        The state vector in the computational basis.
        Has :math:`2^n` components.

    bitstring = "".join(map(str, bitstring))
    n_qubits = len(bitstring)
        index = int(bitstring, base=2)
    except ValueError:
        raise ValueError("Input is not a classical bitstring") from None

    state = np.zeros(1 << n_qubits, dtype=complex)
    state[index] = 1
    return state