TKS Jyotiṣa — methods & definitions

For each output: what the number means, the coordinate frame, the formula or rule, the source, and the variant that was chosen. Everything below was read off the running code (file names in brackets), revised 2026-10-08 after an external review — where a choice is a limitation or a known inconsistency, it is stated as such rather than dressed up. Three rules are applied throughout: every number has a definition, every rule has a source, every result has a stated uncertainty.

1 Chart counts2 Kernels3 True Chitrāpakṣa4 Time & sidereal time5 Sunrise6 Daśā year7 Bhāva-cālita8 Kāla graph9 Uncertainty10 Open items

1 · How many varga charts

The page shows 25 charts = D1 (Rāśi) + the “TKS 24-varga set” (varga::CHARTS). This set is not a classical group: it is the 15 remaining BPHS ṣoḍaśa-varga charts plus 9 extensions. The 16 Parāśarī ṣoḍaśa-varga (BPHS ch. 6) are D1 D2 D3 D4 D7 D9 D10 D12 D16 D20 D24 D27 D30 D40 D45 D60. The 9 extensions are labelled as such on the page: D5, D6, D8, D11 (divisional charts outside the sixteen), and the composite / fine divisions D81 (D9 of D9), D108 (D9×D12), D144 (D12 of D12), D150 (nāḍyāṃśa) and D300. Custom D-N (N = 1…300) is a uniform N-fold division.

D60 — two conventions. TKS numbers the sixty 30′-parts of a rāśi starting from Meṣa (the sign index is the part number mod 12). Most published translations and most software count from the occupied sign instead. Both are in circulation; which one a given BPHS edition intends depends on how its ch. 6 verses on D60 are read, and this page does not claim that either is “literal”. The chosen variant is printed on the chart; a switch is an open item (§10). Edition/verse references for each divisional rule are listed in the validation notes (Validation); a full per-rule verse table is an open item.

2 · Ephemeris kernels — whose files are these?

All four kernels are JPL (NASA Jet Propulsion Laboratory) Development Ephemeris files, produced and published by JPL (DE440/DE441: Park et al. 2021, AJ 161, 105). TKS does not generate planetary ephemerides. What is TKS’s own: (a) the independent DAF/SPK reader and Chebyshev evaluator that reads these files, and (b) the whole apparent-place reduction on top (light-time, deflection, aberration, frame bias, IAU 2006 / Vondrák precession, IAU 2000B nutation) and everything downstream (ayanāṃśa, sunrise, daśā …). TKS’s separate N-body integrator (“Engine B”) is not used by the Jyotiṣa pages.

Kernel (file)ProducerUsed forCoverage
DE440 (de440.bsp)JPLfirst choice wherever it covers the instant≈ 1550 – 2650 CE
DE441 (de441.bsp)JPLautomatically outside DE440’s range−13,200-05-06 … +17,191-03-15 (≈ 30,390 yr)
DE440s / DE421JPLfall-back onlyshorter spans

Selection is by the first kernel in the list whose coverage contains the instant (Kernels::active_for); the active kernel is returned in every /v1/tks/ephemeris response (kernel.active). Checked: 1700 CE → DE440; 1500, −3000 and +3000 CE → DE441. The full −13,200…+17,191 span is available to enterprise keys only; the free tier is 1950–2050.

Size of the seam (DE441 − DE440, apparent geocentric ecliptic longitude, each kernel read alone; examples/kernel_seam.rs):

YearMoon ″Sun ″Mars ″
1560 (≈ lower seam, 1550)+0.3160.0000.000
1700+0.0800.0000.000
2000+0.00050.0000.000
2300+0.0200.0000.000
2640 (≈ upper seam, 2650)+0.0550.0000.000

So the jump when the engine switches kernels is ≈ 0.3″ at 1550 and ≈ 0.06″ at 2650 for the Moon (≈ 0.6 s and 0.1 s of lunar motion) and zero for the Sun and planets — the planetary solution is common to both files; the difference is the lunar orbit (DE441 omits the lunar-core damping that DE440 includes).

3 · True Chitrāpakṣa ayanāṃśa

Definition. A(t) = λ(Spica, ecliptic of date, t) − 180° — the ayanāṃśa that keeps Spica (Citrā) at exactly 180° nirayana at every instant. [tks-ephemeris/src/ayanamsa.rs]

