kerykeion 4.18.3__py3-none-any.whl → 5.1.9__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/__init__.py +56 -11
- kerykeion/aspects/__init__.py +7 -4
- kerykeion/aspects/aspects_factory.py +568 -0
- kerykeion/aspects/aspects_utils.py +86 -13
- kerykeion/astrological_subject_factory.py +1901 -0
- kerykeion/backword.py +820 -0
- kerykeion/chart_data_factory.py +552 -0
- kerykeion/charts/__init__.py +2 -2
- kerykeion/charts/chart_drawer.py +2794 -0
- kerykeion/charts/charts_utils.py +1066 -309
- kerykeion/charts/draw_planets.py +602 -351
- kerykeion/charts/templates/aspect_grid_only.xml +337 -193
- kerykeion/charts/templates/chart.xml +441 -240
- kerykeion/charts/templates/wheel_only.xml +365 -211
- kerykeion/charts/themes/black-and-white.css +148 -0
- kerykeion/charts/themes/classic.css +107 -76
- kerykeion/charts/themes/dark-high-contrast.css +145 -107
- kerykeion/charts/themes/dark.css +146 -107
- kerykeion/charts/themes/light.css +146 -103
- kerykeion/charts/themes/strawberry.css +158 -0
- kerykeion/composite_subject_factory.py +408 -0
- kerykeion/ephemeris_data_factory.py +443 -0
- kerykeion/fetch_geonames.py +81 -21
- kerykeion/house_comparison/__init__.py +6 -0
- kerykeion/house_comparison/house_comparison_factory.py +103 -0
- kerykeion/house_comparison/house_comparison_utils.py +126 -0
- kerykeion/kr_types/__init__.py +66 -6
- kerykeion/kr_types/chart_template_model.py +20 -0
- kerykeion/kr_types/kerykeion_exception.py +15 -9
- kerykeion/kr_types/kr_literals.py +14 -106
- kerykeion/kr_types/kr_models.py +14 -179
- kerykeion/kr_types/settings_models.py +15 -152
- kerykeion/planetary_return_factory.py +805 -0
- kerykeion/relationship_score_factory.py +301 -0
- kerykeion/report.py +750 -65
- kerykeion/schemas/__init__.py +106 -0
- kerykeion/schemas/chart_template_model.py +367 -0
- kerykeion/schemas/kerykeion_exception.py +20 -0
- kerykeion/schemas/kr_literals.py +181 -0
- kerykeion/schemas/kr_models.py +603 -0
- kerykeion/schemas/settings_models.py +188 -0
- kerykeion/settings/__init__.py +20 -1
- kerykeion/settings/chart_defaults.py +444 -0
- kerykeion/settings/config_constants.py +152 -0
- kerykeion/settings/kerykeion_settings.py +36 -61
- kerykeion/settings/translation_strings.py +1499 -0
- kerykeion/settings/translations.py +74 -0
- kerykeion/sweph/ast136/s136108s.se1 +0 -0
- kerykeion/sweph/ast136/s136199s.se1 +0 -0
- kerykeion/sweph/ast136/s136472s.se1 +0 -0
- kerykeion/sweph/ast28/se28978s.se1 +0 -0
- kerykeion/sweph/ast50/se50000s.se1 +0 -0
- kerykeion/sweph/ast90/se90377s.se1 +0 -0
- kerykeion/sweph/ast90/se90482s.se1 +0 -0
- kerykeion/sweph/sefstars.txt +1602 -0
- kerykeion/transits_time_range_factory.py +302 -0
- kerykeion/utilities.py +626 -125
- kerykeion-5.1.9.dist-info/METADATA +1793 -0
- kerykeion-5.1.9.dist-info/RECORD +63 -0
- {kerykeion-4.18.3.dist-info → kerykeion-5.1.9.dist-info}/WHEEL +1 -1
- kerykeion/aspects/natal_aspects.py +0 -143
- kerykeion/aspects/synastry_aspects.py +0 -113
- kerykeion/astrological_subject.py +0 -818
- kerykeion/charts/kerykeion_chart_svg.py +0 -894
- kerykeion/enums.py +0 -51
- kerykeion/ephemeris_data.py +0 -178
- kerykeion/kr_types/chart_types.py +0 -88
- kerykeion/relationship_score/__init__.py +0 -2
- kerykeion/relationship_score/relationship_score.py +0 -175
- kerykeion/relationship_score/relationship_score_factory.py +0 -275
- kerykeion/settings/kr.config.json +0 -721
- kerykeion-4.18.3.dist-info/LICENSE +0 -661
- kerykeion-4.18.3.dist-info/METADATA +0 -396
- kerykeion-4.18.3.dist-info/RECORD +0 -42
- kerykeion-4.18.3.dist-info/entry_points.txt +0 -3
- /LICENSE → /kerykeion-5.1.9.dist-info/licenses/LICENSE +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
kerykeion/__init__.py,sha256=7gI_kWXhsmEK4SvNV6CkRmI0yjA3r7EO8UfQc_44UZU,1963
|
|
2
|
+
kerykeion/astrological_subject_factory.py,sha256=qR6dWULcF4J2ym2oTI4CQ-zfQfMgAFNyLwhGXhJkg-A,94740
|
|
3
|
+
kerykeion/backword.py,sha256=aZrC6gRhLuewv3PvpHWlPvqrDGxspCEN2mMAh8tLtfM,34500
|
|
4
|
+
kerykeion/chart_data_factory.py,sha256=gtAlZs_IjPMUJUitLjkRFCESmAj-wEOlYdCPQ2b8XwA,25123
|
|
5
|
+
kerykeion/composite_subject_factory.py,sha256=eUtjThDlYr6SQsEi02_CgO1kEMUMYgQGzR5rX91GEwY,17120
|
|
6
|
+
kerykeion/ephemeris_data_factory.py,sha256=UKgoJQSqiyy4U0jNw23NI_BP0kbZblJU5mtBnNZtnb0,20417
|
|
7
|
+
kerykeion/fetch_geonames.py,sha256=37q5SwLEEvz7UMtmwk4dsH5QOQXfY5MCbnRO0u0ZKtE,6881
|
|
8
|
+
kerykeion/planetary_return_factory.py,sha256=bIVPqa2gs7hYHi8aaMfVr4U99xWZk3LmYqZI9KG6ACo,37572
|
|
9
|
+
kerykeion/relationship_score_factory.py,sha256=pVrsRlFs__bfVe8K3cOirsnRtdBOW2DbnKqPa7jCWF0,11396
|
|
10
|
+
kerykeion/report.py,sha256=fHGzPh9vhDIWzT_Gr4V5KrfLjiDWLlSlBgOk6-DeH80,31463
|
|
11
|
+
kerykeion/transits_time_range_factory.py,sha256=YRSFVa2MIZFQMPbEL2njKd-P7p431zoAsINrddZz5Yw,13934
|
|
12
|
+
kerykeion/utilities.py,sha256=AqcJ9zmVEcwiurMfN63MDSeegJ1dJ4L1sQVJeoNIGOE,24016
|
|
13
|
+
kerykeion/aspects/__init__.py,sha256=csJmxvLdBu-bHuW676f3dpY__Qyc6LwRyrpWVTh3n1A,287
|
|
14
|
+
kerykeion/aspects/aspects_factory.py,sha256=XCuOOpo0ZW7sihYT2f50bLVpebEk19b9EtEjXonwte0,24156
|
|
15
|
+
kerykeion/aspects/aspects_utils.py,sha256=2YloOKOmN0h2d6J8A1vCe-y4A2mWNoOUYCGDVwGl4gA,5794
|
|
16
|
+
kerykeion/charts/__init__.py,sha256=i9NMZ7LdkllPlqQSi1or9gTobHbROGDKmJhBDO4R0mA,128
|
|
17
|
+
kerykeion/charts/chart_drawer.py,sha256=JZZ9-VFXwK_qAVI3uf0PCdTC35QoRPLLHMbDy98WrqE,130561
|
|
18
|
+
kerykeion/charts/charts_utils.py,sha256=iwgDhVc_GwKuQBZ6JNmn6RWVILD5KIcjbrnDTR3wrAc,70911
|
|
19
|
+
kerykeion/charts/draw_planets.py,sha256=tIj3FeLLomVSbCaZUxfw_qBEB3pxi4EIEhqaeTgTyTY,29061
|
|
20
|
+
kerykeion/charts/templates/aspect_grid_only.xml,sha256=v3QtNMjk-kBdUTfB0r6thg--Ta_tNFdRQCzdk5PAycY,86429
|
|
21
|
+
kerykeion/charts/templates/chart.xml,sha256=QhCSkORLw61cXycF2fMmCLsSailPyIxLbVtsR-CXsKI,92096
|
|
22
|
+
kerykeion/charts/templates/wheel_only.xml,sha256=05k2KiVMP-5NW0e8PZrTX-VPn5x-SaNzEYPgU1_OKa0,87775
|
|
23
|
+
kerykeion/charts/themes/black-and-white.css,sha256=IIoy9wyB4znrvPvmallKmgDW4HMJPywTv5IZsolaEp4,6543
|
|
24
|
+
kerykeion/charts/themes/classic.css,sha256=xvBiI4DtY5fMaA7ilxGl26VEDY1VzkOTWm1XOs9n-ec,5158
|
|
25
|
+
kerykeion/charts/themes/dark-high-contrast.css,sha256=EbmK9sM_ksJ5Fx36cb91nSvSsqC6mzjkRXCpwNTHfCE,8260
|
|
26
|
+
kerykeion/charts/themes/dark.css,sha256=gub44WABpHseNNaWu4lVmtvDthgrRCvEVaobcd-UrMY,8335
|
|
27
|
+
kerykeion/charts/themes/light.css,sha256=WEX_uKPArTjignVwvuAHqqWIbNiCheQ9Y7MgK0HJjAM,8344
|
|
28
|
+
kerykeion/charts/themes/strawberry.css,sha256=pFrST9xDRiej-YXh7P_snOr46DUcKjw--5d2MrlashY,9001
|
|
29
|
+
kerykeion/house_comparison/__init__.py,sha256=dnSVpx_pKylYUeaTGxHsSlN15HqQS6eJHpDQOrIvrpY,107
|
|
30
|
+
kerykeion/house_comparison/house_comparison_factory.py,sha256=YkA7itvkyIcKEf8Ffi53on-gGhsHi_Oeu9Gm4N9aHQs,4588
|
|
31
|
+
kerykeion/house_comparison/house_comparison_utils.py,sha256=vzME6Aw5njCXu6BmPLuhgfEVDI00qfQI7MPH-YujO1g,5071
|
|
32
|
+
kerykeion/kr_types/__init__.py,sha256=qu6A0wjQEkBgCGAyTRl2srHvq6LOiBlNsrlEcVomx78,1990
|
|
33
|
+
kerykeion/kr_types/chart_template_model.py,sha256=k4WhL3sKAa8iCTsvlH4dFdOBByLIkgT7Y1MHBuYem1Q,733
|
|
34
|
+
kerykeion/kr_types/kerykeion_exception.py,sha256=_Jjd-5DuBA4qBG58ob5Lhe9HANrXCaihMagD0icPZc0,726
|
|
35
|
+
kerykeion/kr_types/kr_literals.py,sha256=_yZ-mtuomVxa1sMpxemA6T30PGVPMdGxbF_K2jmWfTo,670
|
|
36
|
+
kerykeion/kr_types/kr_models.py,sha256=-cesGCN8-CjmPSqCH6CMnc0hDA_87g4zflEHxiKi1QY,656
|
|
37
|
+
kerykeion/kr_types/settings_models.py,sha256=xtpsrhjmhdowDSBeQ7TEMR53-uEEspCoXKCLnq18nDo,698
|
|
38
|
+
kerykeion/schemas/__init__.py,sha256=EcwbnoYPKLq3m7n5s2cEZ8UyWpxdmHXbvM23hLNBNBI,2376
|
|
39
|
+
kerykeion/schemas/chart_template_model.py,sha256=fQ_EZ8ccOgNd4gXu5KilF1dUH9B2RVCDLHc09YkYLyY,8978
|
|
40
|
+
kerykeion/schemas/kerykeion_exception.py,sha256=vTYdwj_mL-Q-MqHJvEzzBXxQ5YI2kAwUC6ImoWxMKXc,454
|
|
41
|
+
kerykeion/schemas/kr_literals.py,sha256=mvPH3_TyuF5GTYKfIGk9SpxbuW7uYhSlp20SZJ7l6BY,5658
|
|
42
|
+
kerykeion/schemas/kr_models.py,sha256=e1PQxUqC437IWIVKrOi71NVR5bEV7KGhF_JAaxs9zN0,21945
|
|
43
|
+
kerykeion/schemas/settings_models.py,sha256=NBbtT7s0GzpWxLVygSszaCmefKP8yQyAIPxgr2Y-93Y,17927
|
|
44
|
+
kerykeion/settings/__init__.py,sha256=IJUqkYTpvmbKecVeCbsiL1qU_4xWc78u4OrvN_T3ZAI,624
|
|
45
|
+
kerykeion/settings/chart_defaults.py,sha256=TSm2hXCxym3I7XpIqIMBLWM253Z0dCGbhPi2MpWbD_0,12490
|
|
46
|
+
kerykeion/settings/config_constants.py,sha256=D1PApNT7Zldlv8QINmaKnyLovY5UJ2FsAqHNTTPd5ps,3717
|
|
47
|
+
kerykeion/settings/kerykeion_settings.py,sha256=aeRlxvy2GwC-mxoD_DFMXMoO4yPQp1XQbEAGVQat0Wo,1947
|
|
48
|
+
kerykeion/settings/translation_strings.py,sha256=HoavTMRKsjmNDv97YJg4wWumPA8iLURhFJpudUPdhWc,57354
|
|
49
|
+
kerykeion/settings/translations.py,sha256=A_Zwr-ujvxBLvE4a87-28pM3KifdUaAvsR3XvMZNg0s,2377
|
|
50
|
+
kerykeion/sweph/README.md,sha256=L7FtNAJTWtrZNGKa8MX87SjduFYPYxwWhaI5fmtzNZo,73
|
|
51
|
+
kerykeion/sweph/seas_18.se1,sha256=X9nCqhZU43wJpq61WAdueVQJt9xL2UjrwPqn1Kdoa1s,223002
|
|
52
|
+
kerykeion/sweph/sefstars.txt,sha256=GLDcr75bckB3PauiwDijJfWz_EFj9h4Kf06Sq9T1F8Y,136618
|
|
53
|
+
kerykeion/sweph/ast136/s136108s.se1,sha256=eSDfBurMBVnawSnZZgwHUrwqeAZYlKPLH1NNtq0ep7I,19489
|
|
54
|
+
kerykeion/sweph/ast136/s136199s.se1,sha256=eNBaQGxAmnqeAgE_C-cpsX4BTgPYR4_H9HRkI9QHMPA,14514
|
|
55
|
+
kerykeion/sweph/ast136/s136472s.se1,sha256=TjBnDMtPWdBzbOHn9Mju5C2i-Kfg1dT7kQaeVuGOoi8,19454
|
|
56
|
+
kerykeion/sweph/ast28/se28978s.se1,sha256=nU2Qp-ELc_tzFnRc1QT6uVueWXEipvhYDgfQRX1TAC4,16227
|
|
57
|
+
kerykeion/sweph/ast50/se50000s.se1,sha256=9jTrPlIrZMOBWC9cNgwzcfz0KBHdXFZoY9-NZ_HtECo,15748
|
|
58
|
+
kerykeion/sweph/ast90/se90377s.se1,sha256=bto2x4LtBv8b1ej1XhVFYq-kfHO9cczbKV9U1f9UVu4,10288
|
|
59
|
+
kerykeion/sweph/ast90/se90482s.se1,sha256=uHxz6bP4K8zgtQFrlWFwxrYfmqm5kXxsg6OYhAIUbAA,16173
|
|
60
|
+
kerykeion-5.1.9.dist-info/METADATA,sha256=HsfnlBUkJrI5RijfnAPuL1nhxRdouU95-JRtpWnOegM,61802
|
|
61
|
+
kerykeion-5.1.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
62
|
+
kerykeion-5.1.9.dist-info/licenses/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
|
|
63
|
+
kerykeion-5.1.9.dist-info/RECORD,,
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
This is part of Kerykeion (C) 2024 Giacomo Battaglia
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from kerykeion import AstrologicalSubject
|
|
8
|
-
import logging
|
|
9
|
-
from typing import Union
|
|
10
|
-
from kerykeion.settings.kerykeion_settings import get_settings
|
|
11
|
-
from dataclasses import dataclass
|
|
12
|
-
from functools import cached_property
|
|
13
|
-
from kerykeion.aspects.aspects_utils import planet_id_decoder, get_aspect_from_two_points, get_active_points_list
|
|
14
|
-
from kerykeion.kr_types.kr_models import AstrologicalSubjectModel, AspectModel
|
|
15
|
-
from kerykeion.kr_types.settings_models import KerykeionSettingsModel
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AXES_LIST = [
|
|
19
|
-
"First_House",
|
|
20
|
-
"Tenth_House",
|
|
21
|
-
"Seventh_House",
|
|
22
|
-
"Fourth_House",
|
|
23
|
-
]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
@dataclass
|
|
27
|
-
class NatalAspects:
|
|
28
|
-
"""
|
|
29
|
-
Generates an object with all the aspects of a birthcart.
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
user: Union[AstrologicalSubject, AstrologicalSubjectModel]
|
|
33
|
-
new_settings_file: Union[Path, KerykeionSettingsModel, dict, None] = None
|
|
34
|
-
|
|
35
|
-
def __post_init__(self):
|
|
36
|
-
self.settings = get_settings(self.new_settings_file)
|
|
37
|
-
|
|
38
|
-
self.celestial_points = self.settings.celestial_points
|
|
39
|
-
self.aspects_settings = self.settings.aspects
|
|
40
|
-
self.axes_orbit_settings = self.settings.general_settings.axes_orbit
|
|
41
|
-
|
|
42
|
-
@cached_property
|
|
43
|
-
def all_aspects(self):
|
|
44
|
-
"""
|
|
45
|
-
Return all the aspects of the points in the natal chart in a dictionary,
|
|
46
|
-
first all the individual aspects of each planet, second the aspects
|
|
47
|
-
without repetitions.
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
active_points_list = get_active_points_list(self.user, self.settings)
|
|
51
|
-
|
|
52
|
-
self.all_aspects_list = []
|
|
53
|
-
|
|
54
|
-
for first in range(len(active_points_list)):
|
|
55
|
-
# Generates the aspects list without repetitions
|
|
56
|
-
for second in range(first + 1, len(active_points_list)):
|
|
57
|
-
aspect = get_aspect_from_two_points(
|
|
58
|
-
self.aspects_settings, active_points_list[first]["abs_pos"],
|
|
59
|
-
active_points_list[second]["abs_pos"]
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
verdict = aspect["verdict"]
|
|
63
|
-
name = aspect["name"]
|
|
64
|
-
orbit = aspect["orbit"]
|
|
65
|
-
aspect_degrees = aspect["aspect_degrees"]
|
|
66
|
-
aid = aspect["aid"]
|
|
67
|
-
diff = aspect["diff"]
|
|
68
|
-
|
|
69
|
-
if verdict == True:
|
|
70
|
-
aspect_model = AspectModel(
|
|
71
|
-
p1_name=active_points_list[first]["name"],
|
|
72
|
-
p1_abs_pos=active_points_list[first]["abs_pos"],
|
|
73
|
-
p2_name=active_points_list[second]["name"],
|
|
74
|
-
p2_abs_pos=active_points_list[second]["abs_pos"],
|
|
75
|
-
aspect=name,
|
|
76
|
-
orbit=orbit,
|
|
77
|
-
aspect_degrees=aspect_degrees,
|
|
78
|
-
aid=aid,
|
|
79
|
-
diff=diff,
|
|
80
|
-
p1=planet_id_decoder(self.celestial_points, active_points_list[first]["name"]),
|
|
81
|
-
p2=planet_id_decoder(self.celestial_points, active_points_list[second]["name"]),
|
|
82
|
-
is_major=self.aspects_settings[aid]["is_major"],
|
|
83
|
-
)
|
|
84
|
-
self.all_aspects_list.append(aspect_model)
|
|
85
|
-
|
|
86
|
-
return self.all_aspects_list
|
|
87
|
-
|
|
88
|
-
@cached_property
|
|
89
|
-
def relevant_aspects(self):
|
|
90
|
-
"""
|
|
91
|
-
Filters the aspects list with the desired points, in this case
|
|
92
|
-
the most important are hardcoded.
|
|
93
|
-
Set the list with set_points and creating a list with the names
|
|
94
|
-
or the numbers of the houses.
|
|
95
|
-
The relevant aspects are the ones that are set as active ("is_active") in the settings.
|
|
96
|
-
"""
|
|
97
|
-
|
|
98
|
-
logging.debug("Relevant aspects not already calculated, calculating now...")
|
|
99
|
-
self.all_aspects
|
|
100
|
-
|
|
101
|
-
aspects_filtered = []
|
|
102
|
-
for a in self.all_aspects_list:
|
|
103
|
-
if self.aspects_settings[a["aid"]]["is_active"] == True:
|
|
104
|
-
aspects_filtered.append(a)
|
|
105
|
-
|
|
106
|
-
axes_list = AXES_LIST
|
|
107
|
-
counter = 0
|
|
108
|
-
|
|
109
|
-
aspects_list_subtract = []
|
|
110
|
-
for a in aspects_filtered:
|
|
111
|
-
counter += 1
|
|
112
|
-
name_p1 = str(a["p1_name"])
|
|
113
|
-
name_p2 = str(a["p2_name"])
|
|
114
|
-
|
|
115
|
-
if name_p1 in axes_list:
|
|
116
|
-
if abs(a["orbit"]) >= self.axes_orbit_settings:
|
|
117
|
-
aspects_list_subtract.append(a)
|
|
118
|
-
|
|
119
|
-
elif name_p2 in axes_list:
|
|
120
|
-
if abs(a["orbit"]) >= self.axes_orbit_settings:
|
|
121
|
-
aspects_list_subtract.append(a)
|
|
122
|
-
|
|
123
|
-
self.aspects = [item for item in aspects_filtered if item not in aspects_list_subtract]
|
|
124
|
-
|
|
125
|
-
return self.aspects
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if __name__ == "__main__":
|
|
129
|
-
from kerykeion.utilities import setup_logging
|
|
130
|
-
|
|
131
|
-
setup_logging(level="debug")
|
|
132
|
-
|
|
133
|
-
johnny = AstrologicalSubject("Johnny Depp", 1963, 6, 9, 0, 0, "Owensboro", "US")
|
|
134
|
-
|
|
135
|
-
# All aspects
|
|
136
|
-
aspects = NatalAspects(johnny)
|
|
137
|
-
print(aspects.all_aspects)
|
|
138
|
-
|
|
139
|
-
print("\n")
|
|
140
|
-
|
|
141
|
-
# Relevant aspects
|
|
142
|
-
aspects = NatalAspects(johnny)
|
|
143
|
-
print(aspects.relevant_aspects)
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
This is part of Kerykeion (C) 2024 Giacomo Battaglia
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from kerykeion import AstrologicalSubject
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
from typing import Union
|
|
9
|
-
from functools import cached_property
|
|
10
|
-
|
|
11
|
-
from kerykeion.aspects.natal_aspects import NatalAspects
|
|
12
|
-
from kerykeion.settings.kerykeion_settings import get_settings
|
|
13
|
-
from kerykeion.aspects.aspects_utils import planet_id_decoder, get_aspect_from_two_points, get_active_points_list
|
|
14
|
-
from kerykeion.kr_types.kr_models import AstrologicalSubjectModel, AspectModel
|
|
15
|
-
from kerykeion.kr_types.settings_models import KerykeionSettingsModel
|
|
16
|
-
from typing import Union
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class SynastryAspects(NatalAspects):
|
|
20
|
-
"""
|
|
21
|
-
Generates an object with all the aspects between two persons.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
def __init__(
|
|
25
|
-
self,
|
|
26
|
-
kr_object_one: Union[AstrologicalSubject, AstrologicalSubjectModel],
|
|
27
|
-
kr_object_two: Union[AstrologicalSubject, AstrologicalSubjectModel],
|
|
28
|
-
new_settings_file: Union[Path, KerykeionSettingsModel, dict, None] = None,
|
|
29
|
-
):
|
|
30
|
-
# Subjects
|
|
31
|
-
self.first_user = kr_object_one
|
|
32
|
-
self.second_user = kr_object_two
|
|
33
|
-
|
|
34
|
-
# Settings
|
|
35
|
-
self.new_settings_file = new_settings_file
|
|
36
|
-
self.settings = get_settings(self.new_settings_file)
|
|
37
|
-
|
|
38
|
-
self.celestial_points = self.settings.celestial_points
|
|
39
|
-
self.aspects_settings = self.settings.aspects
|
|
40
|
-
self.axes_orbit_settings = self.settings.general_settings.axes_orbit
|
|
41
|
-
|
|
42
|
-
# Private variables of the aspects
|
|
43
|
-
self._all_aspects: Union[list, None] = None
|
|
44
|
-
self._relevant_aspects: Union[list, None] = None
|
|
45
|
-
|
|
46
|
-
@cached_property
|
|
47
|
-
def all_aspects(self):
|
|
48
|
-
"""
|
|
49
|
-
Return all the aspects of the points in the natal chart in a dictionary,
|
|
50
|
-
first all the individual aspects of each planet, second the aspects
|
|
51
|
-
whiteout repetitions.
|
|
52
|
-
"""
|
|
53
|
-
|
|
54
|
-
if self._all_aspects is not None:
|
|
55
|
-
return self._all_aspects
|
|
56
|
-
|
|
57
|
-
# Celestial Points Lists
|
|
58
|
-
first_active_points_list = get_active_points_list(self.first_user, self.settings)
|
|
59
|
-
second_active_points_list = get_active_points_list(self.second_user, self.settings)
|
|
60
|
-
|
|
61
|
-
self.all_aspects_list = []
|
|
62
|
-
|
|
63
|
-
for first in range(len(first_active_points_list)):
|
|
64
|
-
# Generates the aspects list whitout repetitions
|
|
65
|
-
for second in range(len(second_active_points_list)):
|
|
66
|
-
aspect = get_aspect_from_two_points(
|
|
67
|
-
self.aspects_settings,
|
|
68
|
-
first_active_points_list[first]["abs_pos"],
|
|
69
|
-
second_active_points_list[second]["abs_pos"],
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
verdict = aspect["verdict"]
|
|
73
|
-
name = aspect["name"]
|
|
74
|
-
orbit = aspect["orbit"]
|
|
75
|
-
aspect_degrees = aspect["aspect_degrees"]
|
|
76
|
-
aid = aspect["aid"]
|
|
77
|
-
diff = aspect["diff"]
|
|
78
|
-
|
|
79
|
-
if verdict == True:
|
|
80
|
-
aspect_model = AspectModel(
|
|
81
|
-
p1_name=first_active_points_list[first]["name"],
|
|
82
|
-
p1_abs_pos=first_active_points_list[first]["abs_pos"],
|
|
83
|
-
p2_name=second_active_points_list[second]["name"],
|
|
84
|
-
p2_abs_pos=second_active_points_list[second]["abs_pos"],
|
|
85
|
-
aspect=name,
|
|
86
|
-
orbit=orbit,
|
|
87
|
-
aspect_degrees=aspect_degrees,
|
|
88
|
-
aid=aid,
|
|
89
|
-
diff=diff,
|
|
90
|
-
p1=planet_id_decoder(self.celestial_points, first_active_points_list[first]["name"]),
|
|
91
|
-
p2=planet_id_decoder(self.celestial_points, second_active_points_list[second]["name"]),
|
|
92
|
-
is_major=self.aspects_settings[aid]["is_major"],
|
|
93
|
-
)
|
|
94
|
-
self.all_aspects_list.append(aspect_model)
|
|
95
|
-
|
|
96
|
-
return self.all_aspects_list
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if __name__ == "__main__":
|
|
100
|
-
from kerykeion.utilities import setup_logging
|
|
101
|
-
|
|
102
|
-
setup_logging(level="debug")
|
|
103
|
-
|
|
104
|
-
john = AstrologicalSubject("John", 1940, 10, 9, 18, 30, "Liverpool")
|
|
105
|
-
yoko = AstrologicalSubject("Yoko", 1933, 2, 18, 18, 30, "Tokyo", "JP")
|
|
106
|
-
|
|
107
|
-
synastry_aspects = SynastryAspects(john, yoko)
|
|
108
|
-
|
|
109
|
-
# All aspects
|
|
110
|
-
print(synastry_aspects.all_aspects)
|
|
111
|
-
|
|
112
|
-
# Relevant aspects
|
|
113
|
-
print(synastry_aspects.relevant_aspects)
|