kerykeion 4.21.0__py3-none-any.whl → 4.22.0__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/natal_aspects.py +18 -9
- kerykeion/astrological_subject.py +60 -9
- kerykeion/charts/charts_utils.py +2 -12
- kerykeion/charts/kerykeion_chart_svg.py +3 -7
- kerykeion/charts/templates/aspect_grid_only.xml +4 -4
- kerykeion/charts/templates/chart.xml +4 -4
- kerykeion/charts/templates/wheel_only.xml +4 -4
- kerykeion/enums.py +4 -0
- kerykeion/ephemeris_data.py +2 -2
- kerykeion/kr_types/kr_literals.py +4 -1
- kerykeion/kr_types/kr_models.py +15 -4
- kerykeion/kr_types/settings_models.py +4 -4
- kerykeion/relationship_score/relationship_score_factory.py +2 -2
- kerykeion/report.py +3 -3
- kerykeion/settings/kr.config.json +44 -44
- kerykeion/utilities.py +55 -15
- {kerykeion-4.21.0.dist-info → kerykeion-4.22.0.dist-info}/METADATA +3 -4
- {kerykeion-4.21.0.dist-info → kerykeion-4.22.0.dist-info}/RECORD +21 -21
- {kerykeion-4.21.0.dist-info → kerykeion-4.22.0.dist-info}/WHEEL +1 -1
- {kerykeion-4.21.0.dist-info → kerykeion-4.22.0.dist-info}/LICENSE +0 -0
- {kerykeion-4.21.0.dist-info → kerykeion-4.22.0.dist-info}/entry_points.txt +0 -0
|
@@ -16,10 +16,10 @@ from kerykeion.kr_types.settings_models import KerykeionSettingsModel
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
AXES_LIST = [
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
19
|
+
"Ascendant",
|
|
20
|
+
"Medium_Coeli",
|
|
21
|
+
"Descendant",
|
|
22
|
+
"Imum_Coeli",
|
|
23
23
|
]
|
|
24
24
|
|
|
25
25
|
|
|
@@ -54,18 +54,23 @@ class NatalAspects:
|
|
|
54
54
|
for first in range(len(active_points_list)):
|
|
55
55
|
# Generates the aspects list without repetitions
|
|
56
56
|
for second in range(first + 1, len(active_points_list)):
|
|
57
|
-
#
|
|
58
|
-
|
|
57
|
+
# AC/DC, MC/IC and North/South nodes are always in opposition
|
|
58
|
+
opposite_pairs = {
|
|
59
|
+
("Ascendant", "Descendant"),
|
|
60
|
+
("Descendant", "Ascendant"),
|
|
61
|
+
("Medium_Coeli", "Imum_Coeli"),
|
|
62
|
+
("Imum_Coeli", "Medium_Coeli"),
|
|
59
63
|
("True_Node", "True_South_Node"),
|
|
60
64
|
("Mean_Node", "Mean_South_Node"),
|
|
61
65
|
("True_South_Node", "True_Node"),
|
|
62
66
|
("Mean_South_Node", "Mean_Node"),
|
|
63
67
|
}
|
|
64
|
-
if (active_points_list[first]["name"], active_points_list[second]["name"]) in
|
|
68
|
+
if (active_points_list[first]["name"], active_points_list[second]["name"]) in opposite_pairs:
|
|
65
69
|
continue
|
|
66
70
|
|
|
67
71
|
aspect = get_aspect_from_two_points(
|
|
68
|
-
self.aspects_settings,
|
|
72
|
+
self.aspects_settings,
|
|
73
|
+
active_points_list[first]["abs_pos"],
|
|
69
74
|
active_points_list[second]["abs_pos"]
|
|
70
75
|
)
|
|
71
76
|
|
|
@@ -109,6 +114,8 @@ class NatalAspects:
|
|
|
109
114
|
self.all_aspects
|
|
110
115
|
|
|
111
116
|
aspects_filtered = []
|
|
117
|
+
|
|
118
|
+
# Only pick aspects for which the is_active setting (specified usually in kr.config.json file) is true.
|
|
112
119
|
for a in self.all_aspects_list:
|
|
113
120
|
if self.aspects_settings[a["aid"]]["is_active"] == True:
|
|
114
121
|
aspects_filtered.append(a)
|
|
@@ -116,6 +123,8 @@ class NatalAspects:
|
|
|
116
123
|
axes_list = AXES_LIST
|
|
117
124
|
counter = 0
|
|
118
125
|
|
|
126
|
+
# Remove aspects where the orbits exceed the maximum orb thresholds specified in the settings
|
|
127
|
+
# (specified usually in kr.config.json file)
|
|
119
128
|
aspects_list_subtract = []
|
|
120
129
|
for a in aspects_filtered:
|
|
121
130
|
counter += 1
|
|
@@ -144,7 +153,7 @@ if __name__ == "__main__":
|
|
|
144
153
|
|
|
145
154
|
# All aspects as a list of dictionaries
|
|
146
155
|
aspects = NatalAspects(johnny)
|
|
147
|
-
print([a.model_dump() for a in aspects.all_aspects])
|
|
156
|
+
#print([a.model_dump() for a in aspects.all_aspects])
|
|
148
157
|
|
|
149
158
|
print("\n")
|
|
150
159
|
|
|
@@ -8,7 +8,9 @@ import swisseph as swe
|
|
|
8
8
|
import logging
|
|
9
9
|
import warnings
|
|
10
10
|
|
|
11
|
+
import math
|
|
11
12
|
from datetime import datetime
|
|
13
|
+
|
|
12
14
|
from functools import cached_property
|
|
13
15
|
from kerykeion.fetch_geonames import FetchGeonames
|
|
14
16
|
from kerykeion.kr_types import (
|
|
@@ -22,7 +24,8 @@ from kerykeion.kr_types import (
|
|
|
22
24
|
HousesSystemIdentifier,
|
|
23
25
|
PerspectiveType,
|
|
24
26
|
Planet,
|
|
25
|
-
Houses
|
|
27
|
+
Houses,
|
|
28
|
+
AxialCusps,
|
|
26
29
|
)
|
|
27
30
|
from kerykeion.utilities import (
|
|
28
31
|
get_number_from_name,
|
|
@@ -144,6 +147,12 @@ class AstrologicalSubject:
|
|
|
144
147
|
true_south_node: KerykeionPointModel
|
|
145
148
|
mean_south_node: KerykeionPointModel
|
|
146
149
|
|
|
150
|
+
# Axes
|
|
151
|
+
asc: KerykeionPointModel
|
|
152
|
+
dsc: KerykeionPointModel
|
|
153
|
+
mc: KerykeionPointModel
|
|
154
|
+
ic: KerykeionPointModel
|
|
155
|
+
|
|
147
156
|
# Houses
|
|
148
157
|
first_house: KerykeionPointModel
|
|
149
158
|
second_house: KerykeionPointModel
|
|
@@ -161,13 +170,15 @@ class AstrologicalSubject:
|
|
|
161
170
|
# Lists
|
|
162
171
|
_houses_list: list[KerykeionPointModel]
|
|
163
172
|
_houses_degree_ut: list[float]
|
|
173
|
+
planets_names_list: list[Planet]
|
|
174
|
+
houses_names_list: list[Houses]
|
|
175
|
+
axial_cusps_names_list: list[AxialCusps]
|
|
164
176
|
|
|
165
177
|
# Enable or disable features
|
|
166
178
|
disable_chiron: Union[None, bool]
|
|
167
179
|
disable_chiron_and_lilith: bool
|
|
168
180
|
|
|
169
|
-
|
|
170
|
-
houses_names_list: list[Houses]
|
|
181
|
+
lunar_phase: LunarPhaseModel
|
|
171
182
|
|
|
172
183
|
def __init__(
|
|
173
184
|
self,
|
|
@@ -436,20 +447,29 @@ class AstrologicalSubject:
|
|
|
436
447
|
Y APC houses
|
|
437
448
|
"""
|
|
438
449
|
|
|
450
|
+
_ascmc = (-1.0, -1.0)
|
|
451
|
+
|
|
439
452
|
if self.zodiac_type == "Sidereal":
|
|
440
|
-
|
|
453
|
+
cusps, ascmc = swe.houses_ex(
|
|
441
454
|
tjdut=self.julian_day,
|
|
442
455
|
lat=self.lat, lon=self.lng,
|
|
443
456
|
hsys=str.encode(self.houses_system_identifier),
|
|
444
457
|
flags=swe.FLG_SIDEREAL
|
|
445
|
-
)
|
|
458
|
+
)
|
|
459
|
+
self._houses_degree_ut = cusps
|
|
460
|
+
_ascmc = ascmc
|
|
446
461
|
|
|
447
462
|
elif self.zodiac_type == "Tropic":
|
|
448
|
-
|
|
463
|
+
cusps, ascmc = swe.houses(
|
|
449
464
|
tjdut=self.julian_day, lat=self.lat,
|
|
450
465
|
lon=self.lng,
|
|
451
466
|
hsys=str.encode(self.houses_system_identifier)
|
|
452
|
-
)
|
|
467
|
+
)
|
|
468
|
+
self._houses_degree_ut = cusps
|
|
469
|
+
_ascmc = ascmc
|
|
470
|
+
|
|
471
|
+
else:
|
|
472
|
+
raise KerykeionException("Not a valid zodiac type: ", self.zodiac_type)
|
|
453
473
|
|
|
454
474
|
point_type: PointType = "House"
|
|
455
475
|
|
|
@@ -485,6 +505,19 @@ class AstrologicalSubject:
|
|
|
485
505
|
self.twelfth_house,
|
|
486
506
|
]
|
|
487
507
|
|
|
508
|
+
# AxialCusps
|
|
509
|
+
point_type: PointType = "AxialCusps"
|
|
510
|
+
|
|
511
|
+
# Calculate ascendant and medium coeli
|
|
512
|
+
self.ascendant = get_kerykeion_point_from_degree(_ascmc[0], "Ascendant", point_type=point_type)
|
|
513
|
+
self.medium_coeli = get_kerykeion_point_from_degree(_ascmc[1], "Medium_Coeli", point_type=point_type)
|
|
514
|
+
# For descendant and imum coeli there exist no Swiss Ephemeris library calculation function,
|
|
515
|
+
# but they are simply opposite the the ascendant and medium coeli
|
|
516
|
+
dsc_deg = math.fmod(_ascmc[0] + 180, 360)
|
|
517
|
+
ic_deg = math.fmod(_ascmc[1] + 180, 360)
|
|
518
|
+
self.descendant = get_kerykeion_point_from_degree(dsc_deg, "Descendant", point_type=point_type)
|
|
519
|
+
self.imum_coeli = get_kerykeion_point_from_degree(ic_deg, "Imum_Coeli", point_type=point_type)
|
|
520
|
+
|
|
488
521
|
def _initialize_planets(self) -> None:
|
|
489
522
|
"""Defines body positon in signs and information and
|
|
490
523
|
stores them in dictionaries"""
|
|
@@ -505,8 +538,10 @@ class AstrologicalSubject:
|
|
|
505
538
|
true_node_deg = swe.calc(self.julian_day, 11, self._iflag)[0][0]
|
|
506
539
|
# For south nodes there exist no Swiss Ephemeris library calculation function,
|
|
507
540
|
# but they are simply opposite the north node.
|
|
508
|
-
mean_south_node_deg = (mean_node_deg + 180
|
|
509
|
-
true_south_node_deg = (true_node_deg + 180
|
|
541
|
+
mean_south_node_deg = math.fmod(mean_node_deg + 180, 360)
|
|
542
|
+
true_south_node_deg = math.fmod(true_node_deg + 180, 360)
|
|
543
|
+
|
|
544
|
+
# AC/DC axis and MC/IC axis were already calculated previously...
|
|
510
545
|
|
|
511
546
|
self.sun = get_kerykeion_point_from_degree(sun_deg, "Sun", point_type=point_type)
|
|
512
547
|
self.moon = get_kerykeion_point_from_degree(moon_deg, "Moon", point_type=point_type)
|
|
@@ -523,6 +558,13 @@ class AstrologicalSubject:
|
|
|
523
558
|
self.mean_south_node = get_kerykeion_point_from_degree(mean_south_node_deg, "Mean_South_Node", point_type=point_type)
|
|
524
559
|
self.true_south_node = get_kerykeion_point_from_degree(true_south_node_deg, "True_South_Node", point_type=point_type)
|
|
525
560
|
|
|
561
|
+
# Note that in whole-sign house systems ac/dc or mc/ic axes may not align with house cusps.
|
|
562
|
+
# Therefore, for the axes we need to calculate house positions explicitly too.
|
|
563
|
+
self.ascendant.house = get_planet_house(self.ascendant.abs_pos, self._houses_degree_ut)
|
|
564
|
+
self.descendant.house = get_planet_house(self.descendant.abs_pos, self._houses_degree_ut)
|
|
565
|
+
self.medium_coeli.house = get_planet_house(self.medium_coeli.abs_pos, self._houses_degree_ut)
|
|
566
|
+
self.imum_coeli.house = get_planet_house(self.imum_coeli.abs_pos, self._houses_degree_ut)
|
|
567
|
+
|
|
526
568
|
self.sun.house = get_planet_house(sun_deg, self._houses_degree_ut)
|
|
527
569
|
self.moon.house = get_planet_house(moon_deg, self._houses_degree_ut)
|
|
528
570
|
self.mercury.house = get_planet_house(mercury_deg, self._houses_degree_ut)
|
|
@@ -577,6 +619,9 @@ class AstrologicalSubject:
|
|
|
577
619
|
|
|
578
620
|
# FIXME: Update after removing planets_list
|
|
579
621
|
self.planets_names_list = [planet["name"] for planet in planets_list]
|
|
622
|
+
self.axial_cusps_names_list = [
|
|
623
|
+
axis["name"] for axis in [self.ascendant, self.descendant, self.medium_coeli, self.imum_coeli]
|
|
624
|
+
]
|
|
580
625
|
|
|
581
626
|
# Check in retrograde or not:
|
|
582
627
|
for planet in planets_list:
|
|
@@ -589,11 +634,17 @@ class AstrologicalSubject:
|
|
|
589
634
|
elif planet_number == 1100: # Number of True South Node
|
|
590
635
|
planet_number = 11 # Number of True North Node
|
|
591
636
|
|
|
637
|
+
|
|
592
638
|
if swe.calc(self.julian_day, planet_number, self._iflag)[0][3] < 0:
|
|
593
639
|
planet["retrograde"] = True
|
|
594
640
|
else:
|
|
595
641
|
planet["retrograde"] = False
|
|
596
642
|
|
|
643
|
+
# AC/DC and MC/IC axes are never retrograde. For consistency, set them to be not retrograde.
|
|
644
|
+
self.ascendant.retrograde = False
|
|
645
|
+
self.descendant.retrograde = False
|
|
646
|
+
self.medium_coeli.retrograde = False
|
|
647
|
+
self.imum_coeli.retrograde = False
|
|
597
648
|
|
|
598
649
|
def _initialize_moon_phase(self) -> None:
|
|
599
650
|
"""
|
kerykeion/charts/charts_utils.py
CHANGED
|
@@ -18,13 +18,6 @@ def get_decoded_kerykeion_celestial_point_name(input_planet_name: str, celestial
|
|
|
18
18
|
str: The decoded celestial point name.
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
# Dictionary for special house names
|
|
22
|
-
special_house_names = {
|
|
23
|
-
"First_House": "Asc",
|
|
24
|
-
"Seventh_House": "Dsc",
|
|
25
|
-
"Tenth_House": "Mc",
|
|
26
|
-
"Fourth_House": "Ic"
|
|
27
|
-
}
|
|
28
21
|
|
|
29
22
|
# Get the language model keys
|
|
30
23
|
language_keys = celestial_point_language.model_dump().keys()
|
|
@@ -32,11 +25,8 @@ def get_decoded_kerykeion_celestial_point_name(input_planet_name: str, celestial
|
|
|
32
25
|
# Check if the input planet name exists in the language model
|
|
33
26
|
if input_planet_name in language_keys:
|
|
34
27
|
return celestial_point_language[input_planet_name]
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
decoded_special_name = special_house_names.get(input_planet_name, "")
|
|
38
|
-
return celestial_point_language[decoded_special_name]
|
|
39
|
-
|
|
28
|
+
else:
|
|
29
|
+
raise KerykeionException(f"Celestial point {input_planet_name} not found in language model.")
|
|
40
30
|
|
|
41
31
|
def decHourJoin(inH: int, inM: int, inS: int) -> float:
|
|
42
32
|
"""Join hour, minutes, seconds, timezone integer to hour float.
|
|
@@ -88,7 +88,6 @@ class KerykeionChartSVG:
|
|
|
88
88
|
earth: float
|
|
89
89
|
air: float
|
|
90
90
|
water: float
|
|
91
|
-
main_radius: float
|
|
92
91
|
first_circle_radius: float
|
|
93
92
|
second_circle_radius: float
|
|
94
93
|
third_circle_radius: float
|
|
@@ -634,8 +633,7 @@ class KerykeionChartSVG:
|
|
|
634
633
|
with open(chartname, "w", encoding="utf-8", errors="ignore") as output_file:
|
|
635
634
|
output_file.write(self.template)
|
|
636
635
|
|
|
637
|
-
|
|
638
|
-
|
|
636
|
+
print(f"SVG Generated Correctly in: {chartname}")
|
|
639
637
|
def makeWheelOnlyTemplate(self, minify: bool = False):
|
|
640
638
|
"""Creates the template for the SVG file with only the wheel"""
|
|
641
639
|
|
|
@@ -662,8 +660,7 @@ class KerykeionChartSVG:
|
|
|
662
660
|
with open(chartname, "w", encoding="utf-8", errors="ignore") as output_file:
|
|
663
661
|
output_file.write(template)
|
|
664
662
|
|
|
665
|
-
|
|
666
|
-
|
|
663
|
+
print(f"SVG Generated Correctly in: {chartname}")
|
|
667
664
|
def makeAspectGridOnlyTemplate(self, minify: bool = False):
|
|
668
665
|
"""Creates the template for the SVG file with only the aspect grid"""
|
|
669
666
|
|
|
@@ -696,8 +693,7 @@ class KerykeionChartSVG:
|
|
|
696
693
|
with open(chartname, "w", encoding="utf-8", errors="ignore") as output_file:
|
|
697
694
|
output_file.write(template)
|
|
698
695
|
|
|
699
|
-
|
|
700
|
-
|
|
696
|
+
print(f"SVG Generated Correctly in: {chartname}")
|
|
701
697
|
|
|
702
698
|
if __name__ == "__main__":
|
|
703
699
|
from kerykeion.utilities import setup_logging
|
|
@@ -176,16 +176,16 @@ OpenAstro.org -->
|
|
|
176
176
|
style="fill: $planets_color_16;" />
|
|
177
177
|
</g>
|
|
178
178
|
</symbol>
|
|
179
|
-
<symbol id="
|
|
179
|
+
<symbol id="Ascendant">
|
|
180
180
|
<text y="20" style="font-size: 22px; fill: $planets_color_12">As</text>
|
|
181
181
|
</symbol>
|
|
182
|
-
<symbol id="
|
|
182
|
+
<symbol id="Medium_Coeli">
|
|
183
183
|
<text y="20" style="font-size: 20px; fill: $planets_color_13">Mc</text>
|
|
184
184
|
</symbol>
|
|
185
|
-
<symbol id="
|
|
185
|
+
<symbol id="Descendant">
|
|
186
186
|
<text y="20" style="font-size: 22px; fill: $planets_color_14">Ds</text>
|
|
187
187
|
</symbol>
|
|
188
|
-
<symbol id="
|
|
188
|
+
<symbol id="Imum_Coeli">
|
|
189
189
|
<text y="20" style="font-size: 22px; fill: $planets_color_15">Ic</text>
|
|
190
190
|
</symbol>
|
|
191
191
|
<!-- Zodiac -->
|
|
@@ -273,16 +273,16 @@ OpenAstro.org -->
|
|
|
273
273
|
style="fill: $planets_color_16;" />
|
|
274
274
|
</g>
|
|
275
275
|
</symbol>
|
|
276
|
-
<symbol id="
|
|
276
|
+
<symbol id="Ascendant">
|
|
277
277
|
<text y="20" style="font-size: 22px; fill: $planets_color_12">As</text>
|
|
278
278
|
</symbol>
|
|
279
|
-
<symbol id="
|
|
279
|
+
<symbol id="Medium_Coeli">
|
|
280
280
|
<text y="20" style="font-size: 20px; fill: $planets_color_13">Mc</text>
|
|
281
281
|
</symbol>
|
|
282
|
-
<symbol id="
|
|
282
|
+
<symbol id="Descendant">
|
|
283
283
|
<text y="20" style="font-size: 22px; fill: $planets_color_14">Ds</text>
|
|
284
284
|
</symbol>
|
|
285
|
-
<symbol id="
|
|
285
|
+
<symbol id="Imum_Coeli">
|
|
286
286
|
<text y="20" style="font-size: 22px; fill: $planets_color_15">Ic</text>
|
|
287
287
|
</symbol>
|
|
288
288
|
<!-- Zodiac -->
|
|
@@ -223,16 +223,16 @@
|
|
|
223
223
|
style="fill: $planets_color_16;" />
|
|
224
224
|
</g>
|
|
225
225
|
</symbol>
|
|
226
|
-
<symbol id="
|
|
226
|
+
<symbol id="Ascendant">
|
|
227
227
|
<text y="20" style="font-size: 22px; fill: $planets_color_12">As</text>
|
|
228
228
|
</symbol>
|
|
229
|
-
<symbol id="
|
|
229
|
+
<symbol id="Medium_Coeli">
|
|
230
230
|
<text y="20" style="font-size: 20px; fill: $planets_color_13">Mc</text>
|
|
231
231
|
</symbol>
|
|
232
|
-
<symbol id="
|
|
232
|
+
<symbol id="Descendant">
|
|
233
233
|
<text y="20" style="font-size: 22px; fill: $planets_color_14">Ds</text>
|
|
234
234
|
</symbol>
|
|
235
|
-
<symbol id="
|
|
235
|
+
<symbol id="Imum_Coeli">
|
|
236
236
|
<text y="20" style="font-size: 22px; fill: $planets_color_15">Ic</text>
|
|
237
237
|
</symbol>
|
|
238
238
|
<!-- Zodiac -->
|
kerykeion/enums.py
CHANGED
|
@@ -18,6 +18,10 @@ class Planets(Enum):
|
|
|
18
18
|
TRUE_SOUTH_NODE = "True_South_Node"
|
|
19
19
|
MEAN_SOUTH_NODE = "Mean_South_Node"
|
|
20
20
|
MEAN_LILITH = "Mean_Lilith"
|
|
21
|
+
ASCENDANT = "Ascendant"
|
|
22
|
+
DESCENDANT = "Descendant"
|
|
23
|
+
MEDIUM_COELI = "Medium_Coeli"
|
|
24
|
+
IMUM_COELI = "Imum_Coeli"
|
|
21
25
|
|
|
22
26
|
|
|
23
27
|
class Aspects(Enum):
|
kerykeion/ephemeris_data.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from kerykeion import AstrologicalSubject
|
|
2
|
-
from kerykeion.utilities import get_houses_list,
|
|
2
|
+
from kerykeion.utilities import get_houses_list, get_available_astrological_points_list
|
|
3
3
|
from kerykeion.astrological_subject import DEFAULT_HOUSES_SYSTEM_IDENTIFIER, DEFAULT_PERSPECTIVE_TYPE, DEFAULT_ZODIAC_TYPE
|
|
4
4
|
from kerykeion.kr_types import EphemerisDictModel
|
|
5
5
|
from kerykeion.kr_types import SiderealMode, HousesSystemIdentifier, PerspectiveType, ZodiacType
|
|
@@ -142,7 +142,7 @@ class EphemerisDataFactory:
|
|
|
142
142
|
)
|
|
143
143
|
|
|
144
144
|
houses_list = get_houses_list(subject)
|
|
145
|
-
available_planets =
|
|
145
|
+
available_planets = get_available_astrological_points_list(subject)
|
|
146
146
|
|
|
147
147
|
ephemeris_data_list.append({"date": date.isoformat(), "planets": available_planets, "houses": houses_list})
|
|
148
148
|
|
|
@@ -28,6 +28,9 @@ HouseNumbers = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
|
|
28
28
|
Planet = Literal["Sun", "Moon", "Mercury", "Venus", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "Mean_Node", "True_Node", "Mean_South_Node", "True_South_Node", "Chiron", "Mean_Lilith"]
|
|
29
29
|
"""Literal type for Planets"""
|
|
30
30
|
|
|
31
|
+
AxialCusps = Literal["Ascendant", "Medium_Coeli", "Descendant", "Imum_Coeli"]
|
|
32
|
+
"""Literal type for Axial Cusps"""
|
|
33
|
+
|
|
31
34
|
|
|
32
35
|
Element = Literal["Air", "Fire", "Earth", "Water"]
|
|
33
36
|
"""Literal type for Elements"""
|
|
@@ -41,7 +44,7 @@ ChartType = Literal["Natal", "ExternalNatal", "Synastry", "Transit"]
|
|
|
41
44
|
"""Literal type for Chart Types"""
|
|
42
45
|
|
|
43
46
|
|
|
44
|
-
PointType = Literal["Planet", "House"]
|
|
47
|
+
PointType = Literal["Planet", "House", "AxialCusps"]
|
|
45
48
|
"""Literal type for Point Types"""
|
|
46
49
|
|
|
47
50
|
|
kerykeion/kr_types/kr_models.py
CHANGED
|
@@ -8,6 +8,7 @@ from typing import Union, Optional
|
|
|
8
8
|
from pydantic import BaseModel
|
|
9
9
|
|
|
10
10
|
from kerykeion.kr_types import (
|
|
11
|
+
AxialCusps,
|
|
11
12
|
LunarPhaseEmoji,
|
|
12
13
|
LunarPhaseName,
|
|
13
14
|
Planet,
|
|
@@ -57,7 +58,7 @@ class KerykeionPointModel(SubscriptableBaseModel):
|
|
|
57
58
|
Kerykeion Point Model
|
|
58
59
|
"""
|
|
59
60
|
|
|
60
|
-
name: Union[Planet, Houses]
|
|
61
|
+
name: Union[Planet, Houses, AxialCusps]
|
|
61
62
|
quality: Quality
|
|
62
63
|
element: Element
|
|
63
64
|
sign: Sign
|
|
@@ -97,6 +98,7 @@ class AstrologicalSubjectModel(SubscriptableBaseModel):
|
|
|
97
98
|
local_time: float
|
|
98
99
|
# <-- Deprecated properties
|
|
99
100
|
|
|
101
|
+
|
|
100
102
|
# Planets
|
|
101
103
|
sun: KerykeionPointModel
|
|
102
104
|
moon: KerykeionPointModel
|
|
@@ -109,6 +111,12 @@ class AstrologicalSubjectModel(SubscriptableBaseModel):
|
|
|
109
111
|
neptune: KerykeionPointModel
|
|
110
112
|
pluto: KerykeionPointModel
|
|
111
113
|
|
|
114
|
+
# Axes
|
|
115
|
+
ascendant: KerykeionPointModel
|
|
116
|
+
descendant: KerykeionPointModel
|
|
117
|
+
medium_coeli: KerykeionPointModel
|
|
118
|
+
imum_coeli: KerykeionPointModel
|
|
119
|
+
|
|
112
120
|
# Optional Planets:
|
|
113
121
|
chiron: Union[KerykeionPointModel, None]
|
|
114
122
|
mean_lilith: Union[KerykeionPointModel, None]
|
|
@@ -133,15 +141,18 @@ class AstrologicalSubjectModel(SubscriptableBaseModel):
|
|
|
133
141
|
mean_south_node: KerykeionPointModel
|
|
134
142
|
true_south_node: KerykeionPointModel
|
|
135
143
|
|
|
136
|
-
lunar_phase: LunarPhaseModel
|
|
137
|
-
"""Lunar phase model"""
|
|
138
|
-
|
|
139
144
|
planets_names_list: list[Planet]
|
|
140
145
|
"""Ordered list of available planets names"""
|
|
141
146
|
|
|
147
|
+
axial_cusps_names_list: list[AxialCusps]
|
|
148
|
+
"""Ordered list of available axes names"""
|
|
149
|
+
|
|
142
150
|
houses_names_list: list[Houses]
|
|
143
151
|
"""Ordered list of houses names"""
|
|
144
152
|
|
|
153
|
+
lunar_phase: LunarPhaseModel
|
|
154
|
+
"""Lunar phase model"""
|
|
155
|
+
|
|
145
156
|
|
|
146
157
|
class EphemerisDictModel(SubscriptableBaseModel):
|
|
147
158
|
date: str
|
|
@@ -104,10 +104,10 @@ class KerykeionLanguageCelestialPointModel(SubscriptableBaseModel):
|
|
|
104
104
|
True_Node: str = Field(title="True Node", description="The name of True Node in the chart, in the language")
|
|
105
105
|
Mean_Node: str = Field(title="Mean Node", description="The name of Mean Node in the chart, in the language")
|
|
106
106
|
Chiron: str = Field(title="Chiron", description="The name of Chiron in the chart, in the language")
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
Ascendant: str = Field(title="Ascendant", description="The name of Ascendant in the chart, in the language")
|
|
108
|
+
Descendant: str = Field(title="Descendant", description="The name of Descendant in the chart, in the language")
|
|
109
|
+
Medium_Coeli: str = Field(title="Medium Coeli", description="The name of Medium Coeli in the chart, in the language")
|
|
110
|
+
Imum_Coeli: str = Field(title="Imum Coeli", description="The name of Imum Coeli in the chart, in the language")
|
|
111
111
|
Mean_Lilith: str = Field(title="Mean Lilith", description="The name of Mean Lilith in the chart, in the language")
|
|
112
112
|
True_South_Node: str = Field(title="True South Node", description="The name of True South Node in the chart, in the language")
|
|
113
113
|
Mean_South_Node: str = Field(title="Mean South Node", description="The name of Mean South Node in the chart, in the language")
|
|
@@ -148,7 +148,7 @@ class RelationshipScoreFactory:
|
|
|
148
148
|
Args:
|
|
149
149
|
aspect (dict): Aspect information.
|
|
150
150
|
"""
|
|
151
|
-
if {aspect["p1_name"], aspect["p2_name"]} == {"Sun", "
|
|
151
|
+
if {aspect["p1_name"], aspect["p2_name"]} == {"Sun", "Ascendant"}:
|
|
152
152
|
points = 4
|
|
153
153
|
self._evaluate_aspect(aspect, points)
|
|
154
154
|
|
|
@@ -160,7 +160,7 @@ class RelationshipScoreFactory:
|
|
|
160
160
|
Args:
|
|
161
161
|
aspect (dict): Aspect information.
|
|
162
162
|
"""
|
|
163
|
-
if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "
|
|
163
|
+
if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Ascendant"}:
|
|
164
164
|
points = 4
|
|
165
165
|
self._evaluate_aspect(aspect, points)
|
|
166
166
|
|
kerykeion/report.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from kerykeion import AstrologicalSubject
|
|
2
|
-
from
|
|
3
|
-
from kerykeion.utilities import get_houses_list,
|
|
2
|
+
from simple_ascii_tables import AsciiTable
|
|
3
|
+
from kerykeion.utilities import get_houses_list, get_available_astrological_points_list
|
|
4
4
|
from typing import Union
|
|
5
5
|
from kerykeion.kr_types.kr_models import AstrologicalSubjectModel
|
|
6
6
|
|
|
@@ -54,7 +54,7 @@ class Report:
|
|
|
54
54
|
("R" if planet.retrograde else "-"),
|
|
55
55
|
planet.house,
|
|
56
56
|
]
|
|
57
|
-
for planet in
|
|
57
|
+
for planet in get_available_astrological_points_list(self.instance)
|
|
58
58
|
]
|
|
59
59
|
|
|
60
60
|
self.planets_table = AsciiTable(planets_data).table
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"Uranus": "Uranus",
|
|
33
33
|
"Neptune": "Neptune",
|
|
34
34
|
"Pluto": "Pluto",
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
35
|
+
"Ascendant": "Asc",
|
|
36
|
+
"Medium_Coeli": "Mc",
|
|
37
|
+
"Descendant": "Dsc",
|
|
38
|
+
"Imum_Coeli": "Ic",
|
|
39
39
|
"True_Node": "N. Node (T)",
|
|
40
40
|
"Mean_Node": "N. Node (M)",
|
|
41
41
|
"Chiron": "Chiron",
|
|
@@ -76,10 +76,10 @@
|
|
|
76
76
|
"Uranus": "Uranus",
|
|
77
77
|
"Neptune": "Neptune",
|
|
78
78
|
"Pluto": "Pluton",
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
79
|
+
"Ascendant": "Asc",
|
|
80
|
+
"Medium_Coeli": "Mc",
|
|
81
|
+
"Descendant": "Dsc",
|
|
82
|
+
"Imum_Coeli": "Ic",
|
|
83
83
|
"True_Node": "Nœud N. (V)",
|
|
84
84
|
"Mean_Node": "Nœud N. (M)",
|
|
85
85
|
"True_South_Node": "Nœud S. (V)",
|
|
@@ -120,10 +120,10 @@
|
|
|
120
120
|
"Uranus": "Urano",
|
|
121
121
|
"Neptune": "Netuno",
|
|
122
122
|
"Pluto": "Plutão",
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
123
|
+
"Ascendant": "Asc",
|
|
124
|
+
"Medium_Coeli": "Mc",
|
|
125
|
+
"Descendant": "Dsc",
|
|
126
|
+
"Imum_Coeli": "Ic",
|
|
127
127
|
"True_Node": "Nodo N. (V)",
|
|
128
128
|
"Mean_Node": "Nodo N. (M)",
|
|
129
129
|
"True_South_Node": "Nodo S. (V)",
|
|
@@ -164,10 +164,10 @@
|
|
|
164
164
|
"Uranus": "Urano",
|
|
165
165
|
"Neptune": "Nettuno",
|
|
166
166
|
"Pluto": "Plutone",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
167
|
+
"Ascendant": "Asc",
|
|
168
|
+
"Medium_Coeli": "Mc",
|
|
169
|
+
"Descendant": "Dsc",
|
|
170
|
+
"Imum_Coeli": "Ic",
|
|
171
171
|
"True_Node": "Nodo N. (V)",
|
|
172
172
|
"Mean_Node": "Nodo N. (M)",
|
|
173
173
|
"True_South_Node": "Nodo S. (V)",
|
|
@@ -208,10 +208,10 @@
|
|
|
208
208
|
"Uranus": "天王星",
|
|
209
209
|
"Neptune": "海王星",
|
|
210
210
|
"Pluto": "冥王星",
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"
|
|
211
|
+
"Ascendant": "上升點",
|
|
212
|
+
"Medium_Coeli": "上中天",
|
|
213
|
+
"Descendant": "下降點",
|
|
214
|
+
"Imum_Coeli": "下中天",
|
|
215
215
|
"True_Node": "真北交点",
|
|
216
216
|
"Mean_Node": "平均北交点",
|
|
217
217
|
"True_South_Node": "真南交点",
|
|
@@ -252,10 +252,10 @@
|
|
|
252
252
|
"Uranus": "Urano",
|
|
253
253
|
"Neptune": "Neptuno",
|
|
254
254
|
"Pluto": "Plutón",
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
258
|
-
"
|
|
255
|
+
"Ascendant": "Asc",
|
|
256
|
+
"Medium_Coeli": "Mc",
|
|
257
|
+
"Descendant": "Dsc",
|
|
258
|
+
"Imum_Coeli": "Ic",
|
|
259
259
|
"True_Node": "Nodo N. (V)",
|
|
260
260
|
"Mean_Node": "Nodo N. (M)",
|
|
261
261
|
"True_South_Node": "Nodo S. (V)",
|
|
@@ -296,10 +296,10 @@
|
|
|
296
296
|
"Uranus": "Уран",
|
|
297
297
|
"Neptune": "Нептун",
|
|
298
298
|
"Pluto": "Плутон",
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
"
|
|
302
|
-
"
|
|
299
|
+
"Ascendant": "Асц",
|
|
300
|
+
"Medium_Coeli": "MC",
|
|
301
|
+
"Descendant": "ДСЦ",
|
|
302
|
+
"Imum_Coeli": "IC",
|
|
303
303
|
"True_Node": "С. Узел (И)",
|
|
304
304
|
"Mean_Node": "С. Узел (С)",
|
|
305
305
|
"True_South_Node": "Ю. Узел (И)",
|
|
@@ -340,10 +340,10 @@
|
|
|
340
340
|
"Uranus": "Uranüs",
|
|
341
341
|
"Neptune": "Neptün",
|
|
342
342
|
"Pluto": "Plüton",
|
|
343
|
-
"
|
|
344
|
-
"
|
|
345
|
-
"
|
|
346
|
-
"
|
|
343
|
+
"Ascendant": "Yükselen",
|
|
344
|
+
"Medium_Coeli": "MC",
|
|
345
|
+
"Descendant": "İK",
|
|
346
|
+
"Imum_Coeli": "IC",
|
|
347
347
|
"True_Node": "K. Düğümü (T)",
|
|
348
348
|
"Mean_Node": "K. Düğümü (M)",
|
|
349
349
|
"Chiron": "Kirony",
|
|
@@ -384,10 +384,10 @@
|
|
|
384
384
|
"Uranus": "Uranus",
|
|
385
385
|
"Neptune": "Neptun",
|
|
386
386
|
"Pluto": "Pluto",
|
|
387
|
-
"
|
|
388
|
-
"
|
|
389
|
-
"
|
|
390
|
-
"
|
|
387
|
+
"Ascendant": "Asz",
|
|
388
|
+
"Medium_Coeli": "MC",
|
|
389
|
+
"Descendant": "DSC",
|
|
390
|
+
"Imum_Coeli": "IC",
|
|
391
391
|
"True_Node": "Nordknoten (T)",
|
|
392
392
|
"Mean_Node": "Nordknoten (M)",
|
|
393
393
|
"True_South_Node": "Südknoten (T)",
|
|
@@ -428,10 +428,10 @@
|
|
|
428
428
|
"Uranus": "यूरेनस",
|
|
429
429
|
"Neptune": "नेपच्यून",
|
|
430
430
|
"Pluto": "प्लूटो",
|
|
431
|
-
"
|
|
432
|
-
"
|
|
433
|
-
"
|
|
434
|
-
"
|
|
431
|
+
"Ascendant": "आस",
|
|
432
|
+
"Medium_Coeli": "एमसी",
|
|
433
|
+
"Descendant": "डीएससी",
|
|
434
|
+
"Imum_Coeli": "आईसी",
|
|
435
435
|
"True_Node": "उत्तर नोड (T)",
|
|
436
436
|
"Mean_Node": "उत्तर नोड (M)",
|
|
437
437
|
"Chiron": "किरोन",
|
|
@@ -651,7 +651,7 @@
|
|
|
651
651
|
},
|
|
652
652
|
{
|
|
653
653
|
"id": 13,
|
|
654
|
-
"name": "
|
|
654
|
+
"name": "Ascendant",
|
|
655
655
|
"color": "var(--kerykeion-chart-color-first-house)",
|
|
656
656
|
"is_active": true,
|
|
657
657
|
"element_points": 40,
|
|
@@ -660,7 +660,7 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"id": 14,
|
|
663
|
-
"name": "
|
|
663
|
+
"name": "Medium_Coeli",
|
|
664
664
|
"color": "var(--kerykeion-chart-color-tenth-house)",
|
|
665
665
|
"is_active": true,
|
|
666
666
|
"element_points": 20,
|
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
},
|
|
670
670
|
{
|
|
671
671
|
"id": 15,
|
|
672
|
-
"name": "
|
|
672
|
+
"name": "Descendant",
|
|
673
673
|
"color": "var(--kerykeion-chart-color-seventh-house)",
|
|
674
674
|
"is_active": false,
|
|
675
675
|
"element_points": 0,
|
|
@@ -678,7 +678,7 @@
|
|
|
678
678
|
},
|
|
679
679
|
{
|
|
680
680
|
"id": 16,
|
|
681
|
-
"name": "
|
|
681
|
+
"name": "Imum_Coeli",
|
|
682
682
|
"color": "var(--kerykeion-chart-color-fourth-house)",
|
|
683
683
|
"is_active": false,
|
|
684
684
|
"element_points": 0,
|
kerykeion/utilities.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from kerykeion.kr_types import KerykeionPointModel, KerykeionException, ZodiacSignModel, AstrologicalSubjectModel
|
|
2
|
-
from kerykeion.kr_types.kr_literals import LunarPhaseEmoji, LunarPhaseName, PointType, Planet, Houses
|
|
2
|
+
from kerykeion.kr_types.kr_literals import LunarPhaseEmoji, LunarPhaseName, PointType, Planet, Houses, AxialCusps
|
|
3
3
|
from typing import Union, get_args, TYPE_CHECKING
|
|
4
4
|
import logging
|
|
5
5
|
import math
|
|
@@ -44,12 +44,20 @@ def get_number_from_name(name: Planet) -> int:
|
|
|
44
44
|
return 15
|
|
45
45
|
elif name == "Mean_Lilith":
|
|
46
46
|
return 12
|
|
47
|
+
elif name == "Ascendant": # TODO: Is this needed?
|
|
48
|
+
return 9900
|
|
49
|
+
elif name == "Descendant": # TODO: Is this needed?
|
|
50
|
+
return 9901
|
|
51
|
+
elif name == "Medium_Coeli": # TODO: Is this needed?
|
|
52
|
+
return 9902
|
|
53
|
+
elif name == "Imum_Coeli": # TODO: Is this needed?
|
|
54
|
+
return 9903
|
|
47
55
|
else:
|
|
48
56
|
raise KerykeionException(f"Error in getting number from name! Name: {name}")
|
|
49
57
|
|
|
50
58
|
|
|
51
59
|
def get_kerykeion_point_from_degree(
|
|
52
|
-
degree: Union[int, float], name: Union[Planet, Houses], point_type: PointType
|
|
60
|
+
degree: Union[int, float], name: Union[Planet, Houses, AxialCusps], point_type: PointType
|
|
53
61
|
) -> KerykeionPointModel:
|
|
54
62
|
"""
|
|
55
63
|
Returns a KerykeionPointModel object based on the given degree.
|
|
@@ -118,29 +126,57 @@ def setup_logging(level: str) -> None:
|
|
|
118
126
|
loglevel: int = logging_options.get(level, logging.INFO)
|
|
119
127
|
logging.basicConfig(format=format, level=loglevel)
|
|
120
128
|
|
|
121
|
-
|
|
122
|
-
|
|
129
|
+
|
|
130
|
+
def is_point_between(
|
|
131
|
+
start_point: Union[int, float],
|
|
132
|
+
end_point: Union[int, float],
|
|
133
|
+
evaluated_point: Union[int, float]
|
|
123
134
|
) -> bool:
|
|
124
135
|
"""
|
|
125
|
-
|
|
136
|
+
Determines if a point is between two others on a circle, with additional rules:
|
|
137
|
+
- If evaluated_point == start_point, it is considered between.
|
|
138
|
+
- If evaluated_point == end_point, it is NOT considered between.
|
|
139
|
+
- The range between start_point and end_point must not exceed 180°.
|
|
126
140
|
|
|
127
141
|
Args:
|
|
128
|
-
- start_point: The first point
|
|
129
|
-
- end_point: The second point
|
|
130
|
-
-
|
|
142
|
+
- start_point: The first point on the circle.
|
|
143
|
+
- end_point: The second point on the circle.
|
|
144
|
+
- evaluated_point: The point to check.
|
|
131
145
|
|
|
132
146
|
Returns:
|
|
133
|
-
- True if
|
|
147
|
+
- True if evaluated_point is between start_point and end_point, False otherwise.
|
|
134
148
|
"""
|
|
135
149
|
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
# Normalize angles to [0, 360)
|
|
151
|
+
start_point = start_point % 360
|
|
152
|
+
end_point = end_point % 360
|
|
153
|
+
evaluated_point = evaluated_point % 360
|
|
154
|
+
|
|
155
|
+
# Compute angular difference
|
|
156
|
+
angular_difference = math.fmod(end_point - start_point + 360, 360)
|
|
138
157
|
|
|
139
|
-
|
|
158
|
+
# Ensure the range is not greater than 180°. Otherwise, it is not truly defined what
|
|
159
|
+
# being located in between two points on a circle actually means.
|
|
160
|
+
if angular_difference > 180:
|
|
161
|
+
raise KerykeionException(f"The angle between start and end point is not allowed to exceed 180°, yet is: {angular_difference}")
|
|
162
|
+
|
|
163
|
+
# Handle explicitly when evaluated_point == start_point. Note: It may happen for mathematical
|
|
164
|
+
# reasons that evaluated_point and start_point deviate very slightly from each other, but
|
|
165
|
+
# should really be same value. This case is captured later below by the term 0 <= p1_p3.
|
|
166
|
+
if evaluated_point == start_point:
|
|
140
167
|
return True
|
|
141
|
-
|
|
168
|
+
|
|
169
|
+
# Handle explicitly when evaluated_point == end_point
|
|
170
|
+
if evaluated_point == end_point:
|
|
142
171
|
return False
|
|
143
172
|
|
|
173
|
+
# Compute angular differences for evaluation
|
|
174
|
+
p1_p3 = math.fmod(evaluated_point - start_point + 360, 360)
|
|
175
|
+
|
|
176
|
+
# Check if point lies in the interval
|
|
177
|
+
return (0 <= p1_p3) and (p1_p3 < angular_difference)
|
|
178
|
+
|
|
179
|
+
|
|
144
180
|
|
|
145
181
|
def get_planet_house(planet_position_degree: Union[int, float], houses_degree_ut_list: list) -> Houses:
|
|
146
182
|
"""
|
|
@@ -163,7 +199,8 @@ def get_planet_house(planet_position_degree: Union[int, float], houses_degree_ut
|
|
|
163
199
|
for i in range(len(house_names)):
|
|
164
200
|
start_degree = houses_degree_ut_list[i]
|
|
165
201
|
end_degree = houses_degree_ut_list[(i + 1) % len(houses_degree_ut_list)]
|
|
166
|
-
|
|
202
|
+
|
|
203
|
+
if is_point_between(start_degree, end_degree, planet_position_degree):
|
|
167
204
|
return house_names[i]
|
|
168
205
|
|
|
169
206
|
# If no house is found, raise an error
|
|
@@ -268,7 +305,7 @@ def get_houses_list(subject: Union["AstrologicalSubject", AstrologicalSubjectMod
|
|
|
268
305
|
return houses_absolute_position_list
|
|
269
306
|
|
|
270
307
|
|
|
271
|
-
def
|
|
308
|
+
def get_available_astrological_points_list(subject: Union["AstrologicalSubject", AstrologicalSubjectModel]) -> list[KerykeionPointModel]:
|
|
272
309
|
"""
|
|
273
310
|
Return the names of the planets in the order of the planets.
|
|
274
311
|
The names can be used to access the planets from the AstrologicalSubject object with the __getitem__ method or the [] operator.
|
|
@@ -277,4 +314,7 @@ def get_available_planets_list(subject: Union["AstrologicalSubject", Astrologica
|
|
|
277
314
|
for planet in subject.planets_names_list:
|
|
278
315
|
planets_absolute_position_list.append(subject[planet.lower()])
|
|
279
316
|
|
|
317
|
+
for axis in subject.axial_cusps_names_list:
|
|
318
|
+
planets_absolute_position_list.append(subject[axis.lower()])
|
|
319
|
+
|
|
280
320
|
return planets_absolute_position_list
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: kerykeion
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.22.0
|
|
4
4
|
Summary: A python library for astrology.
|
|
5
5
|
Home-page: https://www.kerykeion.net/
|
|
6
6
|
License: AGPL-3.0
|
|
@@ -19,7 +19,6 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
23
22
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
24
23
|
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
25
24
|
Classifier: Topic :: Software Development
|
|
@@ -28,11 +27,11 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
28
27
|
Classifier: Typing :: Typed
|
|
29
28
|
Requires-Dist: pydantic (>=2.5,<3.0)
|
|
30
29
|
Requires-Dist: pyswisseph (>=2.10.3.1,<3.0.0.0)
|
|
31
|
-
Requires-Dist: pytz (>=
|
|
30
|
+
Requires-Dist: pytz (>=2024.2,<2025.0)
|
|
32
31
|
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
|
33
32
|
Requires-Dist: requests-cache (>=1.2.1,<2.0.0)
|
|
34
33
|
Requires-Dist: scour (>=0.38.2,<0.39.0)
|
|
35
|
-
Requires-Dist:
|
|
34
|
+
Requires-Dist: simple-ascii-tables (>=1.0.0,<2.0.0)
|
|
36
35
|
Project-URL: Repository, https://github.com/g-battaglia/kerykeion
|
|
37
36
|
Description-Content-Type: text/markdown
|
|
38
37
|
|
|
@@ -2,41 +2,41 @@ LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
|
|
|
2
2
|
kerykeion/__init__.py,sha256=XtKNBNSVsQ-PAbnJfNUcw-femdF4NgQqohMtM0cRH18,639
|
|
3
3
|
kerykeion/aspects/__init__.py,sha256=9kx_Rx1NJx5SM7nDCSbI79S1neZ3c-q2NvQr-S6A9PY,292
|
|
4
4
|
kerykeion/aspects/aspects_utils.py,sha256=XyjQvvdrN6-L8QqpecV-mCG9Wb8I9G0S1ZvzXIsQSCk,2977
|
|
5
|
-
kerykeion/aspects/natal_aspects.py,sha256=
|
|
5
|
+
kerykeion/aspects/natal_aspects.py,sha256=zTB5wIp0B3XdqtM5ktWpD2rw8ITTlR2wpXBOdPwSZmI,6048
|
|
6
6
|
kerykeion/aspects/synastry_aspects.py,sha256=HtXSVPkiDQmbkqnI7k9IOhCgON59VZXjflqWJdugwyI,4327
|
|
7
|
-
kerykeion/astrological_subject.py,sha256=
|
|
7
|
+
kerykeion/astrological_subject.py,sha256=OWBpAKP0aavvqNWg_c1dTbGVkd6BM7XMzgIMOVo683A,39157
|
|
8
8
|
kerykeion/charts/__init__.py,sha256=i9NMZ7LdkllPlqQSi1or9gTobHbROGDKmJhBDO4R0mA,128
|
|
9
|
-
kerykeion/charts/charts_utils.py,sha256=
|
|
9
|
+
kerykeion/charts/charts_utils.py,sha256=HjCmBa9TCoAmH5Z20W8BRnQICN3qZOjQcSQ20sLLz7M,41965
|
|
10
10
|
kerykeion/charts/draw_planets.py,sha256=Uty3zpWYMQZvvK7ZHhlmynCHeL8DIN3qL2ifnBXVciM,17393
|
|
11
|
-
kerykeion/charts/kerykeion_chart_svg.py,sha256=
|
|
12
|
-
kerykeion/charts/templates/aspect_grid_only.xml,sha256=
|
|
13
|
-
kerykeion/charts/templates/chart.xml,sha256=
|
|
14
|
-
kerykeion/charts/templates/wheel_only.xml,sha256=
|
|
11
|
+
kerykeion/charts/kerykeion_chart_svg.py,sha256=FglYPyeZZUSdWj1CAia1iXveRpKatVlmOfLkvbZu0YE,43871
|
|
12
|
+
kerykeion/charts/templates/aspect_grid_only.xml,sha256=ZiBVeToVmCA8QxYlB_cfnsAO1NNeQAnJ_6rIYkr4F58,70091
|
|
13
|
+
kerykeion/charts/templates/chart.xml,sha256=rUO7kL3z1RZuFjFBwA88xIF2KQFuGOcHQ5Kcw-K4hLY,73761
|
|
14
|
+
kerykeion/charts/templates/wheel_only.xml,sha256=E0JCxcnjTjxuaomw7PQEc_3xRVErj1y2hIOGTrShuhc,71304
|
|
15
15
|
kerykeion/charts/themes/classic.css,sha256=-b6XllAZmqUDjBwDtIkfzfI3Wtc8AImuGMpfAQ_2wa0,3552
|
|
16
16
|
kerykeion/charts/themes/dark-high-contrast.css,sha256=9tdyFC-4Ytnv4lrVwKnOjZJ0YNgbRrP_HNnfJRlnbn0,6099
|
|
17
17
|
kerykeion/charts/themes/dark.css,sha256=ml2lnzQVuS5DhCdoeUrDmMv9kB1nNceRt7hHbOHSbjM,6099
|
|
18
18
|
kerykeion/charts/themes/light.css,sha256=ALf5U8tQsb6ky0N9R7ZLOHDrfKEXNM-sBR3JIRxFrCI,6092
|
|
19
|
-
kerykeion/enums.py,sha256=
|
|
20
|
-
kerykeion/ephemeris_data.py,sha256=
|
|
19
|
+
kerykeion/enums.py,sha256=nPXgP_ocsRnRno5H-yunZy3fp-hLZ9aYRaUb-2gBdvw,1199
|
|
20
|
+
kerykeion/ephemeris_data.py,sha256=Cd5TK5nTkFHYU6bkLKjZRfiU4_6AgsWGcwBDrBHKrQk,8096
|
|
21
21
|
kerykeion/fetch_geonames.py,sha256=e66Nh6yq9A4VjnuvVSiV1TW1IkJ9m3Q2LKPWrkOGgO0,4764
|
|
22
22
|
kerykeion/kr_types/__init__.py,sha256=jshJOccCQcYZuoOvrILRZH6imy4RBvKpFPujlNLFyGE,295
|
|
23
23
|
kerykeion/kr_types/chart_types.py,sha256=OlDvjCra7acaBT--B_gqsqOcAwbuKCXmQQyDTDNfy4o,1983
|
|
24
24
|
kerykeion/kr_types/kerykeion_exception.py,sha256=kE1y0K0rmuz32b4K_ZppSsZ59I2Get0ZkvOkTE5HejI,314
|
|
25
|
-
kerykeion/kr_types/kr_literals.py,sha256=
|
|
26
|
-
kerykeion/kr_types/kr_models.py,sha256=
|
|
27
|
-
kerykeion/kr_types/settings_models.py,sha256=
|
|
25
|
+
kerykeion/kr_types/kr_literals.py,sha256=hnbKFC0Wu_ee1VjpXd1GJaE_tC6ALjhbuo7PEW51yQc,3766
|
|
26
|
+
kerykeion/kr_types/kr_models.py,sha256=53VnGY8ie35crNemMusf8iasACHRrM1ZVc0kuZggCes,4593
|
|
27
|
+
kerykeion/kr_types/settings_models.py,sha256=VJ9rt4WzO4xTQRxFrX-9da44-SE2V0v2AH4CI4ygJc4,11894
|
|
28
28
|
kerykeion/relationship_score/__init__.py,sha256=cLaEBQXQBfyRkv0OaS3ceLROzvWcvKXWiRq0PS6LDjY,114
|
|
29
29
|
kerykeion/relationship_score/relationship_score.py,sha256=lJkSbHw9nOUaPMrPxqcGhnVQIwAgI52K8BQzXXswb6A,6504
|
|
30
|
-
kerykeion/relationship_score/relationship_score_factory.py,sha256=
|
|
31
|
-
kerykeion/report.py,sha256=
|
|
30
|
+
kerykeion/relationship_score/relationship_score_factory.py,sha256=P_swvpip5luODeByv_qaP1c5IpUqWTqSlEumDJjal7I,10861
|
|
31
|
+
kerykeion/report.py,sha256=snqnrJzb89q2ixL74qS9ksvzNSh_WXtZ_haBOIvHYeY,2814
|
|
32
32
|
kerykeion/settings/__init__.py,sha256=QQNFCl7sgN27MKaVscqtpPk10HGz4wZS3I_7KEGMaVA,69
|
|
33
33
|
kerykeion/settings/kerykeion_settings.py,sha256=WZyiC4uwpjnTmoDGWORYLIk9rIpJ3EuLdjFw6eUuylo,2554
|
|
34
|
-
kerykeion/settings/kr.config.json,sha256=
|
|
34
|
+
kerykeion/settings/kr.config.json,sha256=TbHMfGX0hXgjLS92RmScjhL1Qq8CUcdyXp1IJVVrJrc,21998
|
|
35
35
|
kerykeion/sweph/README.md,sha256=L7FtNAJTWtrZNGKa8MX87SjduFYPYxwWhaI5fmtzNZo,73
|
|
36
36
|
kerykeion/sweph/seas_18.se1,sha256=X9nCqhZU43wJpq61WAdueVQJt9xL2UjrwPqn1Kdoa1s,223002
|
|
37
|
-
kerykeion/utilities.py,sha256=
|
|
38
|
-
kerykeion-4.
|
|
39
|
-
kerykeion-4.
|
|
40
|
-
kerykeion-4.
|
|
41
|
-
kerykeion-4.
|
|
42
|
-
kerykeion-4.
|
|
37
|
+
kerykeion/utilities.py,sha256=vuEDWs5Htl2zi6_3flLvlAsFC9YT9LaOQDpRirFf3Cg,11160
|
|
38
|
+
kerykeion-4.22.0.dist-info/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
|
|
39
|
+
kerykeion-4.22.0.dist-info/METADATA,sha256=7EuN8mUmEb_lpxs4jR4n2alO5vtbgms-2W2dxcW_PoA,17620
|
|
40
|
+
kerykeion-4.22.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
41
|
+
kerykeion-4.22.0.dist-info/entry_points.txt,sha256=5SmANYscFDDTdeovHvGQ-cnj0hdFvGoxPaWLCpyDFnQ,49
|
|
42
|
+
kerykeion-4.22.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|