ItemChoice
Star / catalogueα Vir, HIP 65474, Hipparcos original reduction (CDS I/239), epoch J1991.25: RA 201.29835230°, Dec −11.16124491°
Proper motionμα* = −42.50, μδ = −31.73 mas/yr, applied linearly from J1991.25 (Julian years of TT). Freezing it (no PM) is available as a research control; the proper-motion contribution is ≈ 50 mas/yr along the ecliptic, i.e. ≈ 0.14° per 10,000 yr.
Parallax, light deflectionnot applied to the star. Annual aberration is also not applied — this is a choice, see “Two variants” below.
Binary nature of SpicaSpica is a close spectroscopic binary (P ≈ 4.0 d). The catalogue position is used as is; the photocentre wobble (of order 1 mas) is far below the 1″ display precision and is not modelled.
FrameICRS → frame bias + IAU 2006 precession (Fukushima–Williams) + IAU 2000B nutation (77-term, ERFA nut00b) → true ecliptic of date; beyond |T| = 10 Julian centuries the Vondrák (2011) long-term precession is blended in (full weight at ±3000 yr). So the value is a “true” (nutation-included) ayanāṃśa.
“Apparent” vs “mean”True (includes Δψ). A mean-equinox variant is obtained by subtracting Δψ; Swiss SIDM_TRUE_CITRA comparison below is therefore made with Swiss with nutation.

Two variants: geometric (TKS) and apparent (Swiss)

TKS defines the ayanāṃśa from Spica’s geometric direction (no aberration): A = λ★(true ecliptic of date) − 180°. Swiss Ephemeris SIDM_TRUE_CITRA uses Spica’s apparent place, which includes annual aberration, Δλ★ ≈ −20.50″·cos(λ☉ − λ★). Because the Sun–Spica angle changes through the year, the TKS − Swiss difference is not a steady offset — it swings between about +20″ and −20″ over a year:

Date (12:00 UT)TKS − Swiss TRUE_CITRA, measured ″Predicted by aberration ″Residual ″
2026-01-01+4.72+4.66+0.06
2026-04-01−19.95−20.01+0.07
2026-07-01−5.06−5.14+0.08
2026-10-01+19.77+19.71+0.06
2000-01-01 … 2000-10-01+4.84 · −20.02 · −4.85 · +19.84+4.77 · −20.06 · −4.92 · +19.77+0.05 … +0.07

After removing aberration the two agree to ≈ 0.07″ in every sample. So the earlier “steady +4.5…5.1″ offset” was an artefact of comparing at the same calendar date (1 January) each year — the aberration phase was always the same. Attribution settled: the offset is annual aberration, not a different Spica position or proper motion. Neither variant is “wrong”: both are published implementations. Which to use: geometric (TKS) is the choice for a smooth, date-independent ayanāṃśa; apparent (Swiss) reproduces an observer’s Spica at that instant. An apparent variant (adding the aberration term above) is a small addition and is listed as an open item (§10); it would move rāśi/nakṣatra flip times by ≲ 40 s (Moon, ±20″ / 0.55″ per s).

Comparison with Lahiri (arc-seconds; Swiss Ephemeris 2.10 with nutation, 1 Jan each year; measured 2026-10-07):

YearTKS true Citrā °TKS Lahiri model °TKS − Lahiri ″TKS-Lahiri − Swiss LAHIRI ″
195023.14266523.157700−54.1−0.48
197523.49713123.512324−54.7−0.91
200023.83749023.853067−56.1−0.56
202524.19035024.206145−56.9−0.78
205024.54350524.559645−58.1−0.62
TKS true Citrā and the official Lahiri differ by ≈ 55–58″ ≈ 0.9′ today. This is a definition gap (Lahiri was fixed in 1955 from the star positions then adopted), not an error.

Lahiri model. The ICRC value that Swiss SIDM_LAHIRI encodes is 23°15′00.658″ (23.250182778°) on 1956-03-21 (JD 2435553.5), a mean ayanāṃśa. The TKS Lahiri line is a polynomial matched to Swiss and includes nutation (i.e. it is a true ayanāṃśa); against Swiss-with-nutation it agrees to ≲ 1″ (last column). Comparing it with a mean-ayanāṃśa value would show up to ±17″ of apparent difference — that is Δψ, not a model error. Beyond 1800–2200 the Lahiri line follows the long-term precession instead of the quadratic.

4 · Time scales, ΔT and sidereal time

5 · Sunrise (and everything that hangs on it)

Definition: the instant when the geometric centre of the apparent Sun (TKS apparent place, true equinox of date, topocentric hour angle from GAST) is at altitude −0.833° = semi-diameter 0.267° + standard refraction 0.566°. That equals the upper limb touching the horizon with standard refraction; it ignores observer elevation (no horizon dip) and local pressure/temperature. [tks_panchanga.rs · sunrise_sunset_jd0_eph] Method: altitude scan every 2 min, then 40 bisection steps (numerical resolution ≪ 1 s).

