Skip to content

Releases: ATTron/astroz

v0.11.1

11 Mar 16:22
4678989

Choose a tag to compare

What's Changed

Full Changelog: v0.10.0...v0.10.1

v0.10.0

26 Feb 06:26
8b5c5b2

Choose a tag to compare

What's Changed

  • handle different instruction sets for non modern CPUs for SIMD hot paths

Full Changelog: v0.9.0...v0.10.0

v0.9.0

17 Feb 02:18
4d8e449

Choose a tag to compare

v0.9.0

SDP4 Deep-Space Propagator

astroz now handles all cataloged satellites — not just near-earth. GPS, GEO, Molniya, and other deep-space orbits (period > 225 min) are fully supported with SIMD-vectorized SDP4 propagation.

Everything auto-dispatches. Pass any TLE to Satrec.twoline2rv() or Constellation and it just works — SGP4 for near-earth, SDP4 for deep-space, no code changes needed.

What's new:

  • Sdp4.zig / Sdp4Batch.zig — scalar and SIMD SDP4 with lunar/solar perturbations and resonance handling
  • Satellite.zig — unified type that picks SGP4 or SDP4 automatically
  • Constellation.zig — replaces Sgp4Constellation.zig, propagates mixed constellations with threading
  • Satrec.is_deep_space property in Python
  • Satrec.sgp4_array_into() — zero-copy SIMD batch for single satellites (SGP4 and SDP4)
  • New benchmark scripts for JAX CPU/GPU comparisons

Breaking Changes (Zig only)

Python API has no breaking changes.

  • Sgp4Constellation replaced by Constellation
  • Sgp4Batch and simdMath now accessed via Constellation.Sgp4Batch / Constellation.simdMath
  • DragCoefficients no longer stores perige — passed as a parameter instead
  • Several Sgp4 internal types made pub for SDP4 reuse

Fixes

  • Fixed non-compiling benchmarks (#80)
  • CelestialBody constants refactored to use default field values

v0.8.1

12 Feb 20:32
a175ae8

Choose a tag to compare

What's Changed

Full Changelog: v0.8.0...v0.8.1

v0.8.0

07 Feb 20:53
231cae5

Choose a tag to compare

What's New

Numerical Force Models

astroz now includes high fidelity force models for orbit propagation, all implementing a
common ForceModel interface:

  • Zonal harmonics: J2, J3, and J4 Earth oblateness perturbations
  • Atmospheric drag: Exponential density model with solar activity scaling
  • Solar radiation pressure: Includes cylindrical Earth shadow model
  • Composite model: Combine multiple force models into a single propagation pipeline

Dormand-Prince 8(7) Adaptive Integrator

A new high order adaptive step size integrator (DormandPrince87) for long duration,
high accuracy propagation. Configurable absolute and relative tolerances, and compatible
with all force models.

CSPICE Integration

Optional NAIF CSPICE bindings (enabled with -Denable-cspice=true) for high precision
planetary ephemeris and leap second handling. Planetary kernels are fetched automatically
at build time.

New Examples

  • conjunction_screening.zig — Collision avoidance screening
  • maneuver_planning.zig — Hohmann transfers with J2 effects
  • constellation_phasing.zig — RAAN drift for Walker constellations
  • spice_propagation.zig — High-precision propagation with CSPICE ephemeris

What's Changed

Full Changelog: v0.7.1...v0.8.0

v0.7.1

02 Feb 09:32

Choose a tag to compare

** Python 3.10 Builder Bug Fix **

v0.7.0

02 Feb 09:25
ecba79e

Choose a tag to compare

What's New

  • python-sgp4 interoperablity: astroz is now a drop in replacement for python-sgp4. Simply change your import line to from astroz and get a 2x speedup! Follow the full migration guide for even more gains up to 100x compared to sgp4.

What's Changed

  • python-sgp4 compatability layer by @ATTron in #70

Full Changelog: v0.6.1...v0.7.0

v0.6.1

30 Jan 05:24
1cdd72d

Choose a tag to compare

What's Changed

Full Changelog: v0.6.0...v0.6.1

v0.6.0

30 Jan 04:24
0befacd

Choose a tag to compare

Breaking Changes

Removed APIs

  • Sgp4 class - Single satellite propagator removed from Python bindings
  • load_constellation() - Backward compatibility alias removed
  • min_distances() - Standalone function removed
  • coarse_screen() - Standalone function removed
  • WGS84 constant - No longer exported

Constellation class changes

  • propagate() method removed from class (now a module-level function)
  • metadata property and with_metadata parameter removed
  • batch_size property removed
  • out parameter for pre-allocated output removed

New API

The Python API is now simplified to two main functions:

  from astroz import Constellation, propagate, screen
  # Parse TLEs once for repeated use
  c = Constellation("starlink")
  # Propagate satellites
  positions = propagate(c, times, start_time=dt, output="ecef")
  positions, velocities = propagate(c, times, velocities=True)
  # Conjunction screening - single target (fastest, fused propagate+screen)
  min_dists, t_indices = screen(c, times, threshold=10.0, target=0)
  # Conjunction screening - all-vs-all
  pairs, t_indices = screen(c, times, threshold=10.0)

Migration Guide

Propagating a constellation:

# Before
c = Constellation("starlink")
positions = c.propagate(times)
# After
c = Constellation("starlink")
positions = propagate(c, times)

Loading a constellation:

# Before
c = load_constellation("starlink")
# After
c = Constellation("starlink")

Conjunction screening:

# Before
positions = c.propagate(times)
pairs = coarse_screen(positions, threshold=10.0)
distances, t_indices = min_distances(positions, pairs)
# After
pairs, t_indices = screen(c, times, threshold=10.0)
Single-target screening:
# Before
positions = c.propagate(times)
pairs = coarse_screen(positions, threshold=10.0)
# ... filter pairs for target ...
# After (faster - fused propagate+screen)
min_dists, t_indices = screen(c, times, threshold=10.0, target=0)

Single satellite propagation:

# Before
sgp4 = Sgp4(tle)
pos, vel = sgp4.propagate(30.0)

# After
positions = propagate(tle_string, [30.0])

What's Changed

Full Changelog: v0.5.0...v0.6.0

v0.5.0

26 Jan 06:16
b88a9f0

Choose a tag to compare

What's Changed

  • feat: 8 wide SIMD by @ATTron in #62
  • deprecation of *V4 in favor of *VN to capture both V4 simd and V8 simd accurately

Full Changelog: v0.4.4...v0.5.0