skyscapes.scene#

Scene hierarchy: AbstractStar + Planet + System + Scene wiring.

Submodules#

Classes#

Scene

Field-of-view container: planetary system + named background sources.

Planet

Composed planet: intrinsic params + orbit dynamics + physical-model physics.

AbstractStar

Abstract stellar source.

FlatStar

Flat-spectrum star -- constant flux independent of wavelength or time.

Star

Time- and wavelength-dependent star backed by an interpax 2D spline.

System

Astrophysical scene: star + tuple of planets + optional disk.

Package Contents#

class skyscapes.scene.Scene[source]#

Bases: equinox.Module

Field-of-view container: planetary system + named background sources.

Attributes:

system: The planetary system (star + planets + disk). zodi: Optional zodiacal-light background (any

skyscapes.background zodi variant).

system: skyscapes.scene.system.System#
zodi: skyscapes.background.Zodi | None = None#
property star#

Convenience accessor for the host star.

property planets#

Convenience accessor for the planet tuple.

property disk#

Convenience accessor for the system’s disk (may be None).

__repr__()[source]#

Tree-shaped summary of the contained system + zodi.

Return type:

str

class skyscapes.scene.Planet[source]#

Bases: equinox.Module

Composed planet: intrinsic params + orbit dynamics + physical-model physics.

All stellar-context-dependent methods take a star keyword argument rather than holding a reference internally. This keeps System as the single source of truth for the host star.

Attributes:

Rp_Rearth: Planet radius [Earth radii], shape (K,). Mp_Mearth: Planet mass [Earth masses], shape (K,). orbit: Orbital dynamics (trajectory parameterization). physical_model: Spectral physics (reflectivity / emission).

Rp_Rearth: jaxtyping.Array#
Mp_Mearth: jaxtyping.Array#
orbit: orbix.system.orbit.AbstractOrbit#
physical_model: skyscapes.physical_model.AbstractPhysicalModel#
property n_planets: int#

Number of planets K carried by this composed module.

Return type:

int

mean_anomaly(t_jd, *, star)[source]#

Mean anomaly mod 360 [deg], shape (K, T).

t_jd must be shape (T,) – no rank polymorphism. Callers that hold a scalar should wrap it in jnp.asarray([t]) at the call site.

Parameters:
Return type:

jaxtyping.Array

propagate(trig_solver, t_jd, *, star)[source]#

Delegate to orbit.propagate; returns (r_AU, phase_rad, dist_AU).

Parameters:
position_arcsec(trig_solver, t_jd, *, star)[source]#

On-sky position, shape (2, K, T) – (dRA, dDec) in arcsec.

Parameters:
Return type:

jaxtyping.Array

alpha_dMag(trig_solver, t_jd, *, star, wavelength_nm=600.0)[source]#

Projected separation [arcsec] and delta-mag, each (K, T).

For LambertianPhysicalModel (grey), the chosen wavelength_nm is irrelevant and the output matches orbix.Planets.alpha_dMag by construction. For GridPhysicalModel / future wavelength- dependent models, dMag is evaluated at wavelength_nm; pick a value within the model’s spectral grid.

Parameters:
Return type:

tuple[jaxtyping.Array, jaxtyping.Array]

contrast(trig_solver, wavelength_nm, t_jd, *, star)[source]#

Planet-to-star contrast at (wavelength, time), shape (K, T).

Parameters:
Return type:

jaxtyping.Array

spec_flux_density(trig_solver, wavelength_nm, t_jd, *, star)[source]#

Planet flux density [ph/s/m^2/nm], shape (K, T).

Parameters:
Return type:

jaxtyping.Array

__repr__()[source]#

Nested summary: planet count + intrinsic params + orbit + physical_model.

Return type:

str

class skyscapes.scene.AbstractStar[source]#

Bases: equinox.Module

Abstract stellar source.

Attributes:

Ms_kg: Stellar mass in kilograms. dist_pc: Distance to the star in parsecs.

Ms_kg: equinox.AbstractVar[float]#
dist_pc: equinox.AbstractVar[float]#
abstractmethod spec_flux_density(wavelength_nm, time_jd)[source]#

Return spectral flux density in ph/s/m^2/nm.

Parameters:
  • wavelength_nm (jaxtyping.Array)

  • time_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

