kerykeion 4.1.0__py3-none-any.whl → 4.1.1__py3-none-any.whl
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.
Potentially problematic release.
This version of kerykeion might be problematic. Click here for more details.
- kerykeion/aspects/aspects_utils.py +185 -0
- kerykeion/aspects/natal_aspects.py +23 -207
- kerykeion/aspects/synastry_aspects.py +20 -13
- kerykeion/astrological_subject.py +47 -3
- {kerykeion-4.1.0.dist-info → kerykeion-4.1.1.dist-info}/METADATA +1 -1
- {kerykeion-4.1.0.dist-info → kerykeion-4.1.1.dist-info}/RECORD +8 -9
- LICENSE +0 -661
- kerykeion-4.1.0.dist-info/LICENSE +0 -661
- {kerykeion-4.1.0.dist-info → kerykeion-4.1.1.dist-info}/WHEEL +0 -0
- {kerykeion-4.1.0.dist-info → kerykeion-4.1.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
This is part of Kerykeion (C) 2023 Giacomo Battaglia
|
|
4
|
+
"""
|
|
5
|
+
# TODO: Better documentation and unit tests
|
|
6
|
+
|
|
7
|
+
from swisseph import difdeg2n
|
|
8
|
+
from typing import Union
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_aspect_from_two_points(aspects_settings: dict, point_one: Union[float, int], point_two: Union[float, int]):
|
|
12
|
+
"""
|
|
13
|
+
Utility function.
|
|
14
|
+
It calculates the aspects between the 2 points.
|
|
15
|
+
Args: first point, second point.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
distance = abs(difdeg2n(point_one, point_two))
|
|
19
|
+
diff = abs(point_one - point_two)
|
|
20
|
+
|
|
21
|
+
if int(distance) <= aspects_settings[0]["orb"]:
|
|
22
|
+
name = aspects_settings[0]["name"]
|
|
23
|
+
aspect_degrees = aspects_settings[0]["degree"]
|
|
24
|
+
color = aspects_settings[0]["color"]
|
|
25
|
+
verdict = True
|
|
26
|
+
aid = 0
|
|
27
|
+
|
|
28
|
+
elif (
|
|
29
|
+
(aspects_settings[1]["degree"] - aspects_settings[1]["orb"])
|
|
30
|
+
<= int(distance)
|
|
31
|
+
<= (aspects_settings[1]["degree"] + aspects_settings[1]["orb"])
|
|
32
|
+
):
|
|
33
|
+
name = aspects_settings[1]["name"]
|
|
34
|
+
aspect_degrees = aspects_settings[1]["degree"]
|
|
35
|
+
color = aspects_settings[1]["color"]
|
|
36
|
+
verdict = True
|
|
37
|
+
aid = 1
|
|
38
|
+
|
|
39
|
+
elif (
|
|
40
|
+
(aspects_settings[2]["degree"] - aspects_settings[2]["orb"])
|
|
41
|
+
<= int(distance)
|
|
42
|
+
<= (aspects_settings[2]["degree"] + aspects_settings[2]["orb"])
|
|
43
|
+
):
|
|
44
|
+
name = aspects_settings[2]["name"]
|
|
45
|
+
aspect_degrees = aspects_settings[2]["degree"]
|
|
46
|
+
color = aspects_settings[2]["color"]
|
|
47
|
+
verdict = True
|
|
48
|
+
aid = 2
|
|
49
|
+
|
|
50
|
+
elif (
|
|
51
|
+
(aspects_settings[3]["degree"] - aspects_settings[3]["orb"])
|
|
52
|
+
<= int(distance)
|
|
53
|
+
<= (aspects_settings[3]["degree"] + aspects_settings[3]["orb"])
|
|
54
|
+
):
|
|
55
|
+
name = aspects_settings[3]["name"]
|
|
56
|
+
aspect_degrees = aspects_settings[3]["degree"]
|
|
57
|
+
color = aspects_settings[3]["color"]
|
|
58
|
+
verdict = True
|
|
59
|
+
aid = 3
|
|
60
|
+
|
|
61
|
+
elif (
|
|
62
|
+
(aspects_settings[4]["degree"] - aspects_settings[4]["orb"])
|
|
63
|
+
<= int(distance)
|
|
64
|
+
<= (aspects_settings[4]["degree"] + aspects_settings[4]["orb"])
|
|
65
|
+
):
|
|
66
|
+
name = aspects_settings[4]["name"]
|
|
67
|
+
aspect_degrees = aspects_settings[4]["degree"]
|
|
68
|
+
color = aspects_settings[4]["color"]
|
|
69
|
+
verdict = True
|
|
70
|
+
aid = 4
|
|
71
|
+
|
|
72
|
+
elif (
|
|
73
|
+
(aspects_settings[5]["degree"] - aspects_settings[5]["orb"])
|
|
74
|
+
<= int(distance)
|
|
75
|
+
<= (aspects_settings[5]["degree"] + aspects_settings[5]["orb"])
|
|
76
|
+
):
|
|
77
|
+
name = aspects_settings[5]["name"]
|
|
78
|
+
aspect_degrees = aspects_settings[5]["degree"]
|
|
79
|
+
color = aspects_settings[5]["color"]
|
|
80
|
+
verdict = True
|
|
81
|
+
aid = 5
|
|
82
|
+
|
|
83
|
+
elif (
|
|
84
|
+
(aspects_settings[6]["degree"] - aspects_settings[6]["orb"])
|
|
85
|
+
<= int(distance)
|
|
86
|
+
<= (aspects_settings[6]["degree"] + aspects_settings[6]["orb"])
|
|
87
|
+
):
|
|
88
|
+
name = aspects_settings[6]["name"]
|
|
89
|
+
aspect_degrees = aspects_settings[6]["degree"]
|
|
90
|
+
color = aspects_settings[6]["color"]
|
|
91
|
+
verdict = True
|
|
92
|
+
aid = 6
|
|
93
|
+
|
|
94
|
+
elif (
|
|
95
|
+
(aspects_settings[7]["degree"] - aspects_settings[7]["orb"])
|
|
96
|
+
<= int(distance)
|
|
97
|
+
<= (aspects_settings[7]["degree"] + aspects_settings[7]["orb"])
|
|
98
|
+
):
|
|
99
|
+
name = aspects_settings[7]["name"]
|
|
100
|
+
aspect_degrees = aspects_settings[7]["degree"]
|
|
101
|
+
color = aspects_settings[7]["color"]
|
|
102
|
+
verdict = True
|
|
103
|
+
aid = 7
|
|
104
|
+
|
|
105
|
+
elif (
|
|
106
|
+
(aspects_settings[8]["degree"] - aspects_settings[8]["orb"])
|
|
107
|
+
<= int(distance)
|
|
108
|
+
<= (aspects_settings[8]["degree"] + aspects_settings[8]["orb"])
|
|
109
|
+
):
|
|
110
|
+
name = aspects_settings[8]["name"]
|
|
111
|
+
aspect_degrees = aspects_settings[8]["degree"]
|
|
112
|
+
color = aspects_settings[8]["color"]
|
|
113
|
+
verdict = True
|
|
114
|
+
aid = 8
|
|
115
|
+
|
|
116
|
+
elif (
|
|
117
|
+
(aspects_settings[9]["degree"] - aspects_settings[9]["orb"])
|
|
118
|
+
<= int(distance)
|
|
119
|
+
<= (aspects_settings[9]["degree"] + aspects_settings[9]["orb"])
|
|
120
|
+
):
|
|
121
|
+
name = aspects_settings[9]["name"]
|
|
122
|
+
aspect_degrees = aspects_settings[9]["degree"]
|
|
123
|
+
color = aspects_settings[9]["color"]
|
|
124
|
+
verdict = True
|
|
125
|
+
aid = 9
|
|
126
|
+
|
|
127
|
+
elif (
|
|
128
|
+
(aspects_settings[10]["degree"] - aspects_settings[10]["orb"])
|
|
129
|
+
<= int(distance)
|
|
130
|
+
<= (aspects_settings[10]["degree"] + aspects_settings[10]["orb"])
|
|
131
|
+
):
|
|
132
|
+
name = aspects_settings[10]["name"]
|
|
133
|
+
aspect_degrees = aspects_settings[10]["degree"]
|
|
134
|
+
color = aspects_settings[10]["color"]
|
|
135
|
+
verdict = True
|
|
136
|
+
aid = 10
|
|
137
|
+
|
|
138
|
+
else:
|
|
139
|
+
verdict = False
|
|
140
|
+
name = None
|
|
141
|
+
distance = 0
|
|
142
|
+
aspect_degrees = 0
|
|
143
|
+
color = None
|
|
144
|
+
aid = None
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
verdict,
|
|
148
|
+
name,
|
|
149
|
+
distance - aspect_degrees,
|
|
150
|
+
aspect_degrees,
|
|
151
|
+
color,
|
|
152
|
+
aid,
|
|
153
|
+
diff,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def planet_id_decoder(planets_settings: dict, name: str):
|
|
158
|
+
"""
|
|
159
|
+
Check if the name of the planet is the same in the settings and return
|
|
160
|
+
the correct id for the planet.
|
|
161
|
+
"""
|
|
162
|
+
str_name = str(name)
|
|
163
|
+
for planet in planets_settings:
|
|
164
|
+
if planet["name"] == str_name:
|
|
165
|
+
result = planet["id"]
|
|
166
|
+
return result
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def filter_by_settings(planets_settings: dict, init_point_list: list):
|
|
170
|
+
"""
|
|
171
|
+
Creates a list of all the desired
|
|
172
|
+
points filtering by the settings.
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
set_points_name = []
|
|
176
|
+
for p in planets_settings:
|
|
177
|
+
if p["is_active"]:
|
|
178
|
+
set_points_name.append(p["name"])
|
|
179
|
+
|
|
180
|
+
point_list = []
|
|
181
|
+
for l in init_point_list:
|
|
182
|
+
if l["name"] in set_points_name:
|
|
183
|
+
point_list.append(l)
|
|
184
|
+
|
|
185
|
+
return point_list
|
|
@@ -6,216 +6,35 @@
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from kerykeion import AstrologicalSubject
|
|
8
8
|
from logging import getLogger, basicConfig
|
|
9
|
-
from swisseph import difdeg2n
|
|
10
9
|
from typing import Union
|
|
11
10
|
from kerykeion.settings.kerykeion_settings import get_settings
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from kerykeion.aspects.aspects_utils import filter_by_settings, planet_id_decoder, get_aspect_from_two_points
|
|
12
13
|
|
|
13
14
|
logger = getLogger(__name__)
|
|
14
|
-
basicConfig(
|
|
15
|
-
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
16
|
-
level="INFO"
|
|
17
|
-
)
|
|
15
|
+
basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level="INFO")
|
|
18
16
|
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
19
|
class NatalAspects:
|
|
20
20
|
"""
|
|
21
21
|
Generates an object with all the aspects of a birthcart.
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
self.init_point_list = self.user.planets_list + self.user.houses_list
|
|
30
|
-
|
|
31
|
-
self._all_aspects: list = None
|
|
32
|
-
self._relevant_aspects: list = None
|
|
24
|
+
user: AstrologicalSubject
|
|
25
|
+
new_settings_file: Union[Path, None] = None
|
|
26
|
+
_all_aspects: Union[list, None] = None
|
|
27
|
+
_relevant_aspects: Union[list, None] = None
|
|
33
28
|
|
|
34
|
-
def
|
|
35
|
-
|
|
29
|
+
def __post_init__(self):
|
|
30
|
+
settings = get_settings(self.new_settings_file)
|
|
36
31
|
|
|
37
|
-
|
|
32
|
+
self.init_point_list = self.user.planets_list + self.user.houses_list
|
|
38
33
|
|
|
39
34
|
self.planets_settings = settings["celestial_points"]
|
|
40
35
|
self.aspects_settings = settings["aspects"]
|
|
41
36
|
self.axes_orbit_settings = settings["general_settings"]["axes_orbit"]
|
|
42
37
|
|
|
43
|
-
@staticmethod
|
|
44
|
-
def get_aspect_from_two_points(aspects_settings, point_one, point_two):
|
|
45
|
-
"""
|
|
46
|
-
Utility function.
|
|
47
|
-
It calculates the aspects between the 2 points.
|
|
48
|
-
Args: first point, second point.
|
|
49
|
-
"""
|
|
50
|
-
|
|
51
|
-
distance = abs(difdeg2n(point_one, point_two))
|
|
52
|
-
diff = abs(point_one - point_two)
|
|
53
|
-
|
|
54
|
-
if int(distance) <= aspects_settings[0]["orb"]:
|
|
55
|
-
name = aspects_settings[0]["name"]
|
|
56
|
-
aspect_degrees = aspects_settings[0]["degree"]
|
|
57
|
-
color = aspects_settings[0]["color"]
|
|
58
|
-
verdict = True
|
|
59
|
-
aid = 0
|
|
60
|
-
|
|
61
|
-
elif (
|
|
62
|
-
(aspects_settings[1]["degree"] - aspects_settings[1]["orb"])
|
|
63
|
-
<= int(distance)
|
|
64
|
-
<= (aspects_settings[1]["degree"] + aspects_settings[1]["orb"])
|
|
65
|
-
):
|
|
66
|
-
name = aspects_settings[1]["name"]
|
|
67
|
-
aspect_degrees = aspects_settings[1]["degree"]
|
|
68
|
-
color = aspects_settings[1]["color"]
|
|
69
|
-
verdict = True
|
|
70
|
-
aid = 1
|
|
71
|
-
|
|
72
|
-
elif (
|
|
73
|
-
(aspects_settings[2]["degree"] - aspects_settings[2]["orb"])
|
|
74
|
-
<= int(distance)
|
|
75
|
-
<= (aspects_settings[2]["degree"] + aspects_settings[2]["orb"])
|
|
76
|
-
):
|
|
77
|
-
name = aspects_settings[2]["name"]
|
|
78
|
-
aspect_degrees = aspects_settings[2]["degree"]
|
|
79
|
-
color = aspects_settings[2]["color"]
|
|
80
|
-
verdict = True
|
|
81
|
-
aid = 2
|
|
82
|
-
|
|
83
|
-
elif (
|
|
84
|
-
(aspects_settings[3]["degree"] - aspects_settings[3]["orb"])
|
|
85
|
-
<= int(distance)
|
|
86
|
-
<= (aspects_settings[3]["degree"] + aspects_settings[3]["orb"])
|
|
87
|
-
):
|
|
88
|
-
name = aspects_settings[3]["name"]
|
|
89
|
-
aspect_degrees = aspects_settings[3]["degree"]
|
|
90
|
-
color = aspects_settings[3]["color"]
|
|
91
|
-
verdict = True
|
|
92
|
-
aid = 3
|
|
93
|
-
|
|
94
|
-
elif (
|
|
95
|
-
(aspects_settings[4]["degree"] - aspects_settings[4]["orb"])
|
|
96
|
-
<= int(distance)
|
|
97
|
-
<= (aspects_settings[4]["degree"] + aspects_settings[4]["orb"])
|
|
98
|
-
):
|
|
99
|
-
name = aspects_settings[4]["name"]
|
|
100
|
-
aspect_degrees = aspects_settings[4]["degree"]
|
|
101
|
-
color = aspects_settings[4]["color"]
|
|
102
|
-
verdict = True
|
|
103
|
-
aid = 4
|
|
104
|
-
|
|
105
|
-
elif (
|
|
106
|
-
(aspects_settings[5]["degree"] - aspects_settings[5]["orb"])
|
|
107
|
-
<= int(distance)
|
|
108
|
-
<= (aspects_settings[5]["degree"] + aspects_settings[5]["orb"])
|
|
109
|
-
):
|
|
110
|
-
name = aspects_settings[5]["name"]
|
|
111
|
-
aspect_degrees = aspects_settings[5]["degree"]
|
|
112
|
-
color = aspects_settings[5]["color"]
|
|
113
|
-
verdict = True
|
|
114
|
-
aid = 5
|
|
115
|
-
|
|
116
|
-
elif (
|
|
117
|
-
(aspects_settings[6]["degree"] - aspects_settings[6]["orb"])
|
|
118
|
-
<= int(distance)
|
|
119
|
-
<= (aspects_settings[6]["degree"] + aspects_settings[6]["orb"])
|
|
120
|
-
):
|
|
121
|
-
name = aspects_settings[6]["name"]
|
|
122
|
-
aspect_degrees = aspects_settings[6]["degree"]
|
|
123
|
-
color = aspects_settings[6]["color"]
|
|
124
|
-
verdict = True
|
|
125
|
-
aid = 6
|
|
126
|
-
|
|
127
|
-
elif (
|
|
128
|
-
(aspects_settings[7]["degree"] - aspects_settings[7]["orb"])
|
|
129
|
-
<= int(distance)
|
|
130
|
-
<= (aspects_settings[7]["degree"] + aspects_settings[7]["orb"])
|
|
131
|
-
):
|
|
132
|
-
name = aspects_settings[7]["name"]
|
|
133
|
-
aspect_degrees = aspects_settings[7]["degree"]
|
|
134
|
-
color = aspects_settings[7]["color"]
|
|
135
|
-
verdict = True
|
|
136
|
-
aid = 7
|
|
137
|
-
|
|
138
|
-
elif (
|
|
139
|
-
(aspects_settings[8]["degree"] - aspects_settings[8]["orb"])
|
|
140
|
-
<= int(distance)
|
|
141
|
-
<= (aspects_settings[8]["degree"] + aspects_settings[8]["orb"])
|
|
142
|
-
):
|
|
143
|
-
name = aspects_settings[8]["name"]
|
|
144
|
-
aspect_degrees = aspects_settings[8]["degree"]
|
|
145
|
-
color = aspects_settings[8]["color"]
|
|
146
|
-
verdict = True
|
|
147
|
-
aid = 8
|
|
148
|
-
|
|
149
|
-
elif (
|
|
150
|
-
(aspects_settings[9]["degree"] - aspects_settings[9]["orb"])
|
|
151
|
-
<= int(distance)
|
|
152
|
-
<= (aspects_settings[9]["degree"] + aspects_settings[9]["orb"])
|
|
153
|
-
):
|
|
154
|
-
name = aspects_settings[9]["name"]
|
|
155
|
-
aspect_degrees = aspects_settings[9]["degree"]
|
|
156
|
-
color = aspects_settings[9]["color"]
|
|
157
|
-
verdict = True
|
|
158
|
-
aid = 9
|
|
159
|
-
|
|
160
|
-
elif (
|
|
161
|
-
(aspects_settings[10]["degree"] - aspects_settings[10]["orb"])
|
|
162
|
-
<= int(distance)
|
|
163
|
-
<= (aspects_settings[10]["degree"] + aspects_settings[10]["orb"])
|
|
164
|
-
):
|
|
165
|
-
name = aspects_settings[10]["name"]
|
|
166
|
-
aspect_degrees = aspects_settings[10]["degree"]
|
|
167
|
-
color = aspects_settings[10]["color"]
|
|
168
|
-
verdict = True
|
|
169
|
-
aid = 10
|
|
170
|
-
|
|
171
|
-
else:
|
|
172
|
-
verdict = False
|
|
173
|
-
name = None
|
|
174
|
-
distance = 0
|
|
175
|
-
aspect_degrees = 0
|
|
176
|
-
color = None
|
|
177
|
-
aid = None
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return (
|
|
181
|
-
verdict,
|
|
182
|
-
name,
|
|
183
|
-
distance - aspect_degrees,
|
|
184
|
-
aspect_degrees,
|
|
185
|
-
color,
|
|
186
|
-
aid,
|
|
187
|
-
diff,
|
|
188
|
-
)
|
|
189
|
-
|
|
190
|
-
def _p_id_decoder(self, name):
|
|
191
|
-
"""
|
|
192
|
-
Check if the name of the planet is the same in the settings and return
|
|
193
|
-
the correct id for the planet.
|
|
194
|
-
"""
|
|
195
|
-
str_name = str(name)
|
|
196
|
-
for planet in self.planets_settings:
|
|
197
|
-
if planet["name"] == str_name:
|
|
198
|
-
result = planet["id"]
|
|
199
|
-
return result
|
|
200
|
-
|
|
201
|
-
def _filter_by_settings(self, init_point_list):
|
|
202
|
-
"""
|
|
203
|
-
Creates a list of all the desired
|
|
204
|
-
points filtering by the settings.
|
|
205
|
-
"""
|
|
206
|
-
|
|
207
|
-
set_points_name = []
|
|
208
|
-
for p in self.planets_settings:
|
|
209
|
-
if p["is_active"]:
|
|
210
|
-
set_points_name.append(p["name"])
|
|
211
|
-
|
|
212
|
-
point_list = []
|
|
213
|
-
for l in init_point_list:
|
|
214
|
-
if l["name"] in set_points_name:
|
|
215
|
-
point_list.append(l)
|
|
216
|
-
|
|
217
|
-
return point_list
|
|
218
|
-
|
|
219
38
|
@property
|
|
220
39
|
def all_aspects(self):
|
|
221
40
|
"""
|
|
@@ -223,21 +42,19 @@ class NatalAspects:
|
|
|
223
42
|
first all the individual aspects of each planet, second the aspects
|
|
224
43
|
without repetitions.
|
|
225
44
|
"""
|
|
226
|
-
|
|
45
|
+
|
|
227
46
|
if self._all_aspects is not None:
|
|
228
47
|
return self._all_aspects
|
|
229
48
|
|
|
230
|
-
point_list = self.
|
|
49
|
+
point_list = filter_by_settings(self.planets_settings, self.init_point_list)
|
|
231
50
|
|
|
232
51
|
self.all_aspects_list = []
|
|
233
52
|
|
|
234
53
|
for first in range(len(point_list)):
|
|
235
54
|
# Generates the aspects list without repetitions
|
|
236
55
|
for second in range(first + 1, len(point_list)):
|
|
237
|
-
verdict, name, orbit, aspect_degrees, color, aid, diff =
|
|
238
|
-
self.aspects_settings,
|
|
239
|
-
point_list[first]["abs_pos"],
|
|
240
|
-
point_list[second]["abs_pos"]
|
|
56
|
+
verdict, name, orbit, aspect_degrees, color, aid, diff = get_aspect_from_two_points(
|
|
57
|
+
self.aspects_settings, point_list[first]["abs_pos"], point_list[second]["abs_pos"]
|
|
241
58
|
)
|
|
242
59
|
|
|
243
60
|
if verdict == True:
|
|
@@ -252,8 +69,9 @@ class NatalAspects:
|
|
|
252
69
|
"color": color,
|
|
253
70
|
"aid": aid,
|
|
254
71
|
"diff": diff,
|
|
255
|
-
"p1": self.
|
|
256
|
-
"p2":
|
|
72
|
+
"p1": planet_id_decoder(self.planets_settings, point_list[first]["name"]),
|
|
73
|
+
"p2": planet_id_decoder(
|
|
74
|
+
self.planets_settings,
|
|
257
75
|
point_list[second]["name"],
|
|
258
76
|
),
|
|
259
77
|
}
|
|
@@ -270,7 +88,7 @@ class NatalAspects:
|
|
|
270
88
|
Set the list with set_points and creating a list with the names
|
|
271
89
|
or the numbers of the houses.
|
|
272
90
|
"""
|
|
273
|
-
|
|
91
|
+
|
|
274
92
|
if self._relevant_aspects is not None:
|
|
275
93
|
logger.debug("Relevant aspects already calculated, returning cached value")
|
|
276
94
|
return self._relevant_aspects
|
|
@@ -311,17 +129,15 @@ class NatalAspects:
|
|
|
311
129
|
|
|
312
130
|
|
|
313
131
|
if __name__ == "__main__":
|
|
314
|
-
basicConfig(
|
|
315
|
-
level="DEBUG",
|
|
316
|
-
force=True,
|
|
317
|
-
)
|
|
132
|
+
basicConfig(level="DEBUG", force=True)
|
|
318
133
|
johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US")
|
|
319
134
|
|
|
320
135
|
# All aspects
|
|
321
136
|
aspects = NatalAspects(johnny)
|
|
137
|
+
print(aspects.all_aspects)
|
|
322
138
|
|
|
323
139
|
print("\n")
|
|
324
140
|
|
|
325
141
|
# Relevant aspects
|
|
326
142
|
aspects = NatalAspects(johnny)
|
|
327
|
-
|
|
143
|
+
print(aspects.relevant_aspects)
|
|
@@ -8,6 +8,8 @@ from pathlib import Path
|
|
|
8
8
|
from typing import Union
|
|
9
9
|
|
|
10
10
|
from kerykeion.aspects.natal_aspects import NatalAspects
|
|
11
|
+
from kerykeion.settings.kerykeion_settings import get_settings
|
|
12
|
+
from kerykeion.aspects.aspects_utils import filter_by_settings, planet_id_decoder, get_aspect_from_two_points
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class SynastryAspects(NatalAspects):
|
|
@@ -25,13 +27,18 @@ class SynastryAspects(NatalAspects):
|
|
|
25
27
|
self.second_user = kr_object_two
|
|
26
28
|
|
|
27
29
|
self.new_settings_file = new_settings_file
|
|
28
|
-
self._parse_json_settings()
|
|
29
30
|
|
|
30
31
|
self.first_init_point_list = self.first_user.planets_list + self.first_user.houses_list
|
|
31
32
|
self.second_init_point_list = self.second_user.planets_list + self.second_user.houses_list
|
|
32
|
-
|
|
33
|
-
self._all_aspects: list = None
|
|
34
|
-
self._relevant_aspects: list = None
|
|
33
|
+
|
|
34
|
+
self._all_aspects: Union[list, None] = None
|
|
35
|
+
self._relevant_aspects: Union[list, None] = None
|
|
36
|
+
|
|
37
|
+
settings = get_settings(self.new_settings_file)
|
|
38
|
+
|
|
39
|
+
self.planets_settings = settings["celestial_points"]
|
|
40
|
+
self.aspects_settings = settings["aspects"]
|
|
41
|
+
self.axes_orbit_settings = settings["general_settings"]["axes_orbit"]
|
|
35
42
|
|
|
36
43
|
@property
|
|
37
44
|
def all_aspects(self):
|
|
@@ -40,22 +47,21 @@ class SynastryAspects(NatalAspects):
|
|
|
40
47
|
first all the individual aspects of each planet, second the aspects
|
|
41
48
|
whiteout repetitions.
|
|
42
49
|
"""
|
|
43
|
-
|
|
50
|
+
|
|
44
51
|
if self._all_aspects is not None:
|
|
45
52
|
return self._all_aspects
|
|
46
53
|
|
|
47
|
-
f_1 = self.
|
|
48
|
-
|
|
54
|
+
f_1 = filter_by_settings(self.planets_settings, self.first_init_point_list)
|
|
55
|
+
|
|
56
|
+
f_2 = filter_by_settings(self.planets_settings, self.second_init_point_list)
|
|
49
57
|
|
|
50
58
|
self.all_aspects_list = []
|
|
51
59
|
|
|
52
60
|
for first in range(len(f_1)):
|
|
53
61
|
# Generates the aspects list whitout repetitions
|
|
54
62
|
for second in range(len(f_2)):
|
|
55
|
-
verdict, name, orbit, aspect_degrees, color, aid, diff =
|
|
56
|
-
self.aspects_settings,
|
|
57
|
-
f_1[first]["abs_pos"],
|
|
58
|
-
f_2[second]["abs_pos"]
|
|
63
|
+
verdict, name, orbit, aspect_degrees, color, aid, diff = get_aspect_from_two_points(
|
|
64
|
+
self.aspects_settings, f_1[first]["abs_pos"], f_2[second]["abs_pos"]
|
|
59
65
|
)
|
|
60
66
|
|
|
61
67
|
if verdict == True:
|
|
@@ -70,8 +76,9 @@ class SynastryAspects(NatalAspects):
|
|
|
70
76
|
"color": color,
|
|
71
77
|
"aid": aid,
|
|
72
78
|
"diff": diff,
|
|
73
|
-
"p1": self.
|
|
74
|
-
"p2":
|
|
79
|
+
"p1": planet_id_decoder(self.planets_settings, f_1[first]["name"]),
|
|
80
|
+
"p2": planet_id_decoder(
|
|
81
|
+
self.planets_settings,
|
|
75
82
|
f_2[second]["name"],
|
|
76
83
|
),
|
|
77
84
|
}
|
|
@@ -145,7 +145,6 @@ class AstrologicalSubject:
|
|
|
145
145
|
)
|
|
146
146
|
)
|
|
147
147
|
|
|
148
|
-
|
|
149
148
|
self.name = name
|
|
150
149
|
self.year = year
|
|
151
150
|
self.month = month
|
|
@@ -160,7 +159,8 @@ class AstrologicalSubject:
|
|
|
160
159
|
self.zodiac_type = zodiac_type
|
|
161
160
|
self.online = online
|
|
162
161
|
self.json_dir = Path.home()
|
|
163
|
-
|
|
162
|
+
self.geonames_username = geonames_username
|
|
163
|
+
|
|
164
164
|
# This message is set to encourage the user to set a custom geonames username
|
|
165
165
|
if geonames_username is None and online:
|
|
166
166
|
logger.info(
|
|
@@ -179,6 +179,7 @@ class AstrologicalSubject:
|
|
|
179
179
|
"\n" + \
|
|
180
180
|
"********"
|
|
181
181
|
)
|
|
182
|
+
|
|
182
183
|
self.geonames_username = DEFAULT_GEONAMES_USERNAME
|
|
183
184
|
|
|
184
185
|
if not self.city:
|
|
@@ -263,7 +264,50 @@ class AstrologicalSubject:
|
|
|
263
264
|
self.julian_day = float(swe.julday(self.utc.year, self.utc.month, self.utc.day, self.utc_time))
|
|
264
265
|
|
|
265
266
|
def _houses(self) -> None:
|
|
266
|
-
"""
|
|
267
|
+
"""
|
|
268
|
+
Calculate positions and store them in dictionaries
|
|
269
|
+
|
|
270
|
+
https://www.astro.com/faq/fq_fh_owhouse_e.htm
|
|
271
|
+
https://github.com/jwmatthys/pd-swisseph/blob/master/swehouse.c#L685
|
|
272
|
+
hsys = letter code for house system;
|
|
273
|
+
A equal
|
|
274
|
+
E equal
|
|
275
|
+
B Alcabitius
|
|
276
|
+
C Campanus
|
|
277
|
+
D equal (MC)
|
|
278
|
+
F Carter "Poli-Equatorial"
|
|
279
|
+
G 36 Gauquelin sectors
|
|
280
|
+
H horizon / azimut
|
|
281
|
+
I Sunshine solution Treindl
|
|
282
|
+
i Sunshine solution Makransky
|
|
283
|
+
K Koch
|
|
284
|
+
L Pullen SD "sinusoidal delta", ex Neo-Porphyry
|
|
285
|
+
M Morinus
|
|
286
|
+
N equal/1=Aries
|
|
287
|
+
O Porphyry
|
|
288
|
+
P Placidus
|
|
289
|
+
Q Pullen SR "sinusoidal ratio"
|
|
290
|
+
R Regiomontanus
|
|
291
|
+
S Sripati
|
|
292
|
+
T Polich/Page ("topocentric")
|
|
293
|
+
U Krusinski-Pisa-Goelzer
|
|
294
|
+
V equal Vehlow
|
|
295
|
+
W equal, whole sign
|
|
296
|
+
X axial rotation system/ Meridian houses
|
|
297
|
+
Y APC houses
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
if self.zodiac_type == "Sidereal":
|
|
301
|
+
self.houses_degree_ut = swe.houses_ex(
|
|
302
|
+
tjdut=self.julian_day, lat=self.lat, lon=self.lng, hsys=str.encode('P'), flags=swe.FLG_SIDEREAL
|
|
303
|
+
)[0]
|
|
304
|
+
elif self.zodiac_type == "Tropic":
|
|
305
|
+
self.houses_degree_ut = swe.houses(
|
|
306
|
+
tjdut=self.julian_day, lat=self.lat, lon=self.lng, hsys=str.encode('P')
|
|
307
|
+
)[0]
|
|
308
|
+
else:
|
|
309
|
+
raise KerykeionException("Zodiac type not recognized! Please use 'Tropic' or 'Sidereal'")
|
|
310
|
+
|
|
267
311
|
point_type: Literal["Planet", "House"] = "House"
|
|
268
312
|
# creates the list of the house in 360°
|
|
269
313
|
self.houses_degree_ut = swe.houses(self.julian_day, self.lat, self.lng)[0]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
|
|
2
1
|
kerykeion/__init__.py,sha256=UpftP5JxYSfeRAAmXbRas1XGw4V6dNA-FllcFbKlCbo,3874
|
|
3
2
|
kerykeion/aspects/__init__.py,sha256=KAGLkC41PRsRqiV6Ii38HIME-rfTrefiKOOzC5d7Ub0,292
|
|
4
|
-
kerykeion/aspects/
|
|
5
|
-
kerykeion/aspects/
|
|
6
|
-
kerykeion/
|
|
3
|
+
kerykeion/aspects/aspects_utils.py,sha256=TIYh-4xgRWb-5ZPSlhCGHdyPyP8hSTvUsPlt9HML1JQ,5521
|
|
4
|
+
kerykeion/aspects/natal_aspects.py,sha256=BMDuruu4b0Gy2bv0UivFlHDtsBS9Eoe20QIICMQerNY,4907
|
|
5
|
+
kerykeion/aspects/synastry_aspects.py,sha256=lbffXrySvICCVtsXjOtyjQphoDO3HoCmAmFGnp8JMck,3583
|
|
6
|
+
kerykeion/astrological_subject.py,sha256=LsVKt1VEIl-JksNzu0wBF2KWesu7tqlpvnGZAFYSNs8,23682
|
|
7
7
|
kerykeion/charts/__init__.py,sha256=3WzR2n9dr6MDzjTbEQOYpXSFlhfMfga5YWNsPawdbRw,127
|
|
8
8
|
kerykeion/charts/charts_utils.py,sha256=qQMXu5XZCCjvyqL62fzh4JnKLzd_G6u9pcMk6f1DpIc,3197
|
|
9
9
|
kerykeion/charts/kerykeion_chart_svg.py,sha256=DTD1rXc9jm6GLPPsbsTNXbFThy8sQ4Zu-zBTAjT4iwg,66327
|
|
@@ -23,8 +23,7 @@ kerykeion/settings/kr.config.json,sha256=AtRKIRqstmtoCBqhMviXHjqYBzVL8qdCEyHsl3f
|
|
|
23
23
|
kerykeion/sweph/README.md,sha256=L7FtNAJTWtrZNGKa8MX87SjduFYPYxwWhaI5fmtzNZo,73
|
|
24
24
|
kerykeion/sweph/seas_18.se1,sha256=X9nCqhZU43wJpq61WAdueVQJt9xL2UjrwPqn1Kdoa1s,223002
|
|
25
25
|
kerykeion/utilities.py,sha256=l2IuKGP687USF5uzRHJFrNmvzHMSFzZEWliWSIHUjlU,5707
|
|
26
|
-
kerykeion-4.1.
|
|
27
|
-
kerykeion-4.1.
|
|
28
|
-
kerykeion-4.1.
|
|
29
|
-
kerykeion-4.1.
|
|
30
|
-
kerykeion-4.1.0.dist-info/RECORD,,
|
|
26
|
+
kerykeion-4.1.1.dist-info/METADATA,sha256=jqrolNmt4Dnu_yubV_kVhhN-Iq0_1MaaXlrdX4aDJPk,9409
|
|
27
|
+
kerykeion-4.1.1.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
|
28
|
+
kerykeion-4.1.1.dist-info/entry_points.txt,sha256=5SmANYscFDDTdeovHvGQ-cnj0hdFvGoxPaWLCpyDFnQ,49
|
|
29
|
+
kerykeion-4.1.1.dist-info/RECORD,,
|