Astrophysical scene modeling for HWO direct imaging
Project description
skyscapes
JAX-native astrophysical scene modeling for HWO direct imaging.
What skyscapes is
skyscapes provides the scene representation that downstream HWO
simulation tools consume — a forward model that runs at variable
fidelity, from analytic sandbox models for fast iteration up to
research-grade physics for retrievals. High-fidelity scene generators
like ExoVista feed into
skyscapes through loaders (from_exovista); skyscapes does not try to
replace them.
- A
Sceneis "everything on the sky that the telescope sees" — oneSystem(a star with planets and optionally a disk) plus optional background sources (zodiacal light, background galaxies, etc.). - Source models (
Star,Planet,Disk, physical models, backgrounds) are composableeqx.Modules — swap any one without touching the rest, or swap the whole class for a higher-fidelity variant. - Loaders bridge external simulation outputs (ExoVista FITS) into the
workspace via
from_exovista(...).
The same Scene flows through both the
coronagraphoto image
simulator and the jaxEDITH
ETC, so the astrophysical content is consistent across all downstream
science products.
What skyscapes is not
- Not a radiative transfer engine. The
ExoJaxPhysicalModelis a thin adapter over ExoJAX; skyscapes does not implement its own RT. - Not an orbit propagator. Orbital mechanics live in
orbix;
Planetcomposes anAbstractOrbitrather than reimplementing one. - Not a simulator. Downstream tools
(coronagraphoto,
jaxEDITH) consume a
Sceneto produce images / count rates.
Ecosystem position
flowchart LR
src["External sources<br/>ExoVista · spectra · catalogues"]
sky(["<b>skyscapes</b><br/>Scene · System · Star · Planet · Disk · Zodi · PhysicalModel"])
opt["<b>optixstuff</b><br/>OpticalPath"]
cor["<b>coronagraphoto</b><br/>2D image simulation"]
jet["<b>jaxedith</b><br/>Scalar count rates"]
src --> sky
sky --> cor
sky --> jet
opt --> cor
opt --> jet
Architecture
A Scene composes a System (star + planets + optional disk) with an
optional Zodi background:
- Stars —
Star(wavelength- and time-dependent spectrum, ExoVista- backed) andFlatStar(constant-flux sandbox). - Planets —
Planetowns intrinsic params (Rp_Rearth,Mp_Mearth) and composes anAbstractOrbit(from orbix) with anAbstractPhysicalModel. - Physical models —
LambertianPhysicalModel,GridPhysicalModel(interpolated contrast cubes, used by ExoVista loader),PrecomputedPhysicalModel(cached reflectivity for hot loops), andExoJaxPhysicalModel(full 2-stream RT via ExoJAX). - Disks —
ExovistaDisk,ExovistaParametricDisk,GraterDisk,CompositeDisk. - Backgrounds —
AYOZodi(AYO-convention defaults),LeinertZodi(full position-dependent Leinert+1998),PrecomputedZodi(cached flux array).
Every leaf is an eqx.Module PyTree, so JAX transforms (jit, vmap,
grad) compose end-to-end.
Quick start
The easiest path is loading an ExoVista FITS file:
from skyscapes import from_exovista
scene = from_exovista("path/to/exovista_system.fits")
Building one from scratch:
import jax.numpy as jnp
from orbix.system.orbit import KeplerianOrbit
from skyscapes import Scene, System
from skyscapes.scene import FlatStar, Planet
from skyscapes.physical_model import LambertianPhysicalModel
from skyscapes.background import AYOZodi
star = FlatStar(
Ms_kg=1.989e30,
dist_pc=10.0,
flux_phot_per_nm_m2=1e9,
)
orbit = KeplerianOrbit(
a_AU=jnp.array([1.0]),
e=jnp.array([0.0]),
W_rad=jnp.array([0.0]),
i_rad=jnp.array([jnp.pi / 3]),
w_rad=jnp.array([0.0]),
M0_rad=jnp.array([0.0]),
t0_d=jnp.array([0.0]),
)
physical_model = LambertianPhysicalModel(Ag=jnp.array([0.3]))
planet = Planet(
Rp_Rearth=jnp.array([1.0]),
Mp_Mearth=jnp.array([1.0]),
orbit=orbit,
physical_model=physical_model,
)
zodi = AYOZodi(
wavelengths_nm=jnp.linspace(400, 1000, 60),
surface_brightness_mag=22.0,
)
scene = Scene(
system=System(star=star, planets=(planet,)),
zodi=zodi,
)
Installation
pip install skyscapes
Status
This package is in early development.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skyscapes-1.0.2.tar.gz.
File metadata
- Download URL: skyscapes-1.0.2.tar.gz
- Upload date:
- Size: 61.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a09fcc83e96eb4b6670ea464d4c48ac41974931324006f631b1588a3c0a5e39
|
|
| MD5 |
fb85a15af96af39a685bb03a5e8d105d
|
|
| BLAKE2b-256 |
2c6ebaa40476813fe746a8e3ee48809ef7782929b614ff4b5c723368fb001cfb
|
Provenance
The following attestation bundles were made for skyscapes-1.0.2.tar.gz:
Publisher:
publish-to-pypi.yml on CoreySpohn/skyscapes
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skyscapes-1.0.2.tar.gz -
Subject digest:
1a09fcc83e96eb4b6670ea464d4c48ac41974931324006f631b1588a3c0a5e39 - Sigstore transparency entry: 1631315921
- Sigstore integration time:
-
Permalink:
CoreySpohn/skyscapes@e9f4649afdb947b127777f340628f991ac0c355d -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/CoreySpohn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@e9f4649afdb947b127777f340628f991ac0c355d -
Trigger Event:
push
-
Statement type:
File details
Details for the file skyscapes-1.0.2-py3-none-any.whl.
File metadata
- Download URL: skyscapes-1.0.2-py3-none-any.whl
- Upload date:
- Size: 77.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
902fe3e967188aef9c5c08dbc6c2c07dbd06ba3b3a25f7bc6689639bdade7838
|
|
| MD5 |
41e92a5a43854b8bee50c25efc0f94b3
|
|
| BLAKE2b-256 |
a09a044482d02474cecc25b68b17b62f5696f43fa9a06f20c641010fecd2c337
|
Provenance
The following attestation bundles were made for skyscapes-1.0.2-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on CoreySpohn/skyscapes
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skyscapes-1.0.2-py3-none-any.whl -
Subject digest:
902fe3e967188aef9c5c08dbc6c2c07dbd06ba3b3a25f7bc6689639bdade7838 - Sigstore transparency entry: 1631315925
- Sigstore integration time:
-
Permalink:
CoreySpohn/skyscapes@e9f4649afdb947b127777f340628f991ac0c355d -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/CoreySpohn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@e9f4649afdb947b127777f340628f991ac0c355d -
Trigger Event:
push
-
Statement type: