Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
): # add cutoff for consistency pylint: disable=unused-argument
r"""Returns samples from a Gaussian state that has a positive :math:`P` function.
Args:
cov(array): a :math:`2N\times 2N` ``np.float64`` covariance matrix
representing an :math:`N` mode quantum state. This can be obtained
via the ``scovmavxp`` method of the Gaussian backend of Strawberry Fields.
samples (int): number of samples to generate
mean (array): vector of means of the gaussian state
hbar (float): the value of :math:`\hbar` in the commutation
relation :math:`[\x,\p]=i\hbar`.
sigdigits (integer): precision to check that the covariance matrix is a true covariance matrix of a gaussian state.
Returns:
np.array[int]: photon number samples from the Gaussian state with covariance cov and vector means mean.
"""
if not is_classical_cov(cov, hbar=hbar, atol=atol):
raise ValueError("Not a classical covariance matrix")
(n, _) = cov.shape
if mean is None:
mean = np.zeros([n])
else:
if mean.shape != (n,):
raise ValueError("mean and cov do not have compatible shapes")
R = np.random.multivariate_normal(mean, cov - 0.5 * hbar * np.identity(n), samples)
N = n // 2
alpha = (1.0 / np.sqrt(2 * hbar)) * (R[:, 0:N] + 1j * R[:, N : 2 * N])
samples = np.random.poisson(np.abs(alpha) ** 2)
return samples
r"""Returns samples from a Gaussian state that has a positive :math:`P` function.
Args:
cov(array): a :math:`2N\times 2N` ``np.float64`` covariance matrix
representing an :math:`N` mode quantum state. This can be obtained
via the ``scovmavxp`` method of the Gaussian backend of Strawberry Fields.
samples (int): number of samples to generate
mean (array): vector of means of the gaussian state
hbar (float): the value of :math:`\hbar` in the commutation
relation :math:`[\x,\p]=i\hbar`.
sigdigits (integer): precision to check that the covariance matrix is a true covariance matrix of a gaussian state.
Returns:
np.array[int]: photon number samples from the Gaussian state with covariance cov and vector means mean.
"""
if not is_classical_cov(cov, hbar=hbar, atol=atol):
raise ValueError("Not a classical covariance matrix")
(n, _) = cov.shape
if mean is None:
mean = np.zeros([n])
else:
if mean.shape != (n,):
raise ValueError("mean and cov do not have compatible shapes")
R = np.random.multivariate_normal(mean, cov - 0.5 * hbar * np.identity(n), samples)
N = n // 2
alpha = (1.0 / np.sqrt(2 * hbar)) * (R[:, 0:N] + 1j * R[:, N : 2 * N])
samples = np.random.poisson(np.abs(alpha) ** 2)
return samples