def test_invalid_n_mean(self): """Test if function raises a ``ValueError`` when the mean photon number is specified to be negative.""" g = nx.complete_graph(10) with pytest.raises(ValueError, match="Mean photon number must be non-negative"): similarity.prob_orbit_mc(g, [1, 1, 1, 1], n_mean=-1)
def test_invalid_samples(self): """Test if function raises a ``ValueError`` when a number of samples less than one is requested.""" g = nx.complete_graph(10) with pytest.raises(ValueError, match="Number of samples must be at least one"): similarity.prob_orbit_mc(g, [1, 1, 1, 1], samples=0)
def test_invalid_loss(self): """Test if function raises a ``ValueError`` when the loss parameter is specified outside of range.""" g = nx.complete_graph(10) with pytest.raises( ValueError, match="Loss parameter must take a value between zero and"): similarity.prob_orbit_mc(g, [1, 1, 1, 1], loss=2)
def test_loss(self, monkeypatch): """Test if function correctly creates the SF program for lossy GBS.""" graph = nx.complete_graph(5) mock_eng_run = mock.MagicMock() with monkeypatch.context() as m: m.setattr(sf.LocalEngine, "run", mock_eng_run) similarity.prob_orbit_mc(graph, [1, 1, 1, 1], samples=1, loss=0.5) p_func = mock_eng_run.call_args[0][0] assert isinstance(p_func.circuit[1].op, sf.ops.LossChannel)
def test_all_loss(self, monkeypatch): """Test if function samples from the vacuum when maximum loss is applied.""" dim = 5 graph = nx.complete_graph(dim) mock_eng_run = mock.MagicMock() with monkeypatch.context() as m: m.setattr(sf.LocalEngine, "run", mock_eng_run) similarity.prob_orbit_mc(graph, [1, 1, 1, 1], samples=1, loss=1) p_func = mock_eng_run.call_args[0][0] eng = sf.LocalEngine(backend="gaussian") state = eng.run(p_func).state cov = state.cov() disp = state.displacement() assert np.allclose(cov, 0.5 * state.hbar * np.eye(2 * dim)) assert np.allclose(disp, np.zeros(dim))
def test_mean_computation_orbit(self, monkeypatch): """Tests if the calculation of the sample mean is performed correctly. The test monkeypatches the fock_prob function so that the probability is the same for each sample and is equal to 1/5, i.e., one over the number of samples in the orbit [1,1,1,1] for 5 modes.""" graph = nx.complete_graph(5) with monkeypatch.context() as m: m.setattr( "strawberryfields.backends.gaussianbackend.GaussianState.fock_prob", lambda *args, **kwargs: 0.2, ) assert np.allclose(similarity.prob_orbit_mc(graph, [1, 1, 1, 1]), 1.0)
def test_prob_vacuum_orbit(self): """Tests if the function gives the right probability for the empty orbit when the GBS device has been configured to have zero mean photon number.""" graph = nx.complete_graph(10) assert similarity.prob_orbit_mc(graph, [], 0) == 1.0