Skip to main content

roche/
lib.rs

1use pyo3::prelude::*;
2
3pub mod blink;
4pub use blink::blink;
5
6pub mod constants;
7
8pub mod disc_eclipse;
9pub use disc_eclipse::disc_eclipse;
10
11pub mod errors;
12
13pub mod face;
14pub use face::*;
15
16pub mod fblink;
17pub use fblink::*;
18
19pub mod ingress_egress;
20pub use ingress_egress::ingress_egress;
21
22pub mod jacobi;
23pub use jacobi::*;
24
25pub mod lobes;
26pub use lobes::lobe1;
27pub use lobes::lobe2;
28
29pub mod phases;
30pub use phases::*;
31
32pub mod planck;
33pub use planck::*;
34
35pub mod point;
36pub use point::Point;
37
38pub mod pot_min;
39pub use pot_min::*;
40
41pub mod potential;
42pub use potential::*;
43
44pub mod rcirc;
45pub use rcirc::*;
46
47pub mod ref_sphere;
48pub use ref_sphere::*;
49
50pub mod roche_context;
51pub use roche_context::RocheContext;
52
53pub mod roche_shadow;
54pub use roche_shadow::*;
55
56pub mod set_earth;
57pub use set_earth::*;
58
59pub mod solve_triads;
60pub use solve_triads::findi;
61
62pub mod sphere_eclipse;
63pub use sphere_eclipse::*;
64
65pub mod star_eclipse;
66pub use star_eclipse::star_eclipse;
67
68pub mod stream_physics;
69pub use stream_physics::*;
70
71pub mod vec3;
72pub use vec3::Vec3;
73
74pub mod vel_transform;
75pub use vel_transform::vel_transform;
76
77pub mod vstream_physics;
78pub use vstream_physics::*;
79
80pub mod x_lagrange;
81pub use x_lagrange::*;
82
83pub mod zeta_rlobe_eggleton;
84pub use zeta_rlobe_eggleton::*;
85
86
87#[pyclass(from_py_object, eq, eq_int)]
88#[derive(Debug, PartialEq, Eq, Clone, Copy)]
89pub enum Star {
90    Primary = 1,
91    Secondary = 2,
92}
93
94pub type Etype = Vec<(f64, f64)>;
95
96// Python module
97#[pymodule]
98fn roche(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
99    m.add_class::<point::Point>()?;
100    m.add_class::<Star>()?;
101    m.add_class::<vec3::Vec3>()?;
102    m.add_function(wrap_pyfunction!(face::face, m)?)?;
103    m.add_function(wrap_pyfunction!(fblink::fblink, m)?)?;
104    m.add_function(wrap_pyfunction!(ingress_egress::ingress_egress_wrapper, m)?)?;
105    m.add_function(wrap_pyfunction!(jacobi::jacobi, m)?)?;
106    m.add_function(wrap_pyfunction!(lobes::lobe1, m)?)?;
107    m.add_function(wrap_pyfunction!(lobes::lobe2, m)?)?;
108    m.add_function(wrap_pyfunction!(lobes::vlobe1, m)?)?;
109    m.add_function(wrap_pyfunction!(lobes::vlobe2, m)?)?;
110    m.add_function(wrap_pyfunction!(phases::wdradius, m)?)?;
111    m.add_function(wrap_pyfunction!(phases::wdphases, m)?)?;
112    m.add_function(wrap_pyfunction!(phases::bsphases, m)?)?;
113    m.add_function(wrap_pyfunction!(planck::planck, m)?)?;
114    m.add_function(wrap_pyfunction!(planck::dplanck, m)?)?;
115    m.add_function(wrap_pyfunction!(planck::dlpdlt, m)?)?;
116    m.add_function(wrap_pyfunction!(potential::rpot, m)?)?;
117    m.add_function(wrap_pyfunction!(potential::rpot1, m)?)?;
118    m.add_function(wrap_pyfunction!(potential::rpot2, m)?)?;
119    m.add_function(wrap_pyfunction!(potential::drpot, m)?)?;
120    m.add_function(wrap_pyfunction!(potential::drpot1, m)?)?;
121    m.add_function(wrap_pyfunction!(potential::drpot2, m)?)?;
122    m.add_function(wrap_pyfunction!(potential::rpot_val, m)?)?;
123    m.add_function(wrap_pyfunction!(potential::rpot_val_grad, m)?)?;
124    m.add_function(wrap_pyfunction!(rcirc::rcirc, m)?)?;
125    m.add_function(wrap_pyfunction!(ref_sphere::ref_sphere, m)?)?;
126    m.add_function(wrap_pyfunction!(roche_shadow::roche_shadow, m)?)?;
127    m.add_function(wrap_pyfunction!(set_earth::set_earth_iangle, m)?)?;
128    m.add_function(wrap_pyfunction!(set_earth::set_earth, m)?)?;
129    m.add_function(wrap_pyfunction!(sphere_eclipse::sphere_eclipse_wrapper, m)?)?;
130    m.add_function(wrap_pyfunction!(sphere_eclipse::sphere_eclipse_vector_wrapper, m)?)?;
131    m.add_function(wrap_pyfunction!(solve_triads::findi, m)?)?;
132    m.add_function(wrap_pyfunction!(solve_triads::findq, m)?)?;
133    m.add_function(wrap_pyfunction!(solve_triads::findphi, m)?)?;
134    m.add_function(wrap_pyfunction!(stream_physics::stradv_wrapper, m)?)?;
135    m.add_function(wrap_pyfunction!(stream_physics::rocacc, m)?)?;
136    m.add_function(wrap_pyfunction!(stream_physics::strinit, m)?)?;
137    m.add_function(wrap_pyfunction!(stream_physics::stream, m)?)?;
138    m.add_function(wrap_pyfunction!(stream_physics::streamr, m)?)?;
139    m.add_function(wrap_pyfunction!(stream_physics::strmnx_wrapper, m)?)?;
140    m.add_function(wrap_pyfunction!(stream_physics::brightspot_position, m)?)?;
141    m.add_function(wrap_pyfunction!(vstream_physics::vstream_reg, m)?)?;
142    m.add_function(wrap_pyfunction!(x_lagrange::x_l1, m)?)?;
143    m.add_function(wrap_pyfunction!(x_lagrange::x_l1_1, m)?)?;
144    m.add_function(wrap_pyfunction!(x_lagrange::x_l1_2, m)?)?;
145    m.add_function(wrap_pyfunction!(x_lagrange::x_l2, m)?)?;
146    m.add_function(wrap_pyfunction!(x_lagrange::x_l3, m)?)?;
147    m.add_function(wrap_pyfunction!(zeta_rlobe_eggleton::zeta_rlobe_eggleton, m)?)?;
148    m.add_function(wrap_pyfunction!(zeta_rlobe_eggleton::dzetadq_rlobe_eggleton, m)?)?;
149    Ok(())
150}