예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
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)
예제 #4
0
    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)
예제 #5
0
    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))
예제 #6
0
    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)
예제 #7
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