def test_high_photon(self): """Test if function raises a ``ValueError`` if ``photon_number`` is so high that it cannot correspond to a sample given the constraints of ``max_count_per_mode`` and ``modes``""" with pytest.raises(ValueError, match="No valid samples can be generated."): similarity.event_to_sample(5, 1, 4)
def get_event_probability_mc(self, event: tuple, samples: int = 1000): """ Calculate approximate probability of the event with Monte Carlo. Similar to function sfs.prob_event_mc() :param event: a specification of an event. Tuple of length 2 :param samples: number of Monte Carlo samples. :return: the mc approximate probability of the given event """ photons, max_photons_per_mode = event prob = 0 for _ in range(samples): sample = sfs.event_to_sample(photons, max_photons_per_mode, self.mode_count) prob += self.get_probability(sample) prob = prob * sfs.event_cardinality(photons, max_photons_per_mode, self.mode_count) / samples return prob
def test_sample_max_count(self, photon_num, modes_dim, count): """Test if function returns a sample that has maximum element not exceeding ``count``.""" samp = similarity.event_to_sample(photon_num, count, modes_dim) assert max(samp) <= count
def test_sample_sum(self, photon_num, modes_dim, count): """Test if function returns a sample that has the correct number of photons.""" samp = similarity.event_to_sample(photon_num, count, modes_dim) assert sum(samp) == photon_num
def test_sample_length(self, photon_num, modes_dim, count): """Test if function returns a sample that is of correct length ``modes_dim``.""" samp = similarity.event_to_sample(photon_num, count, modes_dim) assert len(samp) == modes_dim
def test_low_count(self): """Test if function raises a ``ValueError`` if ``max_count_per_mode`` is negative.""" with pytest.raises(ValueError, match="Maximum number of photons"): similarity.event_to_sample(2, -1, 5)