PostSelect
- class perceval.utils.postselect.PostSelect(str_repr=None)
PostSelect is a callable post-selection intended to filter out unwanted output states. It is designed to be a user-friendly description of any post-selection logic.
- Parameters:
str_repr (
Optional
[str
]) – string representation of the selection logic. The format is: “cond_1 & cond_2 & … & cond_n” where cond_i is “[mode list] <operator> <photon count>” (supported operators are ==, > and <)
Example:
>>> ps = PostSelect("[0,1] == 1 & [2] > 1") # Means "I want exactly one photon in mode 0 or 1, and at least one photon in mode 2" >>> ps = PostSelect().eq([0,1], 1).gt(2, 1) # Same as above >>> print(ps(BasicState([0, 1, 1]))) True >>> print(ps(BasicState([1, 1, 1]))) False
- __call__(state)
PostSelect is callable, with a post_select(BasicState) -> bool signature. Returns True if the input state validates all conditions, returns False otherwise.
- Return type:
bool
- apply_permutation(perm_vector, first_mode=0)
Apply a given permutation on the conditions.
- Parameters:
perm_vector (
List
[int
]) – Permutation vector to apply (as returned by PERM.perm_vector)first_mode (
int
) – First mode of the permutation to apply (default 0)
- Returns:
A PostSelect with the permutation applied
- can_compose_with(modes)
Check if all conditions are compatible with a compisition on given modes
- Parameters:
modes (
List
[int
]) – Modes used in the composition- Return type:
bool
- Returns:
True if the composition is allowed without mixing conditions, False otherwise
- clear()
Clear all existing conditions
- eq(indexes, value)
Create a new “equals” condition for the current PostSelect instance
- gt(indexes, value)
Create a new “greater than” condition for the current PostSelect instance
- property has_condition: bool
Returns True if at least one condition is defined
- lt(indexes, value)
Create a new “lower than” condition for the current PostSelect instance