Skip to content

forbidden_transition

qoptcraft.invariant.forbidden_transition

Check if a transition violates the necessary criterion of the invariant conservation.

forbidden_transition(state_in, state_out, method='basis', print_invariant=True)

Check if we cannot transition from an input state to an output state through an optical network.

Parameters:

Name Type Description Default
state_in State

input state of the optical circuit.

required
state_out State

desired output state of the optical circuit.

required
method str

method to calculate the invariant. Options are 'reduced', 'full', 'basis'. Default is 'basis'.

'basis'

Returns:

Name Type Description
bool bool

True if the transition is forbidden. True if it is not.

Source code in qoptcraft/invariant/forbidden_transition.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def forbidden_transition(
    state_in: State,
    state_out: State,
    method: Literal["reduced", "no basis", "basis"] = "basis",
    print_invariant: bool = True,
) -> bool:
    """Check if we cannot transition from an input state to an output state
    through an optical network.

    Args:
        state_in (State): input state of the optical circuit.
        state_out (State): desired output state of the optical circuit.
        method (str): method to calculate the invariant. Options are 'reduced',
            'full', 'basis'. Default is 'basis'.

    Returns:
        bool: True if the transition is forbidden. True if it is not.
    """
    if method == "basis":
        return forbidden_transition_basis(state_in, state_out, print_invariant=print_invariant)
    if not isinstance(state_in, PureState) or not isinstance(state_out, PureState):
        raise ValueError("Non pure states only accept method basis.")
    if method == "reduced":
        return forbidden_transition_reduced(state_in, state_out, print_invariant=print_invariant)
    if method == "no basis":
        return forbidden_transition_no_basis(state_in, state_out, print_invariant=print_invariant)
    raise ValueError("Options for 'method' are 'reduced', 'no basis' or 'basis'.")

forbidden_transition_basis(state_in, state_out, print_invariant=True)

Check if we cannot transition from an input state to an output state through an optical network.

Note

This criterion is necessary, but not sufficient. Even if the transition doesn't violate the criterion (True output), a unitary may not exist.

Parameters:

Name Type Description Default
state_in State

input state of the optical circuit.

required
state_out State

desired output state of the optical circuit.

required

Returns:

Name Type Description
bool bool

True if the transition is forbidden. True if it is not.

Source code in qoptcraft/invariant/forbidden_transition.py
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
def forbidden_transition_basis(
    state_in: State, state_out: State, print_invariant: bool = True
) -> bool:
    """Check if we cannot transition from an input state to an output state
    through an optical network.

    Note:
        This criterion is necessary, but not sufficient. Even if the transition
        doesn't violate the criterion (`True` output), a unitary may not exist.

    Args:
        state_in (State): input state of the optical circuit.
        state_out (State): desired output state of the optical circuit.

    Returns:
        bool: True if the transition is forbidden. True if it is not.
    """
    assert state_in.photons == state_out.photons, "Number of photons don't coincide."
    assert state_in.modes == state_out.modes, "Number of modes don't coincide."

    in_invariant = photon_invariant_basis(state_in)
    out_invariant = photon_invariant_basis(state_out)

    if print_invariant:
        print(f"In invariant = {in_invariant:.7f} \t Out invariant = {out_invariant:.7f}")
    return not np.isclose(in_invariant, out_invariant)

forbidden_transition_no_basis(state_in, state_out, print_invariant=True)

Check if we cannot transition from an input state to an output state through an optical network. Calculations are done without a basis of the Hilbert space, so they are faster and more efficient.

Note

This criterion is necessary, but not sufficient. Even if the transition doesn't violate the criterion (True output), a unitary may not exist.

Parameters:

Name Type Description Default
state_in State

input state of the optical circuit.

required
state_out State

desired output state of the optical circuit.

required

Returns:

Name Type Description
bool bool

True if the transition is forbidden. True if it is not.

Source code in qoptcraft/invariant/forbidden_transition.py
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
def forbidden_transition_no_basis(
    state_in: PureState, state_out: PureState, print_invariant: bool = True
) -> bool:
    """Check if we cannot transition from an input state to an output state
    through an optical network. Calculations are done without a basis of the Hilbert space,
    so they are faster and more efficient.

    Note:
        This criterion is necessary, but not sufficient. Even if the transition
        doesn't violate the criterion (`True` output), a unitary may not exist.

    Args:
        state_in (State): input state of the optical circuit.
        state_out (State): desired output state of the optical circuit.

    Returns:
        bool: True if the transition is forbidden. True if it is not.
    """
    assert state_in.photons == state_out.photons, "Number of photons don't coincide."
    assert state_in.modes == state_out.modes, "Number of modes don't coincide."

    in_invariant = photon_invariant_no_basis(state_in)
    out_invariant = photon_invariant_no_basis(state_out)
    if print_invariant:
        print(f"In full invariant = {in_invariant:.7f} \t Out full invariant = {out_invariant:.7f}")
    return not np.isclose(in_invariant, out_invariant)

forbidden_transition_reduced(state_in, state_out, print_invariant=True)

Check if we cannot transition from an input state to an output state through an optical network. Calculations are done with the reduced invariant, which is faster and more efficient.

Note

This criterion is necessary, but not sufficient. Even if the transition doesn't violate the criterion (True output), a unitary may not exist.

Parameters:

Name Type Description Default
state_in State

input state of the optical circuit.

required
state_out State

desired output state of the optical circuit.

required

Returns:

Name Type Description
bool bool

True if the transition is forbidden. True if it is not.

Source code in qoptcraft/invariant/forbidden_transition.py
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def forbidden_transition_reduced(
    state_in: PureState, state_out: PureState, print_invariant: bool = True
) -> bool:
    """Check if we cannot transition from an input state to an output state
    through an optical network. Calculations are done with the reduced invariant,
    which is faster and more efficient.

    Note:
        This criterion is necessary, but not sufficient. Even if the transition
        doesn't violate the criterion (`True` output), a unitary may not exist.

    Args:
        state_in (State): input state of the optical circuit.
        state_out (State): desired output state of the optical circuit.

    Returns:
        bool: True if the transition is forbidden. True if it is not.
    """
    assert state_in.photons == state_out.photons, "Number of photons don't coincide."
    assert state_in.modes == state_out.modes, "Number of modes don't coincide."

    in_invariant = photon_invariant_reduced(state_in)
    out_invariant = photon_invariant_reduced(state_out)

    if print_invariant:
        print(
            f"In reduced invariant = {in_invariant:.7f}"
            f"\t Out reduced invariant = {out_invariant:.7f}"
        )
    return not np.isclose(in_invariant, out_invariant)