Repository navigation
GOCHARA_DATE_DERIVED_STANDARD
Implementation boundary: 6 October 2026. This product derives a complete seven-classical-body snapshot from a birth instant and a transit instant. The Gochar snapshot standard continues to own Phaladeepika baseline, indications, ordinary Vedha, exemptions and raw BAV context. Dated windows and ingress searches remain a separate open product.
moira/gochara_dated.py owns astronomical input composition, immutable epoch
receipts and optional same-birth raw BAV derivation. It delegates judgment to
gochara_from_positions and gochara_subsystem_profile; it adds no verses,
planetary participants, alternative references or strength score.
The existing source-collated Phaladeepika fixture remains authoritative for the judgment rules. Optional BAV reuses the existing Moira encoding of B. V. Raman, Ashtakavarga System of Prediction (1981). This is a named additional table convention, not a claim that the Phaladeepika scan establishes those particular rekha rows. Edition reconciliation and treatment of four rekhas remain outside this package. The owning Ashtakavarga standard identifies that encoding and its existing validation boundary.
Astronomy uses the installed planetary reader, Moira's canonical apparent planetary pipeline and reader-bound clock reduction. JPL identifies planetary ephemeris integration time as TDB in its export documentation. The IERS time-scale reference distinguishes civil UTC, Earth rotation UT1 and dynamical time coordinates. No timestamp is silently used interchangeably across these scales.
| Choice | Default | Admitted boundary |
|---|---|---|
ayanamsa_system |
Lahiri |
All twelve named Moira systems. Each epoch has its own TT and offset. |
| Ayanamsa mode |
true, fixed |
Polynomial systems include nutation; live-star systems use the named catalogue anchor at TT. Missing anchors fail, without polynomial fallback. |
| Planetary origin/frame | Apparent geocentric / true ecliptic of date, fixed | Light time, annual aberration, gravitational deflection and nutation enabled. No topocentric or mean-frame switch. |
natal_bav_mode |
OMIT |
COMPUTE_RAW requires GocharaBirthLocation; location without this selection is rejected. |
gochara_policy |
Existing Phaladeepika policy, complete observations required | Existing Vedha and BAV scope choices. Every successful dated calculation actually observes all seven bodies, even if retain-partial is selected. |
COMPUTE_RAW contradicts inner GocharaBavMode.OMIT and is rejected.
Inner REQUIRE_ALL_RAW requires COMPUTE_RAW. No caller BAV tables enter this
product. Without computation, the outer omission choice records that no natal
BAV was generated; the inner evaluator independently records the absence or
omission under its own policy.
The catalogue now has 32 records in the existing sixteen topics. Two new
engine-scope decisions, astronomy.reader_epochs and
bav.natal_raw_raman_1981, describe this compositor. Outer
policy.selected_options exposes the selected composition decisions. Inner
gochara_policy.selected_options still describes the supplied-position
evaluator receiving those derived inputs; its caller is the compositor.
Inputs and policy are checked before reader discovery. Both epochs use the
same reader argument or facade reader, with contextual binding restored on
success and failure. Readers must expose an admitted content-derived
planetary/lunar clock identity. Missing planetary segments, unknown time
identity or missing live anchor resources raise GocharaResourceError.
An uncovered epoch raises GocharaCoverageError. No successful partial
snapshot is substituted for resource failure. No download is performed.
- Validate finite UT1 Julian dates in the bounded representable input domain
[-10000000, 10000000]. Kernel coverage remains independently mandatory. - Bind each UT1 epoch to TT, TDB and its serving DE/LE identity using
_bind_ephemeris_time. Preserve Delta-T source, historical tidal correction, TDB-minus-TT and identity labels. - Derive each true ayanamsa at that epoch's bound TT. Derive all seven tropical longitudes using the explicit reader and that same TT; subtract that epoch's ayanamsa. Preserve tropical input, offset, sidereal longitude and sign.
- If selected, derive geometric birth Lagna using UT1 Earth rotation and TT precession, nutation and obliquity. Use mean obliquity in the equation of equinoxes and true obliquity in horizon/ecliptic geometry. Subtract the natal ayanamsa. Birth latitude excludes the poles; a coincident horizon/ecliptic has no unique Lagna and fails explicitly.
- Accumulate each subject's own raw BAV from the seven natal signs and that
Lagna with
bhinnashtakavarga. Preserve eight named sign inputs, all raw tables and their source label. Apply neither shodhana nor a strength cutoff. - Evaluate transit signs against the natal Moon sign through the existing core and derive its local profiles, summary and directed network.
The private sidereal-time helper evaluates IAU 2006 GMST's equinox polynomial at TT and ERA at UT1, following SOFA/ERFA gmst06. Its equation of equinoxes uses mean obliquity as described by SOFA/ERFA ee00. It retains the existing Moira complementary-term approximation. Existing public one-epoch sidereal-time behavior is preserved; this is a separate private two-scale composition entry point.
GocharaEpoch and GocharaDateResult are frozen. Clock receipts, seven-body
cardinality, named frames, source labels and policy compatibility are checked;
all sidereal positions, BAV, judgments and profiles derive from their retained
inputs. Derived fields cannot be passed into constructors. Direct vessel
construction validates structural consistency, not binary SPK authenticity.
Use the factory or facade to derive reader-backed observations. Identity labels
identify the serving integration, not a cryptographic hash of every SPK leg.
The following eleven names share object identity through moira,
moira.facade and moira.vedic:
| Surface | Meaning |
|---|---|
GocharaNatalBavMode |
Omit or compute raw natal BAV |
GocharaDatePolicy, DEFAULT_GOCHARA_DATE_POLICY
|
Astronomical composition policy |
GocharaBirthLocation |
Finite geographic birth latitude/longitude |
GocharaDatedPosition, GocharaEpoch
|
Retained tropical input, sidereal reduction and clock/frame receipt |
GocharaDateResult |
Natal/transit epochs, optional Lagna/BAV provenance and derived subsystem profile |
GocharaResourceError, GocharaCoverageError
|
Distinct resource and epoch-coverage failures |
gochara_at, gochara_for_datetimes
|
Explicit UT1 or aware civil-instant composition |
Moira.gochara_at and Moira.gochara_for_datetimes delegate with the instance
reader. Bare dates and naive civil times are rejected. Civil instants use
jd_from_datetime then utc_to_ut1 exactly once per epoch, under the existing
Moira leap-second/Earth-rotation policy. Equivalent timezone offsets identify
the same instant. Returned epoch receipts preserve the astronomical coordinates
actually used. The original civil-zone representation is not retained.
from datetime import datetime, timezone
from moira import Moira, GocharaDatePolicy, GocharaNatalBavMode, GocharaBirthLocation
m = Moira() # Uses the installed kernel discovery contract.
r = m.gochara_for_datetimes(
datetime(1990, 1, 1, tzinfo=timezone.utc),
datetime(2026, 10, 6, tzinfo=timezone.utc),
policy=GocharaDatePolicy(natal_bav_mode=GocharaNatalBavMode.COMPUTE_RAW),
birth_location=GocharaBirthLocation(28.6139, 77.209),
)
assert r.profile.snapshot.missing_planets == ()
assert len(r.profile.snapshot.bhinna) == 7An existing chart's birth instant can be used through the same epoch/civil entry points. Arbitrary chart position dictionaries are not certified as matching this frame or correction regime. A transit instant before birth is allowed as a retrospective comparison; no forecast interpretation is inferred.
POST /v1/gochara/from-epochs and POST /v1/gochara/from-datetimes expose the
same startup-bound facade and typed result. The
REST standard defines their request and failure
contracts. Eight Gochar routes are now discoverable under classical-vedic,
including the separately owned bounded window product
added on 11 October 2026. The two snapshot payloads and their policy meanings
remain unchanged. The private natal builder is shared so window composition
derives its fixed natal/BAV context once per request.
The validation receipt records the executed source-fixture, clock/oracle, reader-isolation, raw BAV, frozen-vessel, REST and installed-DE441 checks. These prove bounded composition and transport behavior. They do not certify every named ayanamsa against an external tradition, independently re-audit Raman editions, demonstrate predictive accuracy, or imply website adoption, release or deployment.