class skyscapes.scene.FlatStar[source]#

Bases: AbstractStar

Flat-spectrum star – constant flux independent of wavelength or time.

Ms_kg: float#
dist_pc: float#
flux_phot_per_nm_m2: float#
spec_flux_density(wavelength_nm, time_jd)[source]#

Constant flux, broadcast to wavelength_nm’s shape.

time_jd is part of the AbstractStar interface but ignored here.

Parameters:
  • wavelength_nm (jaxtyping.Array)

  • time_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

__repr__()[source]#

Compact one-line summary of mass, distance, and flux.

Return type:

str

class skyscapes.scene.Star(*, Ms_kg, dist_pc, wavelengths_nm, times_jd, flux_density_jy, ra_deg=0.0, dec_deg=0.0, diameter_arcsec=0.0, luminosity_lsun=1.0)[source]#

Bases: AbstractStar

Time- and wavelength-dependent star backed by an interpax 2D spline.

Parameters:
  • Ms_kg (float)

  • dist_pc (float)

  • wavelengths_nm (jaxtyping.Array)

  • times_jd (jaxtyping.Array)

  • flux_density_jy (jaxtyping.Array)

  • ra_deg (float)

  • dec_deg (float)

  • diameter_arcsec (float)

  • luminosity_lsun (float)

Ms_kg: float#
dist_pc: float#
ra_deg: float#
dec_deg: float#
diameter_arcsec: float#
luminosity_lsun: float#
_wavelengths_nm: jaxtyping.Array#
_times_jd: jaxtyping.Array#
_flux_density_phot: jaxtyping.Array#
_flux_interp: interpax.Interpolator2D#
spec_flux_density(wavelength_nm, time_jd)[source]#

Scalar or array spectral flux density [ph/s/m^2/nm].

Parameters:
  • wavelength_nm (jaxtyping.Array)

  • time_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

__repr__()[source]#

One-line summary of metadata + wavelength/time grid extent.

Return type:

str

class skyscapes.scene.System[source]#

Bases: equinox.Module

Astrophysical scene: star + tuple of planets + optional disk.

Attributes:

star: Host star (AbstractStar). planets: Variable-length tuple of Planet. trig_solver: Scalar Kepler-trig solver (static; see

orbix.kepler.shortcuts.grid.get_grid_solver). Required – callers must provide a built solver, not None.

disk: Optional extended-source disk (AbstractDisk | None). midplane_inc_deg: System midplane inclination [deg] in the

barycentric -> sky frame. Default 0.0 means “midplane = sky” and is intentionally indistinguishable from a real face-on system at this inclination; this ambiguity is acceptable because the field is diagnostic-only after load (no runtime hot path consults it). Populated by io.from_exovista from the FITS star header. After load, frame rotation has already been baked into each Planet’s orbital elements.

midplane_pa_deg: System midplane position angle [deg]. Same

semantics as midplane_inc_deg.

star: skyscapes.scene.star.AbstractStar#
planets: tuple[skyscapes.scene.planet.Planet, Ellipsis]#
trig_solver: collections.abc.Callable#
disk: skyscapes.disk.AbstractDisk | None = None#
midplane_inc_deg: float = 0.0#
midplane_pa_deg: float = 0.0#
property n_planets: int#

Total number of planets across all composed Planet modules.

Return type:

int

positions(t_jd)[source]#

Concatenated on-sky positions, shape (2, K_total, T).

Parameters:

t_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

contrasts(wavelength_nm, t_jd)[source]#

Per-planet contrast, shape (K_total, T).

Parameters:
  • wavelength_nm (jaxtyping.Array)

  • t_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

planet_flux_densities(wavelength_nm, t_jd)[source]#

Per-planet flux density [ph/s/m^2/nm], shape (K_total, T).

Parameters:
  • wavelength_nm (jaxtyping.Array)

  • t_jd (jaxtyping.Array)

Return type:

jaxtyping.Array

alpha_dMag(t_jd)[source]#

Per-planet projected separation + dMag, each shape (K_total, T).

Parameters:

t_jd (jaxtyping.Array)

Return type:

tuple[jaxtyping.Array, jaxtyping.Array]

__repr__()[source]#

Tree-shaped summary: star + planets + disk + midplane geometry.

Return type:

str