@typescriptify/sweph 1.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.
- package/README.md +422 -0
- package/ephe/semo_18.se1 +0 -0
- package/ephe/sepl_18.se1 +0 -0
- package/originalCode/.eslintrc.json +124 -0
- package/originalCode/.gitattributes +2 -0
- package/originalCode/.github/FUNDING.yml +5 -0
- package/originalCode/.github/workflows/test.yml +35 -0
- package/originalCode/LICENSE +840 -0
- package/originalCode/README.md +91 -0
- package/originalCode/binding.gyp +41 -0
- package/originalCode/constants.js +366 -0
- package/originalCode/docs.gif +0 -0
- package/originalCode/index.d.ts +5115 -0
- package/originalCode/index.js +7 -0
- package/originalCode/index.mjs +109 -0
- package/originalCode/package.json +55 -0
- package/originalCode/src/functions/azalt.cpp +39 -0
- package/originalCode/src/functions/azalt_rev.cpp +35 -0
- package/originalCode/src/functions/calc.cpp +29 -0
- package/originalCode/src/functions/calc_pctr.cpp +31 -0
- package/originalCode/src/functions/calc_ut.cpp +29 -0
- package/originalCode/src/functions/close.cpp +6 -0
- package/originalCode/src/functions/cotrans.cpp +26 -0
- package/originalCode/src/functions/cotrans_sp.cpp +26 -0
- package/originalCode/src/functions/cs2degstr.cpp +19 -0
- package/originalCode/src/functions/cs2lonlatstr.cpp +23 -0
- package/originalCode/src/functions/cs2timestr.cpp +23 -0
- package/originalCode/src/functions/csnorm.cpp +15 -0
- package/originalCode/src/functions/csroundsec.cpp +15 -0
- package/originalCode/src/functions/d2l.cpp +15 -0
- package/originalCode/src/functions/date_conversion.cpp +30 -0
- package/originalCode/src/functions/day_of_week.cpp +15 -0
- package/originalCode/src/functions/degnorm.cpp +15 -0
- package/originalCode/src/functions/deltat.cpp +15 -0
- package/originalCode/src/functions/deltat_ex.cpp +24 -0
- package/originalCode/src/functions/difcs2n.cpp +19 -0
- package/originalCode/src/functions/difcsn.cpp +19 -0
- package/originalCode/src/functions/difdeg2n.cpp +19 -0
- package/originalCode/src/functions/difdegn.cpp +19 -0
- package/originalCode/src/functions/fixstar.cpp +32 -0
- package/originalCode/src/functions/fixstar2.cpp +32 -0
- package/originalCode/src/functions/fixstar2_mag.cpp +28 -0
- package/originalCode/src/functions/fixstar2_ut.cpp +32 -0
- package/originalCode/src/functions/fixstar_mag.cpp +28 -0
- package/originalCode/src/functions/fixstar_ut.cpp +32 -0
- package/originalCode/src/functions/gauquelin_sector.cpp +44 -0
- package/originalCode/src/functions/get_ayanamsa.cpp +15 -0
- package/originalCode/src/functions/get_ayanamsa_ex.cpp +27 -0
- package/originalCode/src/functions/get_ayanamsa_ex_ut.cpp +27 -0
- package/originalCode/src/functions/get_ayanamsa_name.cpp +19 -0
- package/originalCode/src/functions/get_ayanamsa_ut.cpp +15 -0
- package/originalCode/src/functions/get_current_file_data.cpp +28 -0
- package/originalCode/src/functions/get_library_path.cpp +8 -0
- package/originalCode/src/functions/get_orbital_elements.cpp +29 -0
- package/originalCode/src/functions/get_planet_name.cpp +19 -0
- package/originalCode/src/functions/get_tid_acc.cpp +7 -0
- package/originalCode/src/functions/heliacal_pheno_ut.cpp +52 -0
- package/originalCode/src/functions/heliacal_ut.cpp +52 -0
- package/originalCode/src/functions/helio_cross.cpp +33 -0
- package/originalCode/src/functions/helio_cross_ut.cpp +33 -0
- package/originalCode/src/functions/house_name.cpp +20 -0
- package/originalCode/src/functions/house_pos.cpp +36 -0
- package/originalCode/src/functions/houses.cpp +35 -0
- package/originalCode/src/functions/houses_armc.cpp +38 -0
- package/originalCode/src/functions/houses_armc_ex2.cpp +47 -0
- package/originalCode/src/functions/houses_ex.cpp +37 -0
- package/originalCode/src/functions/houses_ex2.cpp +46 -0
- package/originalCode/src/functions/jdet_to_utc.cpp +38 -0
- package/originalCode/src/functions/jdut1_to_utc.cpp +38 -0
- package/originalCode/src/functions/julday.cpp +25 -0
- package/originalCode/src/functions/lat_to_lmt.cpp +27 -0
- package/originalCode/src/functions/lmt_to_lat.cpp +27 -0
- package/originalCode/src/functions/lun_eclipse_how.cpp +34 -0
- package/originalCode/src/functions/lun_eclipse_when.cpp +31 -0
- package/originalCode/src/functions/lun_eclipse_when_loc.cpp +39 -0
- package/originalCode/src/functions/lun_occult_when_glob.cpp +35 -0
- package/originalCode/src/functions/lun_occult_when_loc.cpp +43 -0
- package/originalCode/src/functions/lun_occult_where.cpp +34 -0
- package/originalCode/src/functions/mooncross.cpp +26 -0
- package/originalCode/src/functions/mooncross_node.cpp +30 -0
- package/originalCode/src/functions/mooncross_node_ut.cpp +30 -0
- package/originalCode/src/functions/mooncross_ut.cpp +26 -0
- package/originalCode/src/functions/nod_aps.cpp +42 -0
- package/originalCode/src/functions/nod_aps_ut.cpp +42 -0
- package/originalCode/src/functions/orbit_max_min_true_distance.cpp +37 -0
- package/originalCode/src/functions/pheno.cpp +29 -0
- package/originalCode/src/functions/pheno_ut.cpp +29 -0
- package/originalCode/src/functions/radnorm.cpp +15 -0
- package/originalCode/src/functions/refrac.cpp +23 -0
- package/originalCode/src/functions/refrac_extended.cpp +32 -0
- package/originalCode/src/functions/revjul.cpp +33 -0
- package/originalCode/src/functions/rise_trans.cpp +44 -0
- package/originalCode/src/functions/rise_trans_true_hor.cpp +46 -0
- package/originalCode/src/functions/set_delta_t_userdef.cpp +14 -0
- package/originalCode/src/functions/set_ephe_path.cpp +14 -0
- package/originalCode/src/functions/set_jpl_file.cpp +14 -0
- package/originalCode/src/functions/set_sid_mode.cpp +20 -0
- package/originalCode/src/functions/set_tid_acc.cpp +14 -0
- package/originalCode/src/functions/set_topo.cpp +20 -0
- package/originalCode/src/functions/sidtime.cpp +15 -0
- package/originalCode/src/functions/sidtime0.cpp +21 -0
- package/originalCode/src/functions/sol_eclipse_how.cpp +34 -0
- package/originalCode/src/functions/sol_eclipse_when_glob.cpp +31 -0
- package/originalCode/src/functions/sol_eclipse_when_loc.cpp +39 -0
- package/originalCode/src/functions/sol_eclipse_where.cpp +30 -0
- package/originalCode/src/functions/solcross.cpp +26 -0
- package/originalCode/src/functions/solcross_ut.cpp +26 -0
- package/originalCode/src/functions/split_deg.cpp +35 -0
- package/originalCode/src/functions/time_equ.cpp +25 -0
- package/originalCode/src/functions/utc_time_zone.cpp +48 -0
- package/originalCode/src/functions/utc_to_jd.cpp +37 -0
- package/originalCode/src/functions/version.cpp +8 -0
- package/originalCode/src/functions/vis_limit_mag.cpp +50 -0
- package/originalCode/src/sweph.cpp +150 -0
- package/originalCode/src/sweph.h +119 -0
- package/originalCode/swisseph/swecl.c +6428 -0
- package/originalCode/swisseph/swedate.c +588 -0
- package/originalCode/swisseph/swedate.h +81 -0
- package/originalCode/swisseph/swehel.c +3511 -0
- package/originalCode/swisseph/swehouse.c +3143 -0
- package/originalCode/swisseph/swehouse.h +98 -0
- package/originalCode/swisseph/swejpl.c +958 -0
- package/originalCode/swisseph/swejpl.h +103 -0
- package/originalCode/swisseph/swemmoon.c +1930 -0
- package/originalCode/swisseph/swemplan.c +967 -0
- package/originalCode/swisseph/swemptab.h +10640 -0
- package/originalCode/swisseph/swenut2000a.h +2819 -0
- package/originalCode/swisseph/sweodef.h +326 -0
- package/originalCode/swisseph/sweph.c +8614 -0
- package/originalCode/swisseph/sweph.h +849 -0
- package/originalCode/swisseph/swephexp.h +1020 -0
- package/originalCode/swisseph/swephlib.c +4634 -0
- package/originalCode/swisseph/swephlib.h +189 -0
- package/package.json +28 -0
- package/scripts/gen-swemptab.js +177 -0
- package/scripts/gen-swenut2000a.js +106 -0
- package/src/SwissEph/README.md +268 -0
- package/src/SwissEph/UseCases/Ayanamsa.md +363 -0
- package/src/SwissEph/UseCases/AzimuthAltitude.md +408 -0
- package/src/SwissEph/UseCases/CoordinateSystems.md +337 -0
- package/src/SwissEph/UseCases/DateAndTime.md +368 -0
- package/src/SwissEph/UseCases/DeltaT.md +258 -0
- package/src/SwissEph/UseCases/EphemerisFiles.md +338 -0
- package/src/SwissEph/UseCases/FixedStars.md +300 -0
- package/src/SwissEph/UseCases/GauquelinSectors.md +304 -0
- package/src/SwissEph/UseCases/HeliacalEvents.md +396 -0
- package/src/SwissEph/UseCases/HelioCrossings.md +325 -0
- package/src/SwissEph/UseCases/HousePosition.md +254 -0
- package/src/SwissEph/UseCases/HouseSystems.md +279 -0
- package/src/SwissEph/UseCases/LunarEclipse.md +326 -0
- package/src/SwissEph/UseCases/MeridianTransit.md +279 -0
- package/src/SwissEph/UseCases/MoonCrossings.md +373 -0
- package/src/SwissEph/UseCases/NodesAndApsides.md +307 -0
- package/src/SwissEph/UseCases/Occultation.md +352 -0
- package/src/SwissEph/UseCases/OrbitalElements.md +469 -0
- package/src/SwissEph/UseCases/Phenomena.md +328 -0
- package/src/SwissEph/UseCases/PlanetPositions.md +366 -0
- package/src/SwissEph/UseCases/Planetocentric.md +278 -0
- package/src/SwissEph/UseCases/Refraction.md +314 -0
- package/src/SwissEph/UseCases/RiseAndSet.md +433 -0
- package/src/SwissEph/UseCases/SiderealTime.md +302 -0
- package/src/SwissEph/UseCases/SolarEclipse.md +379 -0
- package/src/SwissEph/UseCases/SunCrossings.md +275 -0
- package/src/SwissEph/UseCases/TopocentricCorrection.md +335 -0
- package/src/SwissEph/errors.ts +10 -0
- package/src/SwissEph/index.ts +823 -0
- package/src/SwissEph/types.ts +291 -0
- package/src/constants.ts +762 -0
- package/src/file-reader.ts +147 -0
- package/src/index.ts +10 -0
- package/src/swecl.ts +4526 -0
- package/src/swedate.ts +376 -0
- package/src/swehel.ts +1939 -0
- package/src/swehouse.ts +2167 -0
- package/src/swejpl.ts +470 -0
- package/src/swemmoon.ts +1318 -0
- package/src/swemplan.ts +585 -0
- package/src/swemptab.ts +4448 -0
- package/src/swenut2000a.ts +2763 -0
- package/src/sweph.ts +3993 -0
- package/src/swephlib.ts +2720 -0
- package/src/types.ts +490 -0
- package/tests/c-style/ayanamsa.test.ts +63 -0
- package/tests/c-style/config.test.ts +96 -0
- package/tests/c-style/crossings.test.ts +81 -0
- package/tests/c-style/date-time.test.ts +114 -0
- package/tests/c-style/eclipses.test.ts +84 -0
- package/tests/c-style/fixed-stars.test.ts +66 -0
- package/tests/c-style/heliacal.test.ts +34 -0
- package/tests/c-style/houses.test.ts +135 -0
- package/tests/c-style/math-utils.test.ts +160 -0
- package/tests/c-style/orbital.test.ts +78 -0
- package/tests/c-style/phenomena.test.ts +42 -0
- package/tests/c-style/planetocentric.test.ts +26 -0
- package/tests/c-style/planets.test.ts +117 -0
- package/tests/c-style/rise-set.test.ts +71 -0
- package/tests/helpers.ts +21 -0
- package/tests/modern/ayanamsa.test.ts +47 -0
- package/tests/modern/calc.test.ts +113 -0
- package/tests/modern/config.test.ts +46 -0
- package/tests/modern/crossings.test.ts +45 -0
- package/tests/modern/eclipses.test.ts +81 -0
- package/tests/modern/errors.test.ts +71 -0
- package/tests/modern/heliacal.test.ts +30 -0
- package/tests/modern/houses.test.ts +87 -0
- package/tests/modern/orbital.test.ts +79 -0
- package/tests/modern/phenomena.test.ts +41 -0
- package/tests/modern/rise-set.test.ts +60 -0
- package/tests/modern/statics.test.ts +99 -0
- package/tests/modern/utilities.test.ts +70 -0
- package/tsconfig.json +20 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
/*************************************************************
|
|
2
|
+
* Swiss Ephemeris TypeScript type definitions
|
|
3
|
+
* Translated from sweph.h, swephexp.h, sweodef.h, swehouse.h
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 1997 - 2021 Astrodienst AG, Switzerland.
|
|
6
|
+
* All rights reserved. (AGPL)
|
|
7
|
+
*************************************************************/
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
SEI_NPLANETS, SEI_NNODE_ETC, SE_NPLANETS,
|
|
11
|
+
SEI_NEPHFILES, SEI_FILE_NMAXPLAN, SEI_NMODELS,
|
|
12
|
+
} from './constants';
|
|
13
|
+
|
|
14
|
+
import type { SE1FileReader } from './file-reader';
|
|
15
|
+
|
|
16
|
+
/* ---- Public result types ---- */
|
|
17
|
+
|
|
18
|
+
/** Result from swe_calc / swe_calc_ut */
|
|
19
|
+
export interface CalcResult {
|
|
20
|
+
longitude: number;
|
|
21
|
+
latitude: number;
|
|
22
|
+
distance: number;
|
|
23
|
+
longitudeSpeed: number;
|
|
24
|
+
latitudeSpeed: number;
|
|
25
|
+
distanceSpeed: number;
|
|
26
|
+
flags: number;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Result from swe_houses */
|
|
31
|
+
export interface HouseResult {
|
|
32
|
+
cusps: number[]; // cusps[1]..cusps[12] (index 0 unused, to match C convention)
|
|
33
|
+
ascendant: number;
|
|
34
|
+
mc: number; // Midheaven
|
|
35
|
+
armc: number; // ARMC (sidereal time in degrees)
|
|
36
|
+
vertex: number;
|
|
37
|
+
equatorialAscendant: number;
|
|
38
|
+
coAscendantKoch: number;
|
|
39
|
+
coAscendantMunkasey: number;
|
|
40
|
+
polarAscendant: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Result from swe_revjul */
|
|
44
|
+
export interface DateResult {
|
|
45
|
+
year: number;
|
|
46
|
+
month: number;
|
|
47
|
+
day: number;
|
|
48
|
+
hour: number; // fractional hours
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Result from swe_utc_to_jd */
|
|
52
|
+
export interface UtcToJdResult {
|
|
53
|
+
tjdEt: number; // Julian day in ET
|
|
54
|
+
tjdUt: number; // Julian day in UT1
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Result from swe_jdet_to_utc / swe_jdut1_to_utc */
|
|
59
|
+
export interface JdToUtcResult {
|
|
60
|
+
year: number;
|
|
61
|
+
month: number;
|
|
62
|
+
day: number;
|
|
63
|
+
hour: number;
|
|
64
|
+
minute: number;
|
|
65
|
+
second: number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* ---- Internal data structures ---- */
|
|
69
|
+
|
|
70
|
+
/** Obliquity of ecliptic (struct epsilon) */
|
|
71
|
+
export interface Epsilon {
|
|
72
|
+
teps: number; // JD for which eps was computed
|
|
73
|
+
eps: number; // obliquity in radians
|
|
74
|
+
seps: number; // sin(eps)
|
|
75
|
+
ceps: number; // cos(eps)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function createEpsilon(): Epsilon {
|
|
79
|
+
return { teps: 0, eps: 0, seps: 0, ceps: 0 };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Nutation data (struct nut) */
|
|
83
|
+
export interface Nut {
|
|
84
|
+
tnut: number;
|
|
85
|
+
nutlo: [number, number]; // nutation in longitude and obliquity
|
|
86
|
+
snut: number; // sin(nut obliquity)
|
|
87
|
+
cnut: number; // cos(nut obliquity)
|
|
88
|
+
matrix: number[][]; // 3x3 nutation matrix
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function createNut(): Nut {
|
|
92
|
+
return {
|
|
93
|
+
tnut: 0,
|
|
94
|
+
nutlo: [0, 0],
|
|
95
|
+
snut: 0,
|
|
96
|
+
cnut: 0,
|
|
97
|
+
matrix: [
|
|
98
|
+
[0, 0, 0],
|
|
99
|
+
[0, 0, 0],
|
|
100
|
+
[0, 0, 0],
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Planetary data from ephemeris (struct plan_data) */
|
|
106
|
+
export interface PlanData {
|
|
107
|
+
ibdy: number; // internal body number
|
|
108
|
+
iflg: number; // SEI_FLG_HELIO, SEI_FLG_ROTATE, etc.
|
|
109
|
+
ncoe: number; // polynomial order + 1
|
|
110
|
+
lndx0: number; // file position of planet's index
|
|
111
|
+
nndx: number; // number of index entries
|
|
112
|
+
tfstart: number; // ephemeris start JD
|
|
113
|
+
tfend: number; // ephemeris end JD
|
|
114
|
+
dseg: number; // segment size in days
|
|
115
|
+
telem: number; // epoch of orbital elements
|
|
116
|
+
prot: number;
|
|
117
|
+
qrot: number;
|
|
118
|
+
dprot: number;
|
|
119
|
+
dqrot: number;
|
|
120
|
+
rmax: number; // normalisation factor of Chebyshev coefficients
|
|
121
|
+
peri: number; // for reference ellipse
|
|
122
|
+
dperi: number;
|
|
123
|
+
refep: Float64Array | null; // Chebyshev coefficients of reference ellipse (2*ncoe)
|
|
124
|
+
tseg0: number; // start JD of current segment
|
|
125
|
+
tseg1: number; // end JD of current segment
|
|
126
|
+
segp: Float64Array | null; // unpacked Chebyshev coefficients (3*ncoe)
|
|
127
|
+
neval: number; // how many coefficients to evaluate
|
|
128
|
+
teval: number; // time of last evaluation
|
|
129
|
+
iephe: number; // which ephemeris was used
|
|
130
|
+
x: Float64Array; // position & speed, equatorial J2000 (6 elements)
|
|
131
|
+
xflgs: number;
|
|
132
|
+
xreturn: Float64Array; // return positions (24 elements: 4 coord systems × 6)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function createPlanData(): PlanData {
|
|
136
|
+
return {
|
|
137
|
+
ibdy: 0, iflg: 0, ncoe: 0, lndx0: 0, nndx: 0,
|
|
138
|
+
tfstart: 0, tfend: 0, dseg: 0, telem: 0,
|
|
139
|
+
prot: 0, qrot: 0, dprot: 0, dqrot: 0, rmax: 0,
|
|
140
|
+
peri: 0, dperi: 0,
|
|
141
|
+
refep: null, tseg0: 0, tseg1: 0, segp: null,
|
|
142
|
+
neval: 0, teval: 0, iephe: 0,
|
|
143
|
+
x: new Float64Array(6),
|
|
144
|
+
xflgs: 0,
|
|
145
|
+
xreturn: new Float64Array(24),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** File data (struct file_data) */
|
|
150
|
+
export interface FileData {
|
|
151
|
+
fnam: string;
|
|
152
|
+
fversion: number;
|
|
153
|
+
astnam: string;
|
|
154
|
+
swephDenum: number; // DE number of source JPL ephemeris
|
|
155
|
+
tfstart: number;
|
|
156
|
+
tfend: number;
|
|
157
|
+
iflg: number; // byte order flags
|
|
158
|
+
npl: number; // how many planets in file
|
|
159
|
+
ipl: Int32Array; // planet numbers
|
|
160
|
+
reader: SE1FileReader | null; // replaces C FILE*
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function createFileData(): FileData {
|
|
164
|
+
return {
|
|
165
|
+
fnam: '', fversion: 0, astnam: '', swephDenum: 0,
|
|
166
|
+
tfstart: 0, tfend: 0, iflg: 0, npl: 0,
|
|
167
|
+
ipl: new Int32Array(SEI_FILE_NMAXPLAN),
|
|
168
|
+
reader: null,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** General constants from ephemeris file (struct gen_const) */
|
|
173
|
+
export interface GenConst {
|
|
174
|
+
clight: number;
|
|
175
|
+
aunit: number;
|
|
176
|
+
helgravconst: number;
|
|
177
|
+
ratme: number;
|
|
178
|
+
sunradius: number;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function createGenConst(): GenConst {
|
|
182
|
+
return { clight: 0, aunit: 0, helgravconst: 0, ratme: 0, sunradius: 0 };
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Saved calculation positions (struct save_positions) */
|
|
186
|
+
export interface SavePositions {
|
|
187
|
+
ipl: number;
|
|
188
|
+
tsave: number;
|
|
189
|
+
iflgsave: number;
|
|
190
|
+
xsaves: Float64Array; // 24 doubles (4 coord systems × 6)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function createSavePositions(): SavePositions {
|
|
194
|
+
return {
|
|
195
|
+
ipl: 0, tsave: 0, iflgsave: 0,
|
|
196
|
+
xsaves: new Float64Array(24),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Node/apside data (struct node_data, but actually uses plan_data in C) */
|
|
201
|
+
export type NodeData = PlanData;
|
|
202
|
+
export const createNodeData = createPlanData;
|
|
203
|
+
|
|
204
|
+
/** Topocentric observer (struct topo_data) */
|
|
205
|
+
export interface TopoData {
|
|
206
|
+
geolon: number;
|
|
207
|
+
geolat: number;
|
|
208
|
+
geoalt: number;
|
|
209
|
+
teval: number;
|
|
210
|
+
tjdUt: number;
|
|
211
|
+
xobs: Float64Array; // 6 elements
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function createTopoData(): TopoData {
|
|
215
|
+
return {
|
|
216
|
+
geolon: 0, geolat: 0, geoalt: 0,
|
|
217
|
+
teval: 0, tjdUt: 0,
|
|
218
|
+
xobs: new Float64Array(6),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Sidereal mode data (struct sid_data) */
|
|
223
|
+
export interface SidData {
|
|
224
|
+
sidMode: number;
|
|
225
|
+
ayanT0: number;
|
|
226
|
+
t0: number;
|
|
227
|
+
t0IsUT: boolean;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export function createSidData(): SidData {
|
|
231
|
+
return { sidMode: 0, ayanT0: 0, t0: 0, t0IsUT: false };
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** Nutation interpolation data (struct interpol) */
|
|
235
|
+
export interface Interpol {
|
|
236
|
+
tjdNut0: number;
|
|
237
|
+
tjdNut2: number;
|
|
238
|
+
nutDpsi0: number;
|
|
239
|
+
nutDpsi1: number;
|
|
240
|
+
nutDpsi2: number;
|
|
241
|
+
nutDeps0: number;
|
|
242
|
+
nutDeps1: number;
|
|
243
|
+
nutDeps2: number;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export function createInterpol(): Interpol {
|
|
247
|
+
return {
|
|
248
|
+
tjdNut0: 0, tjdNut2: 0,
|
|
249
|
+
nutDpsi0: 0, nutDpsi1: 0, nutDpsi2: 0,
|
|
250
|
+
nutDeps0: 0, nutDeps1: 0, nutDeps2: 0,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** Moshier planet table (struct plantbl) */
|
|
255
|
+
export interface Plantbl {
|
|
256
|
+
maxHarmonic: number[]; // 9 elements
|
|
257
|
+
maxPowerOfT: number;
|
|
258
|
+
argTbl: Int8Array;
|
|
259
|
+
lonTbl: Float64Array;
|
|
260
|
+
latTbl: Float64Array;
|
|
261
|
+
radTbl: Float64Array;
|
|
262
|
+
distance: number;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/** House calculation data (struct houses from swehouse.h) */
|
|
266
|
+
export interface Houses {
|
|
267
|
+
cusp: Float64Array; // 37 cusps
|
|
268
|
+
cuspSpeed: Float64Array; // 37 cusp speeds
|
|
269
|
+
ac: number;
|
|
270
|
+
acSpeed: number;
|
|
271
|
+
mc: number;
|
|
272
|
+
mcSpeed: number;
|
|
273
|
+
armcSpeed: number;
|
|
274
|
+
vertex: number;
|
|
275
|
+
vertexSpeed: number;
|
|
276
|
+
equasc: number;
|
|
277
|
+
equascSpeed: number;
|
|
278
|
+
coasc1: number;
|
|
279
|
+
coasc1Speed: number;
|
|
280
|
+
coasc2: number;
|
|
281
|
+
coasc2Speed: number;
|
|
282
|
+
polasc: number;
|
|
283
|
+
polascSpeed: number;
|
|
284
|
+
sundec: number;
|
|
285
|
+
doSpeed: boolean;
|
|
286
|
+
doHspeed: boolean;
|
|
287
|
+
doInterpol: boolean;
|
|
288
|
+
serr: string;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function createHouses(): Houses {
|
|
292
|
+
return {
|
|
293
|
+
cusp: new Float64Array(37),
|
|
294
|
+
cuspSpeed: new Float64Array(37),
|
|
295
|
+
ac: 0, acSpeed: 0,
|
|
296
|
+
mc: 0, mcSpeed: 0,
|
|
297
|
+
armcSpeed: 0,
|
|
298
|
+
vertex: 0, vertexSpeed: 0,
|
|
299
|
+
equasc: 0, equascSpeed: 0,
|
|
300
|
+
coasc1: 0, coasc1Speed: 0,
|
|
301
|
+
coasc2: 0, coasc2Speed: 0,
|
|
302
|
+
polasc: 0, polascSpeed: 0,
|
|
303
|
+
sundec: 0,
|
|
304
|
+
doSpeed: false,
|
|
305
|
+
doHspeed: false,
|
|
306
|
+
doInterpol: false,
|
|
307
|
+
serr: '',
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** JPL ephemeris save state (struct jpl_save) */
|
|
312
|
+
export interface JplSave {
|
|
313
|
+
jplReader: SE1FileReader | null;
|
|
314
|
+
doReorder: boolean;
|
|
315
|
+
ehCval: Float64Array; // [400]
|
|
316
|
+
ehSs: Float64Array; // [3] start, end, segment size
|
|
317
|
+
ehAu: number;
|
|
318
|
+
ehEmrat: number;
|
|
319
|
+
ehDenum: number;
|
|
320
|
+
ehNcon: number;
|
|
321
|
+
ehIpt: Int32Array; // [39]
|
|
322
|
+
chCnam: string;
|
|
323
|
+
pv: Float64Array; // [78]
|
|
324
|
+
pvsun: Float64Array; // [6]
|
|
325
|
+
buf: Float64Array; // [1500]
|
|
326
|
+
pc: Float64Array; // [18]
|
|
327
|
+
vc: Float64Array; // [18]
|
|
328
|
+
ac: Float64Array; // [18]
|
|
329
|
+
jc: Float64Array; // [18]
|
|
330
|
+
doKm: boolean;
|
|
331
|
+
// static TLS vars from interp()
|
|
332
|
+
interpNp: number;
|
|
333
|
+
interpNv: number;
|
|
334
|
+
interpNac: number;
|
|
335
|
+
interpNjk: number;
|
|
336
|
+
interpTwot: number;
|
|
337
|
+
// static TLS vars from state()
|
|
338
|
+
stateIrecsz: number;
|
|
339
|
+
stateNrl: number;
|
|
340
|
+
stateNcoeffs: number;
|
|
341
|
+
stateLpt: Int32Array; // [3]
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function createJplSave(): JplSave {
|
|
345
|
+
return {
|
|
346
|
+
jplReader: null,
|
|
347
|
+
doReorder: false,
|
|
348
|
+
ehCval: new Float64Array(400),
|
|
349
|
+
ehSs: new Float64Array(3),
|
|
350
|
+
ehAu: 0,
|
|
351
|
+
ehEmrat: 0,
|
|
352
|
+
ehDenum: 0,
|
|
353
|
+
ehNcon: 0,
|
|
354
|
+
ehIpt: new Int32Array(39),
|
|
355
|
+
chCnam: '',
|
|
356
|
+
pv: new Float64Array(78),
|
|
357
|
+
pvsun: new Float64Array(6),
|
|
358
|
+
buf: new Float64Array(1500),
|
|
359
|
+
pc: new Float64Array(18),
|
|
360
|
+
vc: new Float64Array(18),
|
|
361
|
+
ac: new Float64Array(18),
|
|
362
|
+
jc: new Float64Array(18),
|
|
363
|
+
doKm: false,
|
|
364
|
+
interpNp: 0,
|
|
365
|
+
interpNv: 0,
|
|
366
|
+
interpNac: 0,
|
|
367
|
+
interpNjk: 0,
|
|
368
|
+
interpTwot: 0,
|
|
369
|
+
stateIrecsz: 0,
|
|
370
|
+
stateNrl: 0,
|
|
371
|
+
stateNcoeffs: 0,
|
|
372
|
+
stateLpt: new Int32Array(3),
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/** Main Swiss Ephemeris state (struct swe_data) */
|
|
377
|
+
export interface SweData {
|
|
378
|
+
ephePathIsSet: boolean;
|
|
379
|
+
jplFileIsOpen: boolean;
|
|
380
|
+
ephepath: string;
|
|
381
|
+
jplfnam: string;
|
|
382
|
+
jpldenum: number;
|
|
383
|
+
lastEpheflag: number;
|
|
384
|
+
geoposIsSet: boolean;
|
|
385
|
+
ayanaIsSet: boolean;
|
|
386
|
+
isOldStarfile: boolean;
|
|
387
|
+
eopTjdBeg: number;
|
|
388
|
+
eopTjdBegHorizons: number;
|
|
389
|
+
eopTjdEnd: number;
|
|
390
|
+
eopTjdEndAdd: number;
|
|
391
|
+
eopDpsiLoaded: number;
|
|
392
|
+
tidAcc: number;
|
|
393
|
+
isTidAccManual: boolean;
|
|
394
|
+
initDtDone: boolean;
|
|
395
|
+
swedIsInitialised: boolean;
|
|
396
|
+
deltaTUserdefIsSet: boolean;
|
|
397
|
+
deltaTUserdef: number;
|
|
398
|
+
astG: number;
|
|
399
|
+
astH: number;
|
|
400
|
+
astDiam: number;
|
|
401
|
+
astelem: string;
|
|
402
|
+
iSavedPlanetName: number;
|
|
403
|
+
savedPlanetName: string;
|
|
404
|
+
dpsi: Float64Array | null;
|
|
405
|
+
deps: Float64Array | null;
|
|
406
|
+
timeout: number;
|
|
407
|
+
astroModels: Int32Array;
|
|
408
|
+
doInterpolateNut: boolean;
|
|
409
|
+
interpol: Interpol;
|
|
410
|
+
fidat: FileData[];
|
|
411
|
+
gcdat: GenConst;
|
|
412
|
+
pldat: PlanData[];
|
|
413
|
+
nddat: PlanData[]; // node data uses PlanData
|
|
414
|
+
savedat: SavePositions[];
|
|
415
|
+
oec: Epsilon;
|
|
416
|
+
oec2000: Epsilon;
|
|
417
|
+
nut: Nut;
|
|
418
|
+
nut2000: Nut;
|
|
419
|
+
nutv: Nut;
|
|
420
|
+
topd: TopoData;
|
|
421
|
+
sidd: SidData;
|
|
422
|
+
nFixstarsReal: number;
|
|
423
|
+
nFixstarsNamed: number;
|
|
424
|
+
nFixstarsRecords: number;
|
|
425
|
+
jplSave: JplSave | null;
|
|
426
|
+
ephemerisFiles?: Map<string, ArrayBuffer>;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/** Create the default SweData state */
|
|
430
|
+
export function createDefaultSweData(): SweData {
|
|
431
|
+
const fidat: FileData[] = [];
|
|
432
|
+
for (let i = 0; i < SEI_NEPHFILES; i++) fidat.push(createFileData());
|
|
433
|
+
const pldat: PlanData[] = [];
|
|
434
|
+
for (let i = 0; i < SEI_NPLANETS; i++) pldat.push(createPlanData());
|
|
435
|
+
const nddat: PlanData[] = [];
|
|
436
|
+
for (let i = 0; i < SEI_NNODE_ETC; i++) nddat.push(createPlanData());
|
|
437
|
+
const savedat: SavePositions[] = [];
|
|
438
|
+
for (let i = 0; i < SE_NPLANETS + 1; i++) savedat.push(createSavePositions());
|
|
439
|
+
|
|
440
|
+
return {
|
|
441
|
+
ephePathIsSet: false,
|
|
442
|
+
jplFileIsOpen: false,
|
|
443
|
+
ephepath: '',
|
|
444
|
+
jplfnam: '',
|
|
445
|
+
jpldenum: 0,
|
|
446
|
+
lastEpheflag: 0,
|
|
447
|
+
geoposIsSet: false,
|
|
448
|
+
ayanaIsSet: false,
|
|
449
|
+
isOldStarfile: false,
|
|
450
|
+
eopTjdBeg: 0,
|
|
451
|
+
eopTjdBegHorizons: 0,
|
|
452
|
+
eopTjdEnd: 0,
|
|
453
|
+
eopTjdEndAdd: 0,
|
|
454
|
+
eopDpsiLoaded: 0,
|
|
455
|
+
tidAcc: 0,
|
|
456
|
+
isTidAccManual: false,
|
|
457
|
+
initDtDone: false,
|
|
458
|
+
swedIsInitialised: false,
|
|
459
|
+
deltaTUserdefIsSet: false,
|
|
460
|
+
deltaTUserdef: 0,
|
|
461
|
+
astG: 0,
|
|
462
|
+
astH: 0,
|
|
463
|
+
astDiam: 0,
|
|
464
|
+
astelem: '',
|
|
465
|
+
iSavedPlanetName: 0,
|
|
466
|
+
savedPlanetName: '',
|
|
467
|
+
dpsi: null,
|
|
468
|
+
deps: null,
|
|
469
|
+
timeout: 0,
|
|
470
|
+
astroModels: new Int32Array(SEI_NMODELS),
|
|
471
|
+
doInterpolateNut: false,
|
|
472
|
+
interpol: createInterpol(),
|
|
473
|
+
fidat,
|
|
474
|
+
gcdat: createGenConst(),
|
|
475
|
+
pldat,
|
|
476
|
+
nddat,
|
|
477
|
+
savedat,
|
|
478
|
+
oec: createEpsilon(),
|
|
479
|
+
oec2000: createEpsilon(),
|
|
480
|
+
nut: createNut(),
|
|
481
|
+
nut2000: createNut(),
|
|
482
|
+
nutv: createNut(),
|
|
483
|
+
topd: createTopoData(),
|
|
484
|
+
sidd: createSidData(),
|
|
485
|
+
nFixstarsReal: 0,
|
|
486
|
+
nFixstarsNamed: 0,
|
|
487
|
+
nFixstarsRecords: 0,
|
|
488
|
+
jplSave: null,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, before, after } from 'node:test';
|
|
2
|
+
import { strict as assert } from 'node:assert';
|
|
3
|
+
import { near, J2000 } from '../helpers';
|
|
4
|
+
import { createDefaultSweData } from '../../src/types';
|
|
5
|
+
import {
|
|
6
|
+
sweSetSidMode, sweGetAyanamsa, sweGetAyanamsaUt,
|
|
7
|
+
sweGetAyanamsaEx, sweGetAyanamsaExUt, sweGetAyanamsaName, sweClose,
|
|
8
|
+
} from '../../src/sweph';
|
|
9
|
+
import { SE_SIDM_LAHIRI, SE_SIDM_TRUE_CITRA, SE_SIDM_FAGAN_BRADLEY, SEFLG_MOSEPH } from '../../src/constants';
|
|
10
|
+
|
|
11
|
+
describe('Ayanamsa (C-style)', () => {
|
|
12
|
+
let swed: ReturnType<typeof createDefaultSweData>;
|
|
13
|
+
|
|
14
|
+
before(() => { swed = createDefaultSweData(); });
|
|
15
|
+
after(() => { sweClose(swed); });
|
|
16
|
+
|
|
17
|
+
describe('Lahiri', () => {
|
|
18
|
+
it('should be ~23.86 at J2000', () => {
|
|
19
|
+
sweSetSidMode(swed, SE_SIDM_LAHIRI, 0, 0);
|
|
20
|
+
const aya = sweGetAyanamsa(swed, J2000);
|
|
21
|
+
near(aya, 23.86, 0.1);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('UT variant should be close to ET', () => {
|
|
25
|
+
sweSetSidMode(swed, SE_SIDM_LAHIRI, 0, 0);
|
|
26
|
+
const et = sweGetAyanamsa(swed, J2000);
|
|
27
|
+
const ut = sweGetAyanamsaUt(swed, J2000);
|
|
28
|
+
near(et, ut, 0.01);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('Ex variant should match basic', () => {
|
|
32
|
+
sweSetSidMode(swed, SE_SIDM_LAHIRI, 0, 0);
|
|
33
|
+
const basic = sweGetAyanamsa(swed, J2000);
|
|
34
|
+
const ex = sweGetAyanamsaEx(swed, J2000, SEFLG_MOSEPH);
|
|
35
|
+
near(ex.daya, basic, 0.001);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('ExUt variant should match basic', () => {
|
|
39
|
+
sweSetSidMode(swed, SE_SIDM_LAHIRI, 0, 0);
|
|
40
|
+
const basic = sweGetAyanamsa(swed, J2000);
|
|
41
|
+
const exUt = sweGetAyanamsaExUt(swed, J2000, SEFLG_MOSEPH);
|
|
42
|
+
near(exUt.daya, basic, 0.01);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('True Citra', () => {
|
|
47
|
+
it('should be ~23.84 at J2000', () => {
|
|
48
|
+
sweSetSidMode(swed, SE_SIDM_TRUE_CITRA, 0, 0);
|
|
49
|
+
const aya = sweGetAyanamsa(swed, J2000);
|
|
50
|
+
near(aya, 23.84, 0.2);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('sweGetAyanamsaName', () => {
|
|
55
|
+
it('should return "Lahiri" for SE_SIDM_LAHIRI', () => {
|
|
56
|
+
assert.strictEqual(sweGetAyanamsaName(SE_SIDM_LAHIRI), 'Lahiri');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should return "Fagan/Bradley" for SE_SIDM_FAGAN_BRADLEY', () => {
|
|
60
|
+
assert.strictEqual(sweGetAyanamsaName(SE_SIDM_FAGAN_BRADLEY), 'Fagan/Bradley');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, before, after } from 'node:test';
|
|
2
|
+
import { strict as assert } from 'node:assert';
|
|
3
|
+
import { near, J2000 } from '../helpers';
|
|
4
|
+
import { createDefaultSweData } from '../../src/types';
|
|
5
|
+
import {
|
|
6
|
+
sweCalc, sweVersion, sweGetPlanetName, sweClose,
|
|
7
|
+
sweGetCurrentFileData, sweGetLibraryPath,
|
|
8
|
+
} from '../../src/sweph';
|
|
9
|
+
import {
|
|
10
|
+
sweSetTidAcc, sweGetTidAcc,
|
|
11
|
+
sweSetDeltaTUserdef, sweSetInterpolateNut,
|
|
12
|
+
sweSetAstroModels, sweGetAstroModels,
|
|
13
|
+
} from '../../src/swephlib';
|
|
14
|
+
import { SE_SUN, SE_MOON, SE_MARS, SEFLG_MOSEPH, SEFLG_JPLEPH, SEFLG_SPEED } from '../../src/constants';
|
|
15
|
+
|
|
16
|
+
describe('Configuration (C-style)', () => {
|
|
17
|
+
let swed: ReturnType<typeof createDefaultSweData>;
|
|
18
|
+
|
|
19
|
+
before(() => { swed = createDefaultSweData(); });
|
|
20
|
+
after(() => { sweClose(swed); });
|
|
21
|
+
|
|
22
|
+
describe('sweVersion', () => {
|
|
23
|
+
it('should return a non-empty string', () => {
|
|
24
|
+
const ver = sweVersion();
|
|
25
|
+
assert.ok(typeof ver === 'string' && ver.length > 0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe('sweGetPlanetName', () => {
|
|
30
|
+
it('should return Sun for SE_SUN', () => {
|
|
31
|
+
assert.strictEqual(sweGetPlanetName(SE_SUN, swed), 'Sun');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should return Moon for SE_MOON', () => {
|
|
35
|
+
assert.strictEqual(sweGetPlanetName(SE_MOON, swed), 'Moon');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should return Mars for SE_MARS', () => {
|
|
39
|
+
assert.strictEqual(sweGetPlanetName(SE_MARS, swed), 'Mars');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
describe('sweGetLibraryPath', () => {
|
|
44
|
+
it('should return empty string when not set', () => {
|
|
45
|
+
assert.strictEqual(sweGetLibraryPath(), '');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('sweGetCurrentFileData', () => {
|
|
50
|
+
it('should return null when no files loaded', () => {
|
|
51
|
+
assert.strictEqual(sweGetCurrentFileData(swed, 0), null);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe('Tidal acceleration', () => {
|
|
56
|
+
it('should set and get tidal acceleration', () => {
|
|
57
|
+
sweSetTidAcc(swed, -25.8);
|
|
58
|
+
near(sweGetTidAcc(swed), -25.8, 0.01);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('Delta-T user-defined', () => {
|
|
63
|
+
it('should not throw when setting', () => {
|
|
64
|
+
sweSetDeltaTUserdef(swed, 0);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('Interpolate nutation', () => {
|
|
69
|
+
it('should not throw when setting', () => {
|
|
70
|
+
sweSetInterpolateNut(swed, false);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('Astro models', () => {
|
|
75
|
+
it('should get and set models', () => {
|
|
76
|
+
sweSetAstroModels(swed, '');
|
|
77
|
+
const am = sweGetAstroModels(swed);
|
|
78
|
+
assert.ok(typeof am === 'string');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('JPL fallback', () => {
|
|
83
|
+
it('should fall back when no JPL file loaded', () => {
|
|
84
|
+
const r = sweCalc(swed, J2000, SE_SUN, SEFLG_JPLEPH | SEFLG_SPEED);
|
|
85
|
+
assert.ok(r.xx[0] > 0, `${r.xx[0]}`);
|
|
86
|
+
assert.strictEqual(r.flags & SEFLG_JPLEPH, 0, 'JPL flag should be cleared');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('sweClose', () => {
|
|
91
|
+
it('should not crash', () => {
|
|
92
|
+
const tmp = createDefaultSweData();
|
|
93
|
+
sweClose(tmp);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|