@essrt/physics 20.0.1 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +4 -4
  2. package/package.json +4 -8
  3. package/src/cardinal/one-source-structure.cjs +3 -2
  4. package/src/chain-cycles/index.cjs +12 -30
  5. package/src/climate/l1-orbital.cjs +3 -1
  6. package/src/constants/coefficients.d.ts +17 -93
  7. package/src/constants/coefficients.js +7 -22
  8. package/src/constants/generated.d.ts +18 -156
  9. package/src/constants/generated.js +33 -168
  10. package/src/deltat/deep-time.cjs +36 -92
  11. package/src/deltat/recession-history.cjs +2 -1
  12. package/src/earth/deep-orbital-history.cjs +4 -4
  13. package/src/earth/frame-of-date.cjs +25 -1
  14. package/src/earth/precession-composed.cjs +3 -3
  15. package/src/earth/year-lengths.cjs +16 -1
  16. package/src/eclipse/sun-planetary-completion.cjs +11 -12
  17. package/src/index.js +28 -48
  18. package/src/layer0/derive-params.js +10 -5
  19. package/src/layer0/index.js +27 -73
  20. package/src/layer1/index.js +6 -37
  21. package/src/model.js +200 -225
  22. package/src/moon/arguments.cjs +57 -83
  23. package/src/moon/deep-modes-artifact.cjs +2 -2
  24. package/src/moon/month-chain.cjs +25 -59
  25. package/src/moon/series.cjs +14 -10
  26. package/src/phase/deep-calendar.cjs +35 -80
  27. package/src/planets/chain-artifact.js +2 -2
  28. package/src/planets/display-names.cjs +30 -0
  29. package/src/planets/geometry.cjs +79 -29
  30. package/src/planets/model.cjs +12 -11
  31. package/src/planets/spin-channel.cjs +46 -2
  32. package/types/chain-cycles/index.d.cts +9 -4
  33. package/types/climate/l1-orbital.d.cts +3 -1
  34. package/types/constants/coefficients.d.ts +17 -93
  35. package/types/constants/generated.d.ts +18 -156
  36. package/types/deltat/deep-time.d.cts +3 -16
  37. package/types/earth/frame-of-date.d.cts +9 -0
  38. package/types/earth/year-lengths.d.cts +12 -0
  39. package/types/eclipse/sun-planetary-completion.d.cts +0 -9
  40. package/types/index.d.ts +4 -13
  41. package/types/layer0/derive-params.d.ts +7 -4
  42. package/types/layer0/index.d.ts +6 -13
  43. package/types/layer1/index.d.ts +0 -2
  44. package/types/model.d.ts +8 -6
  45. package/types/moon/arguments.d.cts +23 -22
  46. package/types/moon/deep-modes-artifact.d.cts +3 -3
  47. package/types/moon/month-chain.d.cts +7 -16
  48. package/types/moon/series.d.cts +2 -4
  49. package/types/phase/deep-calendar.d.cts +14 -50
  50. package/types/planets/display-names.d.cts +2 -0
  51. package/types/planets/geometry.d.cts +36 -13
  52. package/types/planets/model.d.cts +7 -6
  53. package/types/planets/spin-channel.d.cts +4 -0
  54. package/src/cardinal/index.cjs +0 -324
  55. package/src/moon/ecc-channel.cjs +0 -141
  56. package/src/phase/index.cjs +0 -186
  57. package/src/planets/ecc-channel.cjs +0 -59
  58. package/src/sun/longitude-correction.cjs +0 -68
  59. package/types/cardinal/index.d.cts +0 -80
  60. package/types/moon/ecc-channel.d.cts +0 -30
  61. package/types/phase/index.d.cts +0 -38
  62. package/types/planets/ecc-channel.d.cts +0 -20
  63. package/types/sun/longitude-correction.d.cts +0 -41
package/README.md CHANGED
@@ -45,8 +45,8 @@ deep-ecc-channel, month-chain), earth (year-lengths, precession-composed,
45
45
  frame-of-date, sidereal-year-channel, deep-orbital-history), planets
46
46
  (keplerian-chain, orbit-chain, secular-shape, secular-series,
47
47
  inv-plane-frame, spin-channel, ecc-channel, geometry, model), deltat
