1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
pub mod rfam;
pub mod prec_nut;
pub mod rot_time;
pub mod vector_matrix;
pub mod fundamental_args;
pub mod ephemerides;
pub mod galactic_coordinates;
pub(crate) mod utils;
///Star-independent astrometry parameters
pub struct UrsaASTROM{
    ///PM time interval (SSB, Julian years)
    pmt: f64,        
    ///SSB to observer (vector, au)
    eb: [f64; 3],
    ///Sun to observer (unit vector)      
    eh: [f64; 3],      
    ///distance from Sun to observer (au)
    em: f64,           
    ///barycentric observer velocity (vector, c)
    v: [f64; 3],
    ///sqrt(1-|v|^2): reciprocal of Lorenz factor       
    bm1:[f64; 3],
    ///bias-precession-nutation matrix        
    bpn:[[f64; 3]; 3],  
    ///longitude + s' + dERA(DUT) (radians)
    along: f64,      
    ///geodetic latitude (radians)
    phi: f64,        
    ///polar motion xp wrt local meridian (radians)
    xpl: f64,        
    ///polar motion yp wrt local meridian (radians)
    ypl: f64, 
    ///sine of geodetic latitude       
    sphi: f64,       
    ///cosine of geodetic latitude
    cphi: f64,       
    ///magnitude of diurnal aberration vector
    diurab: f64,     
    ///"local" Earth rotation angle (radians)
    eral: f64,
    ///refraction constant A (radians)       
    refa: f64,       
    ///refraction constant B (radians)
    refb: f64,       /*  */
 }
 /* (Vectors eb, eh, em and v are all with respect to BCRS axes.) */
 
 ///Body parameters for light deflection
 pub struct UrsaLDBODY {
    bm: f64,            /* mass of the body (solar masses) */
    dl: f64,            /* deflection limiter (radians^2/2) */
    pv:[[f64; 3]; 2],   /* barycentric PV of the body (au, au/day) */
 } 
 
 pub mod all{
 use crate::*;
 /* Astronomy/Calendars */
 fn ursa_cal2jd(iy:i32, im:i32, id: i32, djm0: &mut f64, djm: &mut f64)-> i32{ todo!() }
 fn ursa_epb(dj1: f64, dj2: f64)->f64{ todo!() }
 fn ursa_epb2jd(epb: f64, djm0: &mut f64, djm: &mut f64)->f64{ todo!() }
 fn ursa_epj(dj1:f64, dj2:f64)->f64{todo!() }
 fn ursa_epj2jd(epj:f64, djm0: &mut f64, djm: &mut f64){todo!()}
 fn ursa_Jd2cal(dj1:f64, dj2:f64,
                      iy: &mut i32, im: &mut i32, id: &mut i32, fd: &mut f64){todo!()}
 fn ursa_Jdcalf(ndp:i32, dj1: f64, dj2: f64, iymdf: &[i32; 4])->f64{todo!()}
 
 /* Astronomy/Astrometry */
 fn ursa_ab(pnat: &[f64; 3], v: [f64; 3], s: f64, bm1: f64,
            ppr: &mut [f64; 3]){todo!()}
 fn ursa_apcg(date1: f64, date2: f64,
              ebpv: &[[f64; 3]; 2], ehp: &[f64;3],
              astrom: &mut UrsaASTROM ){todo!()}
 fn ursa_apcg13(date1:f64, date2: f64, astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apci(date1:f64, date2:f64,
              ebpv: &[[f64;3];2], ehp: &[f64;3],
              x:f64, y:f64, s:f64,
              astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apci13(date1:f64, date2:f64,
                astrom: &mut UrsaASTROM, eo: &mut f64){todo!()}
 fn ursa_apco(date1: f64, date2:f64 ,
              ebpv: &[[f64; 3];2], ehp: [f64; 3],
              x: f64, y: f64, s: f64, theta: f64,
              elong: f64, phi: f64, hm: f64,
              xp: f64, yp: f64, sp: f64,
              refa: f64, refb: f64,
              astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apco13(utc1: f64, utc2: f64, dut1: f64,
               elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
               phpa: f64, tc: f64, rh: f64, wl: f64,
               astrom: &mut UrsaASTROM, eo: &mut f64)->i32{todo!()}
 fn ursa_apcs(date1: f64, date2: f64, pv: &[[f64;3];2],
              ebpv: &[[f64;3];2], ehp: [f64; 3],
              astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apcs13(date1: f64, date2: f64, pv: &[[f64; 3]; 2],
                astrom: &mut UrsaASTROM){todo!()}
 fn ursa_aper(theta: f64, astrom: &mut UrsaASTROM){todo!()}
 fn ursa_aper13(ut11: f64, ut12: f64, astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apio(sp: f64, theta: f64,
              elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
              refa: f64, refb: f64,
              astrom: &mut UrsaASTROM){todo!()}
 fn ursa_apio13(utc1: f64, utc2: f64, dut1: f64,
              elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
              phpa: f64, tc: f64, rh: f64, wl: f64,
              astrom: &mut UrsaASTROM)->i32{todo!()}
 fn ursa_atcc13(rc: f64, dc: f64,
                pr: f64, pd: f64, px: f64, rv: f64,
                date1: f64, date2: f64,
                ra: &mut f64, da: &mut f64){todo!()}
 fn ursa_atccq(rc: f64, dc: f64,
               pr: f64, pd: f64, px: f64, rv: f64,
               astrom: &mut UrsaASTROM, ra: &mut f64, da: &mut f64){todo!()}
 fn ursa_atci13(rc: f64, dc: f64,
                pr: f64, pd: f64, px: f64, rv: f64,
                date1: f64, date2: f64,
                ri: &mut f64, di: &mut f64, eo: &mut f64){todo!()}
 fn ursa_atciq(rc: f64, dc: f64, pr: f64, pd: f64,
               px: f64, rv: f64, astrom: &mut UrsaASTROM,
               ri: &mut f64, di: &mut f64){todo!()}
 fn ursa_atciqn(rc: f64, dc: f64, pr: f64, pd: f64,
                px: f64, rv: f64, astrom: &mut UrsaASTROM,
                n: i32, b: &[UrsaLDBODY], ri: &mut f64 , di: &mut f64){todo!()}
 fn ursa_atciqz(rc: f64, dc: f64, astrom: &mut UrsaASTROM,
                ri: &mut f64, di: &mut f64){todo!()}
 fn ursa_atco13(rc: f64, dc: f64,
               pr: f64, pd: f64, px: f64, rv: f64,
               utc1: f64, utc2: f64, dut1: f64,
               elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
               phpa:f64, tc: f64, rh: f64, wl: f64,
               aob: &mut f64, zob: &mut f64, hob: &mut f64,
               dob: &mut f64, rob: &mut f64, eo: &mut f64)->i32{todo!()}
 fn ursa_atic13(ri: f64, di: f64,
                date1: f64, date2: f64,
                rc: &mut f64, dc: &mut f64, eo: &mut f64){todo!()}
 fn ursa_aticq(ri: f64, di: f64, astrom: &mut UrsaASTROM,
               rc: &mut f64, dc: &mut f64){todo!()}
 fn ursa_aticqn(ri: f64, di: f64, astrom: &mut UrsaASTROM,
                n: i32, b: &[UrsaLDBODY], rc: &mut f64, dc: &mut f64){todo!()}
 fn ursa_atio13(ri: f64, di: f64,
               utc1: f64, utc2: f64, dut1: f64,
               elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
               phpa:f64, tc: f64, rh: f64, wl: f64,
               aob: &mut f64, zob: &mut f64, hob: &mut f64,
               dob: &mut f64, rob: &mut f64)-> i32{todo!()}
 fn ursa_atioq(ri: f64, di: &f64, astrom: &UrsaASTROM,
               aob: &mut f64, zob: &mut f64,
               hob: &mut f64, dob: &mut f64, rob: &mut f64){todo!()}
 fn ursa_atoc13(type_t:&String , ob1: f64, ob2: f64,
               utc1: f64, utc2: f64, dut1: f64,
               elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
               phpa:f64, tc: f64, rh: f64, wl: f64,
               rc: &mut f64, dc: &mut f64)->i32{todo!()}
 fn ursa_atoi13(type_t: &String, ob1: f64, ob2: f64,
               utc1: f64, utc2: f64, dut1: f64,
               elong: f64, phi: f64, hm: f64, xp: f64, yp: f64,
               phpa:f64, tc: f64, rh: f64, wl: f64,
               ri: &mut f64, di: &mut f64)->i32{todo!()}
 fn ursa_atoiq(type_t: &String,
               ob1: f64, ob2: f64, astrom: &UrsaASTROM,
               ri: &mut f64, di: &mut f64){todo!()}
 fn ursa_ld(bm: f64, p: &[f64; 3], q: &[f64; 3], e: &[f64; 3],
            em: f64, dlim: f64, p1: &mut[f64; 3]){todo!()}
 fn ursa_ldn(n: i32, b: &[UrsaLDBODY], ob: &[f64; 3], sc:&[f64; 3],
             sn: &mut [f64; 3]){todo!()}
 fn ursa_ldsun(p: &[f64; 3], e: &[f64; 3], em: f64, p1: &mut [f64; 3]){todo!()}
 fn ursa_pmpx(rc: f64, dc: f64, pr: f64, pd: f64,
              px: f64, rv: f64, pmt: f64, pob: &[f64; 3],
              pco:&mut[f64; 3]){todo!()}
 fn ursa_pmsafe(ra1: f64, dec1: f64, pmr1: f64, pmd1: f64,
               px1: f64, rv1: f64,
               ep1a: f64, ep1b: f64, ep2a: f64, ep2b: f64,
               ra2: &mut f64, dec2: &mut f64, pmr2: &mut f64, pmd2: &mut f64,
               px2: &mut f64, rv2: &mut f64)->i32{todo!()}
 fn ursa_pvtob(elong: f64, phi: f64, height: f64, xp: f64,
               yp: f64, sp: f64, theta: f64, pv: &mut [[f64; 3]; 2]){todo!()}
 fn ursa_refco(phpa:f64, tc: f64, rh: f64, wl: f64,
               refa: &mut f64, refb: &mut f64){todo!()}
 
 /* Astronomy/Ephemerides */
 pub use ephemerides::epv00::epv00   as  ursa_epv00;
 pub use ephemerides::moon98::moon98 as ursa_moon98;
 pub use ephemerides::plan94::plan94 as ursa_plan94;
 
 /* Astronomy/FundamentalArgs */
 pub use fundamental_args::fad03::fad03 as ursa_fad03;
 pub use fundamental_args::fae03::fae03 as ursa_fae03;
 pub use fundamental_args::faf03::faf03 as ursa_faf03;
 pub use fundamental_args::faju03::faju03 as ursa_faju03;
 pub use fundamental_args::fal03::fal03 as ursa_fal03;
 pub use fundamental_args::falp03::falp03 as ursa_falp03;
 pub use fundamental_args::fama03::fama03 as ursa_fama03;
 pub use fundamental_args::fame03::fame03 as ursa_fame03;
 pub use fundamental_args::fane03::fane03 as ursa_fane03;
 pub use fundamental_args::faom03::faom03 as ursa_faom03;
 pub use fundamental_args::fapa03::fapa03 as ursa_fapa03;
 pub use fundamental_args::fasa03::fasa03 as ursa_fasa03;
 pub use fundamental_args::faur03::faur03 as ursa_faur03;
 pub use fundamental_args::fave03::fave03 as ursa_fave03;
 
 /* Astronomy/PrecNutPolar */
 pub use prec_nut::bi00::bi00 as ursa_bi00;
 pub use prec_nut::bp00::bp00 as ursa_bp00;
 pub use prec_nut::bp06::bp06 as ursa_bp06;
 pub use prec_nut::bpn2xy::bpn2xy as ursa_bpn2xy;
 pub use prec_nut::c2i00a::c2i00a as ursa_c2i00a;
 pub use prec_nut::c2i00b::c2i00b as ursa_c2i00b;
 pub use prec_nut::c2i06a::c2i06a as ursa_c2i06a;
 pub use prec_nut::c2ibpn::c2ibpn as ursa_c2ibpn;
 pub use prec_nut::c2ixy::c2ixy as ursa_c2ixy;
 pub use prec_nut::c2ixys::c2ixys as c2ixys;
 pub use prec_nut::c2t00a::c2t00a as ursa_c2t00a;
 pub use prec_nut::c2t00b::c2t00b as ursa_c2t00b;
 pub use prec_nut::c2t06a::c2t06a as ursa_c2t06a;
 pub use prec_nut::c2tcio::c2tcio as ursa_c2tcio;
 pub use prec_nut::c2teqx::c2teqx as ursa_c2teqx;
 pub use prec_nut::c2tpe::c2tpe as ursa_c2tpe;
 pub use prec_nut::c2txy::c2txy as ursa_c2txy;
 pub use prec_nut::eo06a::eo06a as ursa_eo06a;
 pub use prec_nut::eors::eors as ursa_eors;
 pub use prec_nut::fw2m::fw2m as ursa_fw2m;
 pub use prec_nut::fw2xy::fw2xy as ursa_fw2xy;
 pub use prec_nut::ltp::ltp as ursa_ltp;
 pub use prec_nut::ltpb::ltpb as ursa_ltpb;
 pub use prec_nut::ltpecl::ltpecl as ursa_ltpecl;
 pub use prec_nut::ltpequ::ltpequ as ursa_ltpequ;
 pub use prec_nut::num00a::num00a as ursa_num00a;
 pub use prec_nut::num00b::num00b as ursa_num00b;
 pub use prec_nut::num06a::num06a as ursa_num06a;
 pub use prec_nut::numat::numat as ursa_numat;
 pub use prec_nut::nut00a::nut00a as ursa_nut00a;
 pub use prec_nut::nut00b::nut00b as ursa_nut00b;
 pub use prec_nut::nut06a::nut06a as ursa_nut06a;
 pub use prec_nut::nut80::nut80 as ursa_nut80;
 pub use prec_nut::nutm80::nutm80 as ursa_nutm80;
 pub use prec_nut::obl06::obl06 as ursa_obl06;
 pub use prec_nut::obl80::obl80 as ursa_obl80;
 pub use prec_nut::p06e::p06e as ursa_p06e;
 pub use prec_nut::pb06::pb06 as ursa_pb06;
 pub use prec_nut::pwf06::pfw06 as ursa_pfw06;
 pub use prec_nut::pmat00::pmat00 as ursa_pmat00;
 pub use prec_nut::pmat06::pmat06 as ursa_pmat06;
 pub use prec_nut::pmat76::pmat76 as ursa_pmat76;
 pub use prec_nut::pn00::pn00 as ursa_pn00;
 pub use prec_nut::pn00a::pn00a as ursa_pn00a;
 pub use prec_nut::pn00b::pn00b as ursa_pn00b;
 pub use prec_nut::pn06::pn06 as ursa_pn06;
 pub use prec_nut::pn06a::pn06a as ursa_pn06a;
 pub use prec_nut::pnm00a::pnm00a as ursa_pnm00a;
 pub use prec_nut::pn00b::pn00b as ursa_pnm00b;
 pub use prec_nut::pnm06a::pnm06a as ursa_pnm06a;
 pub use prec_nut::pom00::pom00 as ursa_pom00;
 pub use prec_nut::pr00::pr00 as ursa_pr00;
 pub use prec_nut::prec76::prec76 as ursa_prec76;
 pub use prec_nut::s00::s00 as ursa_s00;
 pub use prec_nut::s00a::s00a as ursa_s00a;
 pub use prec_nut::s00b::s00b as ursa_s00b;
 pub use prec_nut::s06::s06 as ursa_s06;
 pub use prec_nut::s06a::s06a as ursa_s06a;
 pub use prec_nut::sp00::sp00 as ursa_sp00;
 pub use prec_nut::xy06::xy06 as ursa_xy06;
 pub use prec_nut::xys00a::xys00a as ursa_xys00a;
 pub use prec_nut::xys00b::xys00b as ursa_xys00b;
 pub use prec_nut::xys06::xys06a as ursa_xys06a;
 
 /* Astronomy/RotationAndTime */
 pub use rot_time::ee00::ee00 as ursa_ee00;
 pub use rot_time::ee0a::ee00a as ursa_ee00a;
 pub use rot_time::ee0b::ee00b as ursa_ee00b;
 pub use rot_time::ee06::ee06a as ursa_ee06a;
 pub use rot_time::eect00::eect00 as ursa_eect00;
 pub use rot_time::eqeq94::eqeq94 as ursa_eqeq94;
 pub use rot_time::era00::era00 as ursa_era00;
 pub use rot_time::gmst00::gmst00 as ursa_gmst00;
 pub use rot_time::gmst06::gmst06 as ursa_gmst06;
 pub use rot_time::gmst82::gmst82 as ursa_gmst82;
 pub use rot_time::gst00a::gst00a as ursa_gst00a;
 pub use rot_time::gst06::gst06 as ursa_gst06;
 pub use rot_time::gst06a::gst06a as ursa_gst06a;
 pub use rot_time::gst94::gst94 as ursa_gst94;
 
 /* Astronomy/SpaceMotion */
 fn ursa_pvstar(pv: &[[f64; 3]; 2], ra: &mut f64, dec: &mut f64,
               pmr: &mut f64, pmd: &mut f64, px: &mut f64, rv: &mut f64)->i32{todo!()}
 fn ursa_starpv(ra: f64,  dec: f64,
               pmr: f64, pmd: f64, px: f64, rv: f64,
               pv: &mut [[f64; 3]; 2])->i32{todo!()}
 
 /* Astronomy/StarCatalogs */
 
 fn ursa_fk425(r1950: f64, d1950: f64,
               dr1950: f64, dd1950: f64,
               p1950: f64, v1950: f64,
               r2000: &mut f64, d2000: &mut f64,
               dr2000: &mut f64, dd2000: &mut f64,
               p2000: &mut f64, v2000: &mut f64){todo!()}
 fn ursa_fk45z(r1950: f64, d1950: f64, bepoch: f64,
               r2000: &mut f64, d2000: &mut f64){todo!()}
 fn ursa_fk524(r2000: f64, d2000: f64,
               dr2000: f64, dd2000: f64,
               p2000: f64, v2000: f64,
               r1950: &mut f64, d1950: &mut f64,
               dr1950: &mut f64, dd1950: &mut f64,
               p1950: &mut f64, v1950: &mut f64){todo!()}
 fn ursa_fk52h(r5: f64, d5: f64,
               dr5: f64, dd5: f64, px5: f64, rv5: f64,
               rh: &mut f64, dh: &mut f64,
               drh: &mut f64, ddh: &mut f64, pxh: &mut f64, rvh: &mut f64){todo!()}
 fn ursa_fk54z(r2000: f64, d2000: f64, bepoch: f64,
               r1950: &mut f64, d1950: &mut f64,
               dr1950:&mut f64, dd1950: &mut f64){todo!()}
 fn ursa_fk5hip(r5h: &[[f64; 3];3], s5h: &[f64; 3]){todo!()}
 fn ursa_fk5hz(r5: f64, d5: f64, date1: f64, date2: f64,
               rh: &mut f64, dh: &mut f64){todo!()}
 fn ursa_h2fk5(rh: f64, dh: f64,
               drh: f64, ddh: f64, pxh: f64, rvh: f64,
               r5: &mut f64, d5:&mut f64,
               dr5:&mut f64, dd5:&mut f64, px5:&mut f64, rv5:&mut f64){todo!()}
 fn ursa_hfk5z(rh: f64, dh: f64, date1: f64, date2: f64,
               r5:&mut f64, d5:&mut f64, dr5:&mut f64, dd5:&mut f64){todo!()}
 fn ursa_starpm(ra1: f64, dec1: f64,
               pmr1: f64, pmd1: f64, px1: f64, rv1: f64,
               ep1a: f64, ep1b: f64, ep2a: f64, ep2b: f64,
               ra2:&mut f64, dec2:&mut f64,
               pmr2:&mut f64, pmd2:&mut f64, px2: &mut f64, rv2: &mut f64)->i32{todo!()}
 
 /* Astronomy/EclipticCoordinates */
 fn ursa_eceq06(date1: f64, date2: f64, dl:f64, db: f64,
                dr:&mut f64, dd:&mut f64){todo!()}
 fn ursa_ecm06(date1: f64, date2: f64, rm: &mut [[f64; 3];3]){todo!()}
 fn ursa_eqec06(date1: f64, date2: f64, dr: f64, dd: f64,
                dl:&mut f64, db:&mut f64){todo!()}
 fn ursa_lteceq(epj: f64, dl: f64, db: f64, dr:&mut f64, dd:&mut f64){todo!()}
 fn ursa_ltecm(epj: f64, rm:&mut [[f64; 3];3]){todo!()}
 fn ursa_lteqec(epj: f64, dr: f64, dd: f64, dl: &mut f64, db:&mut f64){todo!()}
 
 /* Astronomy/GalacticCoordinates */
 pub use galactic_coordinates::g2icrs::g2icrs as ursa_g2icrs;
 pub use galactic_coordinates::icrs2g::icrs2g as ursa_icrs2g;
 
 /* Astronomy/GeodeticGeocentric */
 fn ursa_eform(n: i32, a:&mut f64, f:&mut f64)->i32{todo!()}
 fn ursa_gc2gd(n: i32, xyz: &[f64; 3],
              elong:&mut f64, phi: &mut f64, height:&mut f64)->i32{todo!()}
 fn ursa_gc2gde(a: f64, f: f64, xyz: &[f64; 3],
               elong:&mut f64, phi: &mut f64, height:&mut f64)->i32{todo!()}
 fn ursa_gd2gc(n: i32, elong: f64, phi: f64, height: f64,
               xyz: &mut [f64; 3])->i32{todo!()}
 fn ursa_gd2gce(a: f64, f: f64,
               elong: f64, phi: f64, height: f64, xyz: &mut[f64; 3])->i32{todo!()}
 
 /* Astronomy/Timescales */
 fn ursa_d2dtf(scale: &String, ndp: i32, d1: f64, d2: f64,
              iy:&mut i32, im: &mut i32, id: &mut i32, ihmsf: &mut[i32; 4])->i32{todo!()}
 fn ursa_dat(iy: i32, im: i32, id: i32, fd: f64, deltat: &mut f64)->i32{todo!()}
 fn ursa_dtdb(date1: f64, date2: f64,
                ut: f64, elong: f64, u: f64, v: f64)->f64{todo!()}
 fn ursa_dtf2d(scale:&String, iy: i32, im: i32, id: i32,
              ihr: i32, imn: i32, sec: f64, d1:&mut f64, d2:&mut f64)->i32{todo!()}
 fn ursa_taitt(tai1: f64, tai2: f64, tt1: &mut f64, tt2: &mut f64)->i32{todo!()}
 fn ursa_taiut1(tai1: f64, tai2: f64, dta: f64,
               ut11: &mut f64, ut12: &mut f64)->i32{todo!()}
 fn ursa_taiutc(tai1: f64, tai2: f64, utc1: &mut f64, utc2: &mut f64)->i32{todo!()}
 fn ursa_tcbtdb(tai2: f64, tcb2: f64, tdb1: &mut f64, tdb2: &mut f64)->i32{todo!()}
 fn ursa_tcgtt(tcg1: f64, tcg2: f64, tt1: &mut f64, tt2: &mut f64)->i32{todo!()}
 fn ursa_tdbtcb(tdb1: f64, tdb2: f64, tcb1: &mut f64, tcb2: &mut f64)->i32{todo!()}
 fn ursa_tdbtt(tdb1: f64, tdb2: f64, dtr: f64,
              tt1: &mut f64, tt2: &mut f64)->i32{todo!()}
 fn ursa_tttai(tt1: f64, tt2: f64, tai1: &mut f64, tai2: &mut f64)->i32{todo!()}
 fn ursa_tttcg(tt1: f64, tt2: f64, tcg1: &mut f64, tcg2: &mut f64)->i32{todo!()}
 fn ursa_tttdb(tt1: f64, tt2: f64, dtr: f64,
              tdb1: &mut f64, tdb2: &mut f64)->i32{todo!()}
 fn ursa_ttut1(tt1: f64, tt2: f64, dt: f64,
              ut11: &mut f64, ut12: &mut f64)->i32{todo!()}
 fn ursa_ut1tai(ut11: f64, ut12: f64, dta: f64,
               tai1: &mut f64, tai2: &mut f64)->i32{todo!()}
 fn ursa_ut1tt(ut11: f64, ut12: f64, dt: f64,
              tt1: &mut f64, tt2: &mut f64)->i32{todo!()}
 fn ursa_ut1utc(ut11: f64, ut12: f64, dut1: f64,
               utc1: &mut f64, utc2: &mut f64)->i32{todo!()}
 fn ursa_utctai(utc1: f64, utc2: f64, tai1: &mut f64, tai2: &mut f64)->i32{todo!()}
 fn ursa_utcut1(utc1: f64, utc2: f64, dut1: f64,
               ut11: &mut f64, ut12: &mut f64)->i32{todo!()}
 
 /* Astronomy/HorizonEquatorial */
 fn ursa_ae2hd(az: f64, el: f64, phi: f64,
               ha: &mut f64, dec: &mut f64){todo!()}
 fn ursa_hd2ae(ha: f64, dec: f64, phi: f64,
               az: &mut f64, el: &mut f64){todo!()}
 fn ursa_hd2pa(ha: f64, dec: f64, phi: f64)->f64{todo!()}
 
 /* Astronomy/Gnomonic */
 fn ursa_tpors(xi: f64, eta: f64, a: f64, b: f64,
              a01: &mut f64, b01: &mut f64, a02: &mut f64, b02: &mut f64)->i32{todo!()}
 fn ursa_tporv(xi: f64, eta: f64, v: &[f64; 3],
              v01: &mut [f64; 3], v02: &mut [f64; 3])->i32{todo!()}
 fn ursa_tpsts(xi: f64, eta: f64, a0: f64, b0: f64,
               a: &mut f64, b: &mut f64){todo!()}
 fn ursa_tpstv(xi: f64, eta: f64, v0: &[f64; 3], v: &mut [f64; 3]){todo!()}
 fn ursa_tpxes(a: f64, b: f64, a0: f64, b0: f64,
              xi: &mut f64, eta: &mut f64)->i32{todo!()}
 fn ursa_tpxev(v: &[f64; 3], v0: &[f64; 3],  xi: &mut f64, eta: &mut f64)->i32{todo!()}
 
 /* VectorMatrix/AngleOps */
 fn ursa_a2af(ndp: i32, angle: f64, sign: &mut i8, idmsf: &mut [i32; 4]){todo!()}
 fn ursa_a2tf(ndp: i32, angle: f64, sign: &mut i8, ihmsf: &mut [i32; 4]){todo!()}
 fn ursa_af2a(s: char, ideg: i32, iamin: i32, asec: f64, rad: &mut f64)->i32{todo!()}
 pub use vector_matrix::angle_ops::anp::anp as ursa_anp;
 pub use vector_matrix::angle_ops::anpm::anpm as ursa_anpm;
 fn ursa_d2tf(ndp: i32, days: f64, sign: &mut i8, ihmsf: &mut [i32; 4]){todo!()}
 fn ursa_tf2a(s: char, ihour: f64, iamin: i32, sec: f64, rad: &mut f64)->i32{todo!()}
 fn ursa_tf2d(s: char, ihour: f64, iamin: i32, sec: f64, days: &mut f64)->i32{todo!()}
 
 /* VectorMatrix/BuildRotations */
 pub use vector_matrix::build_rotations::rx::rx as ursa_rx;
 pub use vector_matrix::build_rotations::ry::ry as ursa_ry;
 pub use vector_matrix::build_rotations::rz::rz as ursa_rz;
 
 /* VectorMatrix/CopyExtendExtract */
 pub use vector_matrix::copy_ext::cp as ursa_cp;
 pub use vector_matrix::copy_ext::cpv as ursa_cpv;
 pub use vector_matrix::copy_ext::cr as ursa_cr;
 fn ursa_p2pv(p: &[f64; 3], pv: &mut [[f64; 3]; 2]){todo!()}
 fn ursa_pv2p(pv: &[[f64; 3]; 2], p: &mut[f64; 3]){todo!()}
 
 /* VectorMatrix/Initialization */
 pub use vector_matrix::init::ir::ir as ursa_ir;
 pub use vector_matrix::init::z::zp as ursa_zp;
 pub use vector_matrix::init::z::zpv as ursa_zpv;
 pub use vector_matrix::init::z::zr as ursa_zr;
 
 /* VectorMatrix/MatrixOps */
 pub use vector_matrix::matrix_ops::rxr::rxr as ursa_rxr;
 pub use vector_matrix::matrix_ops::tr::tr as ursa_tr;
 
 /* VectorMatrix/MatrixVectorProducts */
 pub use vector_matrix::matrix_vec_prod::rxp as ursa_rxp;
 pub use vector_matrix::matrix_vec_prod::rxpv as ursa_rxpv;
 pub use vector_matrix::matrix_vec_prod::trxp as  ursa_trxp;
 pub use vector_matrix::matrix_vec_prod::trxpv as ursa_trxpv;
 
 /* VectorMatrix/RotationVectors */
 fn ursa_rm2v(r: &[[f64; 3]; 3], w: &mut [f64; 3]){todo!()}
 fn ursa_rv2m(w: &[f64; 3], r: &mut[[f64; 3]; 3]){todo!()}
 
 /* VectorMatrix/SeparationAndAngle */
 fn ursa_pap(a: &[f64; 3], b: &[f64; 3])->f64{todo!()}
 fn ursa_pas(al: f64, ap: f64, bl: f64, bp: f64)->f64{todo!()}
 fn ursa_sepp(a: &[f64; 3], b: &[f64; 3])->f64{todo!()}
 fn ursa_seps(al: f64, ap: f64, bl: f64, bp: f64)->f64{todo!()}
 
 /* VectorMatrix/SphericalCartesian */
 pub use vector_matrix::spherical_cartesian::c2s as ursa_c2s;
 fn ursa_p2s(p: &[f64; 3], theta: &mut f64, phi: &mut f64, r: &mut f64){todo!()}
 fn ursa_pv2s(pv: &[[f64; 3]; 2],
              theta: &mut f64, phi: &mut f64, r: &mut f64,
              td: &mut f64, pd: &mut f64 , rd:& mut f64){todo!()}
 pub use vector_matrix::spherical_cartesian::s2c as ursa_s2c;
 fn ursa_s2p(theta: f64, phi: f64, r: f64, p: &mut [f64;3]){todo!()}
 pub use vector_matrix::spherical_cartesian::s2pv::s2pv as ursa_s2pv;
 
 /* VectorMatrix/VectorOps */
 fn ursa_pdp(a: &[f64;3], b: &[f64; 3])->f64{todo!()}
 pub use vector_matrix::vector_ops::pm::pm as ursa_pm;
 fn ursa_pmp(a: &[f64;3], b: &[f64; 3], amb:&mut [f64; 3]){todo!()}
 fn ursa_pn(p: &[f64; 3], r: &mut f64, u:&mut [f64; 3]){todo!()}
 fn ursa_ppp(a: &[f64;3], b: &[f64; 3], apb: &mut [f64; 3]){todo!()}
 fn ursa_ppsp(a: &[f64;3], s: f64, b: &[f64; 3], apsb:&mut [f64; 3]){todo!()}
 fn ursa_pvdpv(a: &[[f64; 3]; 2], b: &[[f64; 3]; 2], adb: &mut [f64; 2]){todo!()}
 fn ursa_pvm(pv: &[[f64; 3]; 2], r:& mut f64, s: &mut f64){todo!()}
 fn ursa_pvmpv(a: &[[f64; 3]; 2], b: &[[f64; 3]; 2], amb: &mut [[f64; 3]; 2]){todo!()}
 fn ursa_pvppv(a: &[[f64; 3]; 2], b: &[[f64; 3]; 2], apb: &mut [[f64; 3]; 2]){todo!()}
 fn ursa_pvu(dt: f64, pv:& [[f64; 3]; 2], upv: &mut [[f64; 3]; 2]){todo!()}
 fn ursa_pvup(dt: f64, pv: &[[f64; 3]; 2], p: &mut [f64;3]){todo!()}
 fn ursa_pvxpv(a: &[[f64; 3]; 2], b: &[[f64; 3]; 2], axb: &mut [[f64; 3]; 2] ){todo!()}
 pub use vector_matrix::vector_ops::pxp::pxp as ursa_pxp;
 pub use vector_matrix::vector_ops::sxp::s2xpv as ursa_s2xpv;
 pub use vector_matrix::vector_ops::sxp::sxp as ursa_sxp;
 pub use vector_matrix::vector_ops::sxp::sxpv as ursa_sxpv;
 }