empyrean.PlanningConfig

class PlanningConfig(force_model=ForceModelTier.STANDARD, epsilon=1e-09, observatories=<factory>, num_threads=0)[source]

Bases: object

Configuration for empyrean.evaluate_plan().

Defaults match PlanningConfig::default() on the Rust side, so a default-constructed config is a no-op across the boundary.

Mirrors empyrean::PlanningConfig.

Methods

__init__([force_model, epsilon, ...])

Attributes

epsilon

Adaptive integrator truncation-error tolerance.

force_model

Force-model tier for the planning propagation.

num_threads

0 = use all available cores.

observatories

Per-site astrometric assumptions.

Parameters:
  • force_model (ForceModelTier)

  • epsilon (float)

  • observatories (list[ObservatoryConfig])

  • num_threads (int)

force_model: ForceModelTier = 'standard'

Force-model tier for the planning propagation. A bare wire string ("approximate" / "basic" / "standard") is accepted and coerced.

epsilon: float = 1e-09

Adaptive integrator truncation-error tolerance.

observatories: list[ObservatoryConfig]

Per-site astrometric assumptions.

Not consulted by empyrean.evaluate_plan(), which reads each optical candidate’s σ from that candidate’s own PlannedObservation and applies engine-set observability filters that no field on this config reaches. Supplying a non-empty list therefore raises ValueError — at construction, and again inside empyrean.evaluate_plan() for a config mutated after construction — rather than being accepted and ignored. The field exists because it is part of the shared planning configuration; it will become live if a surface that reads it is exposed.

num_threads: int = 0

0 = use all available cores.

Not consulted by empyrean.evaluate_plan(), which evaluates one orbit and does not shard the work. Any other value raises ValueError — at construction, and again inside empyrean.evaluate_plan() for a config mutated after construction — rather than being accepted and ignored.