48
- (cycles, deep-time, recession-history, historical), cardinal points, phase,
49
- chain-cycles, sun, climate and eclipse finders.
48
+ (cycles, deep-time, recession-history, historical), the cardinal structure,
49
+ the deep calendar, chain-cycles, sun, climate and eclipse finders.
50
50
 
51
51
  For rendered display values (day/year lengths, precession rates, orbital
52
52
  elements as preformatted strings), see
@@ -72,9 +72,9 @@ model.lengths.tropicalYearDays(2000); // 365.24219
72
72
  // system — self-identifying, with its own constants hash.
73
73
  const cf = createModel({
74
74
  ...DEFAULT_CONSTANTS,
75
- foundational: { ...DEFAULT_CONSTANTS.foundational, holisticyearLength: 400000 },
75
+ earthOrbital: { ...DEFAULT_CONSTANTS.earthOrbital, obliquityJ2000_deg: 23.5 },
76
76
  });
77
- cf.epoch.hAtYear(2000); // 400000 — the anchor unit (a fit constant, not a period)
77
+ cf.earth.obliquityDeg(2000); // 23.5 — the injected anchor read through the assembly
78
78
  cf.identity.counterfactual; // true
79
79
  ```
80
80
 
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@essrt/physics",
3
- "version": "20.0.1",
3
+ "version": "22.0.0",
4
4
  "description": "ESSRT (Expanding Solar System Resonance Theory) physics core — pure, injectable-constants, no I/O, no globals, no DOM. The complete model incl. fitted coefficients; every published version immutably ships one recorded model identity.",
5
5
  "essrt": {
6
- "modelVersion": "v23.0",
6
+ "modelVersion": "v25.0",
7
7
  "_note": "The model identity this package version ships (IP-unified-architecture §10: package semver tracks the API axis; the model version + CONSTANTS_HASH/COEFFICIENTS_HASH in src/constants/ carry the scientific identity). The version-pinning gate enforces this pairing against public/input/model-version.json."
8
8
  },
9
9
  "type": "module",
@@ -31,11 +31,8 @@
31
31
  ],
32
32
  "exports": {
33
33
  ".": { "types": "./types/index.d.ts", "default": "./src/index.js" },
34
- "./phase": { "types": "./types/phase/index.d.cts", "default": "./src/phase/index.cjs" },
35
34
  "./phase/deep-calendar": { "types": "./types/phase/deep-calendar.d.cts", "default": "./src/phase/deep-calendar.cjs" },
36
- "./cardinal": { "types": "./types/cardinal/index.d.cts", "default": "./src/cardinal/index.cjs" },
37
35
  "./cardinal/one-source-structure": { "types": "./types/cardinal/one-source-structure.d.cts", "default": "./src/cardinal/one-source-structure.cjs" },
38
- "./moon/ecc-channel": { "types": "./types/moon/ecc-channel.d.cts", "default": "./src/moon/ecc-channel.cjs" },
39
36
  "./moon/deep-ecc-channel": { "types": "./types/moon/deep-ecc-channel.d.cts", "default": "./src/moon/deep-ecc-channel.cjs" },
40
37
  "./moon/deep-modes-artifact": { "types": "./types/moon/deep-modes-artifact.d.cts", "default": "./src/moon/deep-modes-artifact.cjs" },
41
38
  "./earth/deep-orbital-history": { "types": "./types/earth/deep-orbital-history.d.cts", "default": "./src/earth/deep-orbital-history.cjs" },
@@ -50,7 +47,6 @@
50
47
  "./moon/series-extension": { "types": "./types/moon/series-extension.d.cts", "default": "./src/moon/series-extension.cjs" },
51
48
  "./moon/apparent": { "types": "./types/moon/apparent.d.cts", "default": "./src/moon/apparent.cjs" },
52
49
  "./planets/geometry": { "types": "./types/planets/geometry.d.cts", "default": "./src/planets/geometry.cjs" },
53
- "./planets/ecc-channel": { "types": "./types/planets/ecc-channel.d.cts", "default": "./src/planets/ecc-channel.cjs" },
54
50
  "./planets/orbit-chain": { "types": "./types/planets/orbit-chain.d.cts", "default": "./src/planets/orbit-chain.cjs" },
55
51
  "./planets/keplerian-chain": { "types": "./types/planets/keplerian-chain.d.cts", "default": "./src/planets/keplerian-chain.cjs" },
56
52
  "./planets/spin-channel": { "types": "./types/planets/spin-channel.d.cts", "default": "./src/planets/spin-channel.cjs" },
@@ -58,14 +54,14 @@
58
54
  "./planets/inv-plane-frame": { "types": "./types/planets/inv-plane-frame.d.cts", "default": "./src/planets/inv-plane-frame.cjs" },
59
55
  "./planets/secular-series": { "types": "./types/planets/secular-series.d.cts", "default": "./src/planets/secular-series.cjs" },
60
56
  "./planets/model": { "types": "./types/planets/model.d.cts", "default": "./src/planets/model.cjs" },
57
+ "./planets/display-names": { "types": "./types/planets/display-names.d.cts", "default": "./src/planets/display-names.cjs" },
61
58
  "./deltat/cycles": { "types": "./types/deltat/cycles.d.cts", "default": "./src/deltat/cycles.cjs" },
62
59
  "./deltat/deep-time": { "types": "./types/deltat/deep-time.d.cts", "default": "./src/deltat/deep-time.cjs" },
63
60
  "./deltat/historical": { "types": "./types/deltat/historical.d.cts", "default": "./src/deltat/historical.cjs" },
64
61
  "./deltat/recession-history": { "types": "./types/deltat/recession-history.d.cts", "default": "./src/deltat/recession-history.cjs" },
65
62
  "./climate/l1-orbital": { "types": "./types/climate/l1-orbital.d.cts", "default": "./src/climate/l1-orbital.cjs" },
66
63
  "./eclipse/finders": { "types": "./types/eclipse/finders.d.cts", "default": "./src/eclipse/finders.cjs" },
67
- "./eclipse/sun-planetary-completion": { "types": "./types/eclipse/sun-planetary-completion.d.cts", "default": "./src/eclipse/sun-planetary-completion.cjs" },
68
- "./sun/longitude-correction": { "types": "./types/sun/longitude-correction.d.cts", "default": "./src/sun/longitude-correction.cjs" }
64
+ "./eclipse/sun-planetary-completion": { "types": "./types/eclipse/sun-planetary-completion.d.cts", "default": "./src/eclipse/sun-planetary-completion.cjs" }
69
65
  },
70
66
  "license": "AGPL-3.0-or-later"
71
67
  }
@@ -31,8 +31,9 @@
31
31
  * DELIBERATELY NOT HERE: absolute event dates. They need a mean-sun
32
32
  * crossing chain, which is a per-renderer concern (the measured ±2–13 min
33
33
  * twin-stack split between the browser scene and the Step-6a instrument);
34
- * the era-certified absolute dates remain the frozen harmonic device
35
- * (createCardinalModel — the certified era clock).
34
+ * the shipped absolute dates are the one Sun's apparent crossings,
35
+ * createModel().cardinal (plan 06 R1; the frozen harmonic device
36
+ * createCardinalModel that certified the era was deleted at plan 09 step 7a).
36
37
  *
37
38
  * Pure factory: no artifact reads, no registry reads — the caller injects
38
39
  * the one-source sampler and the movement's mean tropical year, exactly
@@ -42,7 +42,6 @@
42
42
  /**
43
43
  * @param {{
44
44
  * ageAnchorYear: number,
45
- * tropicalYearSecondsAtAge: (tMa: number) => (number | null),
46
45
  * tropicalYearJ2000Seconds: number,
47
46
  * isDeepTime: () => boolean,
48
47
  * gridMinYear?: number,
@@ -52,12 +51,18 @@
52
51
  * maxCacheEntries?: number,
53
52
  * }} deps — ageAnchorYear is the year whose age is 0 in the period
54
53
  * functions' t_Ma coordinate (startmodelYear = 2000.5, the certified
55
- * convention); tropicalYearJ2000Seconds feeds the snapshot branch;
54
+ * convention); tropicalYearJ2000Seconds is the length of ONE tick of the
55
+ * year axis the integrator is fed — the linear SI-year label, each tick
56
+ * exactly one J2000 tropical year of seconds — so it is the integrand's
57
+ * weight in BOTH branches (plan 09 step 7c′: the deep branch had weighted
58
+ * each tick by the tropical year OF DATE, adding that year's deep-time
59
+ * drift to every lunar count — ~5° of Moon at ±100 kyr, ~1.3 orbits at
60
+ * 1 Ma — although the tick itself never changes length; the owner's call:
61
+ * a plain correctness fix, the tick already is an SI tick);
56
62
  * isDeepTime is read PER CALL so the engine's runtime toggle works.
57
63
  */
58
64
  function createChainCycleIntegrator({
59
65
  ageAnchorYear,
60
- tropicalYearSecondsAtAge,
61
66
  tropicalYearJ2000Seconds,
62
67
  isDeepTime,
63
68
  gridMinYear = 2000 - 250000,
@@ -73,28 +78,8 @@ function createChainCycleIntegrator({
73
78
  /** @type {Map<PeriodSecondsAtAge, Float64Array | null>} */
74
79
  const tables = new Map();
75
80
 
76
- // Exact-argument memo for the year-length integrand of the out-of-range
77
- // Simpson fallback. Within one animation frame every integrator node
78
- // (the six-plus Moon chains + the seven planets) integrates the SAME
79
- // (anchor, currentYear) pair, so the Simpson sample lattice — and with
80
- // it every tropicalYearSecondsAtAge(tMa) — repeats across chains, up to
81
- // 13× per sample. Exact-key reuse returns the bit-identical value: pure
82
- // dedupe, not a resolution change (the sampler-purity trap class is
83
- // about grids serving NEARBY arguments; this serves only the same one).
84
- // Bounded by wholesale clear — one frame's lattice is ≤ ~1025 entries.
85
- /** @type {Map<number, number | null>} */
86
- const yearSecondsMemo = new Map();
87
- const YEAR_SECONDS_MEMO_CAP = 4096;
88
- /** @param {number} tMa @returns {number | null} */
89
- function tropicalYearSecondsMemo(tMa) {
90
- let v = yearSecondsMemo.get(tMa);
91
- if (v === undefined) {
92
- v = tropicalYearSecondsAtAge(tMa);
93
- if (yearSecondsMemo.size >= YEAR_SECONDS_MEMO_CAP) yearSecondsMemo.clear();
94
- yearSecondsMemo.set(tMa, v);
95
- }
96
- return v;
97
- }
81
+ // (plan 09 step 7c′: the exact-argument memo of the year-of-date weight
82
+ // left with the weight — the tick length is the constant below.)
98
83
 
99
84
  /** Lazy cumulative table for one chain; null when the chain is undefined
100
85
  * anywhere in range (→ Simpson fallback).
@@ -111,8 +96,7 @@ function createChainCycleIntegrator({
111
96
  const tMa = (ageAnchorYear - y) / 1e6;
112
97
  const tPeriodS = periodFnSeconds(tMa);
113
98
  if (tPeriodS === null) return null;
114
- const tYrS = tropicalYearSecondsAtAge(tMa);
115
- return tYrS === null ? null : tYrS / tPeriodS;
99
+ return tropicalYearJ2000Seconds / tPeriodS; // cycles per tick (one SI year)
116
100
  };
117
101
  let ok = true;
118
102
  let fPrev = f(gridMinYear);
@@ -190,9 +174,7 @@ function createChainCycleIntegrator({
190
174
  const tMa = (ageAnchorYear - y) / 1e6;
191
175
  const tPeriodS = periodFnSeconds(tMa);
192
176
  if (tPeriodS === null) return null;
193
- const tYrS = tropicalYearSecondsMemo(tMa);
194
- if (tYrS === null) return null;
195
- const integrand = tYrS / tPeriodS; // cycles per SI year
177
+ const integrand = tropicalYearJ2000Seconds / tPeriodS; // cycles per tick (one SI year)
196
178
  const w = (i === 0 || i === n) ? 1 : (i % 2 === 1 ? 4 : 2);
197
179
  sum += w * integrand;
198
180
  }
@@ -88,7 +88,9 @@ function laggedL1Terms(l1Terms, relaxationKyr) {
88
88
  * j2RateJ2000PerYr?: number,
89
89
  * j2J2000?: number,
90
90
  * }} cfg - relaxationKyr, alphaGiaRateJ2000PerYr and j2RateJ2000PerYr are
91
- * model-parameters deepTime constants; alphaJ2000 the IERS
91
+ * assembled deepTime block (DEFAULT_CONSTANTS.deepTime: τ the banked record
92
+ * data/deep-time-fitted.json, the rate derived from astro-reference
93
+ * giaCoxChaoPeltier — plan 11 step 1); alphaJ2000 the IERS
92
94
  * moment-of-inertia factor; j2J2000 Earth's J₂ (astro-reference)
93
95
  * @returns {{
94
96
  * alphaAt: (year: number) => number,
@@ -1,74 +1,11 @@
1
1
  // GENERATED — do not edit. Regenerate: node tools/constants/generate.mjs --write
2
2
  // The fitted coefficients' shapes for TypeScript consumers (§2g); values live
3
- // in coefficients.js, emitted VERBATIM from fitted-coefficients.json.
3
+ // in coefficients.js, emitted VERBATIM from the fit artifacts under data/.
4
4
 
5
- export declare const COEFFICIENTS_HASH: "82c86b078b32fff8";
5
+ export declare const COEFFICIENTS_HASH: "91e2d041c7b6e038";
6
6
 
7
7
  export declare const FITTED_COEFFICIENTS: {
8
- readonly ANOMALISTIC_YEAR_HARMONICS: Array<[number, number, number]>;
9
8
  readonly BALANCE_PRESETS: Array<Array<number | string>>;
10
- readonly CARDINAL_POINT_ANCHORS: {
11
- "SS": number;
12
- "WS": number;
13
- "VE": number;
14
- "AE": number;
15
- };
16
- readonly CARDINAL_POINT_ANCHORS_ADJUSTED: {
17
- "SS": number;
18
- "WS": number;
19
- "VE": number;
20
- "AE": number;
21
- };
22
- readonly CARDINAL_POINT_DERIVED: {
23
- "lincoef": number;
24
- "h0": number;
25
- "h1": number;
26
- "eccOrderDivisors": [number, number];
27
- "note": string;
28
- };
29
- readonly CARDINAL_POINT_ECC_TERMS: {
30
- "SS": Array<{
31
- "order": number;
32
- "sin": number;
33
- "cos": number;
34
- }>;
35
- "WS": Array<{
36
- "order": number;
37
- "sin": number;
38
- "cos": number;
39
- }>;
40
- "VE": Array<{
41
- "order": number;
42
- "sin": number;
43
- "cos": number;
44
- }>;
45
- "AE": Array<{
46
- "order": number;
47
- "sin": number;
48
- "cos": number;
49
- }>;
50
- };
51
- readonly CARDINAL_POINT_HARMONICS: {
52
- "SS": Array<[number, number, number]>;
53
- "WS": Array<[number, number, number]>;
54
- "VE": Array<[number, number, number]>;
55
- "AE": Array<[number, number, number]>;
56
- };
57
- readonly CARDINAL_POINT_JOINT_TERMS: {
58
- "quadratureDeg": {
59
- "SS": number;
60
- "AE": number;
61
- "WS": number;
62
- "VE": number;
63
- };
64
- "terms": Array<{
65
- "order": number;
66
- "div": number;
67
- "sin": number;
68
- "cos": number;
69
- }>;
70
- "note": string;
71
- };
72
9
  readonly CLIMATE_FORMULA_COEFFS: {
73
10
  "config": {
74
11
  "L1_lines": Array<{
@@ -303,105 +240,105 @@ export declare const FITTED_COEFFICIENTS: {
303
240
  "delta_l3": number;
304
241
  };
305
242
  "carbon_amplification_ratios": {
306
- "19.0014": {
243
+ "19.0015": {
307
244
  "period_kyr": number;
308
245
  "lr04_post_mpt_amp": number;
309
246
  "epica_amp": number;
310
247
  "ratio": number;
311
248
  "label": string;
312
249
  };
313
- "19.1554": {
250
+ "19.1555": {
314
251
  "period_kyr": number;
315
252
  "lr04_post_mpt_amp": number;
316
253
  "epica_amp": number;
317
254
  "ratio": number;
318
255
  "label": string;
319
256
  };
320
- "22.4452": {
257
+ "22.4453": {
321
258
  "period_kyr": number;
322
259
  "lr04_post_mpt_amp": number;
323
260
  "epica_amp": number;
324
261
  "ratio": number;
325
262
  "label": string;
326
263
  };
327
- "23.1931": {
264
+ "23.1933": {
328
265
  "period_kyr": number;
329
266
  "lr04_post_mpt_amp": number;
330
267
  "epica_amp": number;
331
268
  "ratio": number;
332
269
  "label": string;
333
270
  };
334
- "23.7599": {
271
+ "23.7601": {
335
272
  "period_kyr": number;
336
273
  "lr04_post_mpt_amp": number;
337
274
  "epica_amp": number;
338
275
  "ratio": number;
339
276
  "label": string;
340
277
  };
341
- "27.2689": {
278
+ "27.2691": {
342
279
  "period_kyr": number;
343
280
  "lr04_post_mpt_amp": number;
344
281
  "epica_amp": number;
345
282
  "ratio": number;
346
283
  "label": string;
347
284
  };
348
- "28.8424": {
285
+ "28.8426": {
349
286
  "period_kyr": number;
350
287
  "lr04_post_mpt_amp": number;
351
288
  "epica_amp": number;
352
289
  "ratio": number;
353
290
  "label": string;
354
291
  };
355
- "29.0047": {
292
+ "29.0050": {
356
293
  "period_kyr": number;
357
294
  "lr04_post_mpt_amp": number;
358
295
  "epica_amp": number;
359
296
  "ratio": number;
360
297
  "label": string;
361
298
  };
362
- "29.6172": {
299
+ "29.6174": {
363
300
  "period_kyr": number;
364
301
  "lr04_post_mpt_amp": number;
365
302
  "epica_amp": number;
366
303
  "ratio": number;
367
304
  "label": string;
368
305
  };
369
- "29.8091": {
306
+ "29.8094": {
370
307
  "period_kyr": number;
371
308
  "lr04_post_mpt_amp": number;
372
309
  "epica_amp": number;
373
310
  "ratio": number;
374
311
  "label": string;
375
312
  };
376
- "39.5560": {
313
+ "39.5564": {
377
314
  "period_kyr": number;
378
315
  "lr04_post_mpt_amp": number;
379
316
  "epica_amp": number;
380
317
  "ratio": number;
381
318
  "label": string;
382
319
  };
383
- "40.2292": {
320
+ "40.2297": {
384
321
  "period_kyr": number;
385
322
  "lr04_post_mpt_amp": number;
386
323
  "epica_amp": number;
387
324
  "ratio": number;
388
325
  "label": string;
389
326
  };
390
- "40.9239": {
327
+ "40.9244": {
391
328
  "period_kyr": number;
392
329
  "lr04_post_mpt_amp": number;
393
330
  "epica_amp": number;
394
331
  "ratio": number;
395
332
  "label": string;
396
333
  };
397
- "41.6445": {
334
+ "41.6450": {
398
335
  "period_kyr": number;
399
336
  "lr04_post_mpt_amp": number;
400
337
  "epica_amp": number;
401
338
  "ratio": number;
402
339
  "label": string;
403
340
  };
404
- "53.6174": {
341
+ "53.6182": {
405
342
  "period_kyr": number;
406
343
  "lr04_post_mpt_amp": number;
407
344
  "epica_amp": number;
@@ -634,17 +571,4 @@ export declare const FITTED_COEFFICIENTS: {
634
571
  };
635
572
  readonly MEEUS_LATITUDE_TERMS: Array<number[]>;
636
573
  readonly MEEUS_LONGITUDE_TERMS: Array<number[]>;
637
- readonly PERI_HARMONICS_RAW: Array<[number, number, number]>;
638
- readonly PERI_OFFSET: number;
639
- readonly RA_DAY_OFFSET_MS: {
640
- "mean": number;
641
- "terms": Array<[number, number, number]>;
642
- "note": string;
643
- };
644
- readonly SIDEREAL_YEAR_HARMONICS: Array<[number, number, number]>;
645
- readonly SOLSTICE_OBLIQUITY_HARMONICS: Array<[number, number, number]>;
646
- readonly SOLSTICE_OBLIQUITY_MEAN_FITTED: number;
647
- readonly SUN_LONGITUDE_HARMONICS: Array<[number, number, number]>;
648
- readonly SUN_LONGITUDE_MEAN: number;
649
- readonly TROPICAL_YEAR_HARMONICS: Array<[number, number, number]>;
650
574
  };