How much the convention matters. Near the horizon the Sun’s altitude changes by ≈ 15°·cos φ per hour (≈ 13°/h at 30° N). Hence:

AlternativeAltitude differenceShift of sunrise at 30° N
Disc centre at 0° (no refraction, no semi-diameter) — used by some Sūrya-siddhānta practice0.833°≈ 3.8 min at the equinoxes, up to ≈ 4.3 min at the solstices
Disc centre at −0.566° (refraction only) vs upper limb0.267°≈ 1.2 min
Observer elevation h m (dip ≈ 1.76′·√h)e.g. 1000 m ⇒ ≈ 0.9°≈ 4 min earlier at 1000 m on a clear eastern horizon (hill stations)

So a vāra-flip “uncertain window” must be ≈ ±4 min, not ±1 min, if the disc-centre convention is to be treated as admissible. It is used for: vāra (the day changes at sunrise), the tithi / nakṣatra / yoga / karaṇa prevailing at sunrise, ghaṭī, dinamāna/rātrimāna, hora and the sunrise-anchored muhūrta day. Only the upper-limb convention is offered today (§10).

6 · Daśā year length

Vimśottarī and the other daśās convert years to days with a single constant of 365.2425 days (dasha.rs · SIDEREAL_YEAR_DAYS). That is the Gregorian mean year; the constant is named “sidereal” in the code but its value is not the sidereal year (365.25636 d). The three common alternatives and the shift they cause over a full 120-year Vimśottarī cycle:

Year definitionDaysShift vs 365.2425 over 120 yr
Tropical / Gregorian mean (used)365.24250
Julian365.25+0.9 d
Sidereal365.25636+1.6 d
Sāvana (360 d)360−630 d (≈ 1.7 yr)
Nakṣatra year, 12 × 27 days324−4,949 d
Nakṣatra year, 12 nakṣatra-months (12 × 27.3217 d)327.86−4,486 d

So 365.25 / 365.25636 only move antardaśā boundaries by a day or two; the 360-day sāvana year moves late-life daśā dates by months to ~1.7 yr. A user-selectable year length is not yet implemented (§10); until it is, daśā dates should be read as “Gregorian-mean-year” dates.

7 · Bhāva-cālita (Śrīpati)

Rule (bhava_chalit.rs, following Rāṣṭriya Saṃskṛta Saṃsthāna 9.3.4; the primary source is Śrīpati’s Śrīpatipaddhati — the verse reference is an open item, §10). The lagna is the madhya of bhāva 1 and the daśama (MC) the madhya of bhāva 10; the 4th madhya is MC + 180°, the 7th lagna + 180°. The arc lagna → 4th is divided into six equal parts of size s, the arc 4th → 7th into six parts of size s₂. Because each bhāva spans two parts: the madhyas of bhāvas 1, 2, 3, 4 lie 2s apart (L, L+2s, L+4s, L+6s = 4th), and the sandhis (bhāva boundaries) lie at the odd parts L+s, L+3s, L+5s — the midpoints between successive madhyas. Likewise 4→7 with s₂. Bhāvas 8–12 are the opposites (+180°). A graha belongs to the bhāva whose sandhi-to-sandhi arc holds its longitude.

In house-system terms this is a Porphyry trisection used for the madhyas: the Porphyry method trisects each quadrant (Asc→IC, IC→Dsc, …) and takes the trisection points as cusps (house starts); Śrīpati takes the same trisection points as bhāva-madhya and puts the sandhis halfway between them. So Śrīpati’s sandhi cusps are the midpoints of Porphyry’s cusps.
SystemDifference
Whole-sign (Rāśi chart)bhāva = rāśi counted from the lagna rāśi; no sandhi.
Equal house from lagnacusps at lagna + 30°·k; Śrīpati keeps the same lagna and MC but stretches/shrinks houses so that the MC is exactly a madhya.
Placidus / KPtime-based semi-arc trisection (not an ecliptic-longitude trisection); fails beyond the polar circles; KP uses Placidus cusps with its sub-lord table. Not computed here.

MC/lagna in the TKS path come from lagna_dashama_nirayana (GAST, true obliquity, true Chitrāpakṣa). The fixed ε = 24° constant in dashama_from_ramc belongs to the legacy (non-TKS) path only and is not used for TKS charts.

8 · Kāla graph / “Kāla forecast”

These panels combine existing deterministic outputs (daśā lords, transits, ṣadbala-type scores, aṣṭakavarga) into Opportunity, Resistance and Net = Opportunity − Resistance along a time axis. They are computational summaries of the rules the page already shows, not predictions, and carry no statistical validation of outcomes. “Kāla forecast” therefore means “a list of favourable-/unfavourable-by-rule time windows for a chosen activity”; it is labelled Kāla-sūcī (rule-based window list) on the page. The weights are the page’s own and are shown with each point’s cause chain.

