Modes¶
Overview¶
The modes subsystem describes the structure of optical modes used throughout the simulation framework.
A central design principle is the separation between:
mode structure: how a field is distributed in time, frequency, polarization, and space
quantum state: photon number, amplitudes, and entanglement
The modes package models only the first.
In the library, an optical mode is described by two complementary layers:
Envelopes — temporal and spectral structure
labels — discrete identifiers such as
PathandPolarization
Together, these define how modes overlap and interfere, while quantum states operate on top of this structure.
Physical motivation¶
A single photon in one optical channel can be described by
where
\(\mathcal{H}_{\mathrm{env}} = L^2(\mathbb{R}, \mathbb{C})\) describes temporal or spectral profiles,
\(\mathcal{H}_{\mathrm{pol}} = \mathbb{C}^2\) describes polarization.
In this library:
the envelope subsystem models \(\mathcal{H}_{\mathrm{env}}\),
polarization and path are represented as mode labels,
quantum states (Fock space, amplitudes, entanglement) are handled separately.
Multi-photon states are constructed from these single-photon modes, but the modes package itself defines only the basis structure.
Structure of a mode¶
An optical mode in the library is identified by a composite label
where
\(p\) is the
Path\(\pi\) is the
Polarization\(\zeta\) is the
BaseEnvelope
The overlap between two modes factorizes as
This factorization determines distinguishability and interference behavior.
Minimal example¶
from symop.modes.envelopes import GaussianEnvelope
from symop.modes.labels.mode import ModeLabel
from symop.modes.labels.path import Path
from symop.modes.labels.polarization import Polarization
mode = ModeLabel(
path=Path("A"),
polarization=Polarization.H(),
envelope=GaussianEnvelope(omega0=10.0, sigma=1.0, tau=0.0, phi0=0.0),
)
print(mode.signature)
('mode_label', ('path', 'A'), ('pol', 1.0, 0.0, 0.0, 0.0), ('gauss', 10.0, 1.0, 0.0, 0.0))