SAX Models API¶
sax
¶
SAX models of planar anisotropic stacks and executed payloads.
Models return SDict s over top@p, top@s, bottom@p and
bottom@s, keyed (in, out), from :func:hyperbolic_optics.bcm.stack_smatrix.
SAX itself is not imported (it pins JAX below 0.10). See the SAX user guide.
Functions:
-
sdict–SAX's
SDictfor a :class:~hyperbolic_optics.bcm.PlanarSMatrix:(in, out)keys. -
planar_model–A SAX model of a planar stack.
-
structure_smatrix–The four-port S-matrix of an executed payload, on its scenario grid.
-
structure_sdict–SAX's
SDictfor an executed payload, values on its grid[A, B, F, T].
sdict
¶
SAX's SDict for a :class:~hyperbolic_optics.bcm.PlanarSMatrix: (in, out) keys.
Source code in hyperbolic_optics/integrations/sax.py
planar_model
¶
A SAX model of a planar stack.
Parameters:
-
layers(Sequence[tuple[Material, Any]]) –(material, thickness_um)from the top down. A material is a number, a 3×3 tensor in the lab frame, or a callablewavelength_um → ε(for dispersion, e.g.lambda wl: dispersion.at_wavelength("hBN", wl)). -
eps_top, eps_bottom–The half-spaces (real, positive, isotropic), as numbers or callables of the wavelength.
-
doublings(int, default:DEFAULT_DOUBLINGS) –Doublings per layer (see :data:
hyperbolic_optics.bcm.DEFAULT_DOUBLINGS).
Returns:
-
Callable[..., dict[tuple[str, str], ndarray]]–model(wl=1.55, kx=0.0, azimuth=0.0) -> SDict.azimuth(radians) -
Callable[..., dict[tuple[str, str], ndarray]]–turns every layer about the stack normal, as the payload API's
-
Callable[..., dict[tuple[str, str], ndarray]]–rotationZdoes; the plane of incidence stays x-z.
Source code in hyperbolic_optics/integrations/sax.py
structure_smatrix
¶
The four-port S-matrix of an executed payload, on its scenario grid.
Structure.execute computes the response to light from the incident side
only: 8 of the 16 entries. A SAX circuit also needs light arriving from
below, so the whole matrix is built here from the executed structure's own
layer tensors and thicknesses, with the JAX solver (which matches the NumPy
engine to ~1e-14). Its incident-side entries are the engine's r and t,
scaled by √(kz_out / kz_in).
Parameters:
-
structure–A :class:
~hyperbolic_optics.structure.Structureafterexecute, ending in aSemi Infinite Isotropic Layer.
Returns:
-
PlanarSMatrix–class:
~hyperbolic_optics.bcm.PlanarSMatrixwithsshaped -
PlanarSMatrix–[A, B, F, T, 4, 4]: the canonical axes (incident angle, azimuth, -
PlanarSMatrix–frequency, swept thickness), each of size 1 where the scenario does not
-
PlanarSMatrix–sweep it. The azimuth is already in the tensors, and
kxcomes from -
PlanarSMatrix–the incident angle in the prism.
Source code in hyperbolic_optics/integrations/sax.py
structure_sdict
¶
SAX's SDict for an executed payload, values on its grid [A, B, F, T].
SAX combines S-matrices elementwise, so these arrays compose with any other
model evaluated on the same grid (same wavelengths, same kx). Wrap it
as a SAX model with lambda: structure_sdict(structure).