Source code for toqito.state_ops.normalize
"""Normalize quantum state vectors."""
from typing import Sequence
import numpy as np
[docs]
def normalize(vector: Sequence[complex] | np.ndarray, *, tol: float = 1e-8) -> np.ndarray:
r"""Return a normalized copy of the input state vector.
The input may be a one-dimensional array or a column/row vector. A zero vector raises `ValueError`.
Examples:
```python exec="1" source="above"
import numpy as np
from toqito.state_ops import normalize
v = np.array([1, 1], dtype=np.complex128)
print(normalize(v))
```
Raises:
ValueError: If the input is not vector-shaped or has vanishing norm.
Args:
vector: State vector expressed as a 1D array or column/row vector.
tol: Numerical tolerance used to detect zero-norm inputs.
Returns:
Normalized vector as a 1D NumPy array.
"""
array = np.asarray(vector, dtype=np.complex128)
if array.ndim == 1:
flattened = array
elif array.ndim == 2 and 1 in array.shape:
flattened = array.reshape(-1)
else:
raise ValueError("normalize expects a vector or column/row matrix input.")
norm = np.linalg.norm(flattened)
if np.isclose(norm, 0.0, atol=tol):
raise ValueError("Cannot normalize a zero vector.")
return flattened / norm