9 · Stated uncertainty

QuantityTypical uncertaintyDominant source
Planet longitude, tropical (DE kernel + apparent-place reduction)milliarcsecond levellight-time, deflection, aberration, precession/nutation model (IAU 2000B ≈ 1 mas)
Planet longitude, nirayanatropical error ⊕ the ayanāṃśa choice: geometric vs apparent Citrā differ by up to ±20.5″; TKS vs Lahiri by ≈ 56″§3 — every graha inherits the ayanāṃśa uncertainty
Moon longitude0.55″ per second of ΔT / UT1 error; no ΔT model error in 1972–2026 (exact TT − UTC)§4
Sunrise±3.8–4.3 min between disc-centre and upper-limb conventions; up to ≈ 4 min more for elevation; refraction not modelled§5
ΔT (before 1972)sub-second (1800s) … tens of seconds (1500) … minutes–hours (antiquity)SMH2016 fit
Lagnathe ascendant moves ≈ 10–25″ per second of clock time at Indian latitudes (30° N: long-ascension signs such as Kanyā/Tulā ≈ 2 h 40 m ⇒ ≈ 11″/s; short ones such as Mīna/Meṣa ≈ 1 h 20 m ⇒ ≈ 22″/s). DUT1 ≤ 0.9 s ignored ⇒ up to ≈ 20″birth-time accuracy; DUT1
Tithi / nakṣatra / yoga end timesfollow the Moon: 1 s of ΔT ≈ 1 s; a ±20″ ayanāṃśa variant moves a nakṣatra end by ≈ 36 s (Moon 0.55″/s); a 5″ choice ≈ 9 s. Milliseconds printed are display precision, not accuracy§3, §4
Daśā start balance (Vimśottarī)one nakṣatra = 13°20′ = 48,000″. An ayanāṃśa difference ε″ shifts the balance by ε/48000 of the first daśā: ±5″ ⇒ ≈ ±0.8 d for a 20-yr Śukra daśā; ±20″ (aberration swing) ⇒ ≈ ±3 d; TKS vs Lahiri (56″) ⇒ ≈ 8.5 d§3

Boundary rule: whenever a result sits within its stated uncertainty of a rule boundary (a rāśi/nakṣatra/varga cusp, a sunrise-dependent vāra flip, a limit such as the 1° sandhi), read it as “either side”. The page does not yet flag such cases automatically (§10). Not yet covered at all: the historical time-zone / local-mean-time and pre-1947 Indian-time rules (IANA tz, LMT) that decide the UTC instant of an older birth; geodetic-vs-astronomical latitude (vertical deflection, up to ≈ 10″ in hill regions); cross-engine comparison of graha/lagna positions (only the ayanāṃśa is compared today); and a published test-vector set.

10 · Open items (honest list)

  1. Done 2026-10-08: attributed the TKS – Swiss offset (annual aberration, §3); exact TT − UTC for 1972–2026 (§4); one model-consistent GAST everywhere (§4); varga naming (§1); sunrise-shift numbers (§5); Śrīpati wording (§7); kernel seam measured (§2).
  2. Offer an apparent (aberrated) ayanāṃśa variant next to the geometric one; show both when a flip lies between them.
  3. IERS Bulletin-A/B (DUT1, polar motion) for UT1 after 1962; observed ΔT after 2026-01-01 instead of the SMH extension.
  4. Sunrise variants: disc-centre / upper-limb × refraction × elevation dip; report both when a vāra flip lies in the gap.
  5. Selectable daśā year (365.2425 · 365.25 · 365.25636 · 360 · 324 · 327.86), printed with each daśā date. (The 365.2425 constant is named SIDEREAL_YEAR_DAYS in the code but is the Gregorian mean year.)
  6. D60 convention switch (from Meṣa / from the occupied sign) and a verse-and-edition table for every divisional, doṣa and yoga rule.
  7. Śrīpati: cite the Śrīpatipaddhati verse(s) for the madhya/sandhi rule.
  8. Automatic “within-uncertainty” flag on every boundary-dependent output.
  9. Historical civil time (IANA tz, LMT, pre-1947 Indian time); geodetic vs astronomical latitude; published test vectors and cross-engine graha/lagna comparison.
  10. Replace the legacy ε = 24° constant wherever the non-TKS path is still reachable.

Related: Ayanāṃśa comparison · API reference · Validation · Research notes.

संस्करणः bin-1791440110