kerykeion 4.14.2__py3-none-any.whl → 4.18.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.

Files changed (34) hide show
  1. kerykeion/__init__.py +2 -1
  2. kerykeion/aspects/aspects_utils.py +33 -117
  3. kerykeion/aspects/natal_aspects.py +26 -25
  4. kerykeion/aspects/synastry_aspects.py +25 -27
  5. kerykeion/astrological_subject.py +145 -189
  6. kerykeion/charts/charts_utils.py +400 -126
  7. kerykeion/charts/draw_planets.py +407 -0
  8. kerykeion/charts/kerykeion_chart_svg.py +502 -770
  9. kerykeion/charts/templates/aspect_grid_only.xml +452 -0
  10. kerykeion/charts/templates/chart.xml +39 -39
  11. kerykeion/charts/templates/wheel_only.xml +499 -0
  12. kerykeion/charts/themes/classic.css +82 -0
  13. kerykeion/charts/themes/dark-high-contrast.css +121 -0
  14. kerykeion/charts/themes/dark.css +121 -0
  15. kerykeion/charts/themes/light.css +117 -0
  16. kerykeion/ephemeris_data.py +22 -18
  17. kerykeion/kr_types/chart_types.py +3 -7
  18. kerykeion/kr_types/kr_literals.py +10 -1
  19. kerykeion/kr_types/kr_models.py +33 -8
  20. kerykeion/kr_types/settings_models.py +1 -10
  21. kerykeion/relationship_score/__init__.py +2 -0
  22. kerykeion/relationship_score/relationship_score.py +175 -0
  23. kerykeion/relationship_score/relationship_score_factory.py +275 -0
  24. kerykeion/report.py +6 -3
  25. kerykeion/settings/kerykeion_settings.py +6 -1
  26. kerykeion/settings/kr.config.json +238 -98
  27. kerykeion/utilities.py +116 -215
  28. {kerykeion-4.14.2.dist-info → kerykeion-4.18.0.dist-info}/METADATA +40 -10
  29. kerykeion-4.18.0.dist-info/RECORD +42 -0
  30. kerykeion/relationship_score.py +0 -205
  31. kerykeion-4.14.2.dist-info/RECORD +0 -33
  32. {kerykeion-4.14.2.dist-info → kerykeion-4.18.0.dist-info}/LICENSE +0 -0
  33. {kerykeion-4.14.2.dist-info → kerykeion-4.18.0.dist-info}/WHEEL +0 -0
  34. {kerykeion-4.14.2.dist-info → kerykeion-4.18.0.dist-info}/entry_points.txt +0 -0
@@ -1,205 +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 kerykeion.aspects.synastry_aspects import SynastryAspects
8
- import logging
9
- from pathlib import Path
10
- from typing import Union
11
-
12
-
13
- class RelationshipScore:
14
- """
15
- Calculates the relevance of the relationship of the two subjects according to
16
- Ciro Discepolo method.
17
-
18
- Results:
19
- - From 0 to 5 = Null relationship
20
- - From 5 a 10 = Mediocre relationship
21
- - From 10 to 15 = Important relationship
22
- - From 15 to 20 = Very important relationship
23
- - From 20 to su = Exceptional relationship
24
-
25
- Documentation at:
26
- http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
27
-
28
- Args:
29
- first_subject (AstrologicalSubject): First subject kerykeion instance
30
- second_subject (AstrologicalSubject): Second subject kerykeion instance
31
-
32
- """
33
-
34
- first_subject: AstrologicalSubject
35
- second_subject: AstrologicalSubject
36
- score: int
37
- is_destiny_sign: bool
38
- relevant_aspects: list
39
- relevant_default_aspects: list
40
-
41
- def __init__(
42
- self,
43
- first_subject: AstrologicalSubject,
44
- second_subject: AstrologicalSubject,
45
- new_settings_file: Union[Path, None] = None,
46
- ):
47
- self.first_subject = first_subject
48
- self.second_subject = second_subject
49
- self.score = 0
50
- self.is_destiny_sign = False
51
- self.relevant_aspects = []
52
- self.relevant_default_aspects = []
53
- self.__all_synastry_aspects = SynastryAspects(
54
- first_subject, second_subject, new_settings_file=new_settings_file
55
- ).all_aspects
56
-
57
- # Calculates all at initialization
58
- self._get_all()
59
-
60
- def __str__(self) -> str:
61
- return f"CuppleScoreInstance: {self.first_subject.name} and {self.second_subject.name}, score: {self.score}"
62
-
63
- def __dict__(self):
64
- return {
65
- "first_subject_name": self.first_subject.name,
66
- "second_subject_name": self.second_subject.name,
67
- "score": self.score,
68
- "relevant_aspects": self.relevant_aspects,
69
- "relevant_default_aspects": self.relevant_default_aspects,
70
- "is_destiny_sign": self.is_destiny_sign,
71
- }
72
-
73
- def _log_aspect(self, aspect: dict, points: int) -> None:
74
- logging.debug(
75
- f"{points} Points: {aspect['p1_name']} {aspect['aspect']} {aspect['p2_name']}, rounded orbit: {int(aspect['orbit'])}"
76
- )
77
-
78
- def _evaluate_destiny_sign(self) -> int:
79
- """
80
- 5 points if is a destiny sign:
81
- """
82
- if self.first_subject.sun["quality"] == self.second_subject.sun["quality"]:
83
- logging.debug(
84
- f'5 points: Destiny sign, {self.first_subject.sun["sign"]} and {self.second_subject.sun["sign"]}'
85
- )
86
- self.is_destiny_sign = True
87
- return 5
88
-
89
- return 0
90
-
91
- def _check_if_sun_sun_aspect(self, aspect: dict, log: bool = True) -> int:
92
- """
93
- 8 points if Sun conjunction/opposition/square to Sun,
94
- 11 if diff <= 2 degrees:
95
- """
96
- aspect_types = ["conjunction", "opposition", "square"]
97
-
98
- if (aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun") and (aspect["aspect"] in aspect_types):
99
- self.relevant_default_aspects.append(aspect)
100
-
101
- if aspect["orbit"] <= 2:
102
- score = 11
103
-
104
- self._log_aspect(aspect, score)
105
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
106
-
107
- return score
108
- else:
109
- score = 8
110
-
111
- self._log_aspect(aspect, score)
112
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
113
-
114
- return score
115
-
116
- return 0
117
-
118
- def _check_if_sun_moon_conjunction(self, aspect: dict) -> int:
119
- """
120
- 8 points if Moon conjunction/opposition/square to Moon,
121
- 11 if diff <= 2 degrees:
122
- """
123
- planets = set(["Moon", "Sun"])
124
-
125
- if set([aspect["p1_name"], aspect["p2_name"]]) == planets and aspect["aspect"] == "conjunction":
126
- self.relevant_default_aspects.append(aspect)
127
-
128
- if aspect["orbit"] <= 2:
129
- score = 11
130
-
131
- self._log_aspect(aspect, score)
132
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
133
-
134
- return score
135
-
136
- else:
137
- score = 8
138
-
139
- self._log_aspect(aspect, score)
140
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
141
-
142
- return score
143
-
144
- return 0
145
-
146
- def _check_if_sun_moon_asc_aspect(self, aspect: dict) -> int:
147
- planets = ["Sun", "Moon", "First_House"]
148
-
149
- if self._check_if_sun_sun_aspect(aspect) or self._check_if_sun_moon_conjunction(aspect):
150
- return 0
151
-
152
- if aspect["p1_name"] in planets and aspect["p2_name"] in planets:
153
- self.relevant_default_aspects.append(aspect)
154
- score = 4
155
-
156
- self._log_aspect(aspect, score)
157
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
158
-
159
- return score
160
-
161
- return 0
162
-
163
- def _check_if_venus_mars_aspect(self, aspect: dict) -> int:
164
- planets = set(["Venus", "Mars"])
165
- if set([aspect["p1_name"], aspect["p2_name"]]) == planets:
166
- score = 4
167
- self.relevant_default_aspects.append(aspect)
168
-
169
- self._log_aspect(aspect, score)
170
- self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
171
-
172
- return score
173
-
174
- return 0
175
-
176
- def _create_aspects_dictionary(self, aspect: dict, score: int) -> dict:
177
- return {
178
- "points": score,
179
- "p1_name": aspect["p1_name"],
180
- "p2_name": aspect["p2_name"],
181
- "aspect": aspect["aspect"],
182
- "orbit": aspect["orbit"],
183
- }
184
-
185
- def _get_all(self) -> None:
186
- self.score += self._evaluate_destiny_sign()
187
-
188
- for a in self.__all_synastry_aspects:
189
- self.score += self._check_if_sun_sun_aspect(a)
190
- self.score += self._check_if_sun_moon_conjunction(a)
191
- self.score += self._check_if_sun_moon_asc_aspect(a)
192
- self.score += self._check_if_venus_mars_aspect(a)
193
-
194
-
195
- if __name__ == "__main__":
196
- from kerykeion.utilities import setup_logging
197
- setup_logging(level="debug")
198
-
199
- lui = AstrologicalSubject("John", 1975, 10, 10, 21, 15, "Roma", "IT")
200
- lei = AstrologicalSubject("Sarah", 1978, 2, 9, 15, 50, "Roma", "IT")
201
-
202
- score = RelationshipScore(lui, lei)
203
- print(score.__dict__()["score"])
204
- print(score.__dict__()["is_destiny_sign"])
205
- print(score.__dict__()["relevant_aspects"][0])
@@ -1,33 +0,0 @@
1
- LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
2
- kerykeion/__init__.py,sha256=f4_J_hAh_OSLAUrabqVhrc1rH59I6X1LS9vuAEzE9PY,536
3
- kerykeion/aspects/__init__.py,sha256=9FlDVI1ndCJga0-chNIhcLitjU_x3kbtAFfFqVp2ejc,293
4
- kerykeion/aspects/aspects_utils.py,sha256=8zPbP4xTOiaSwJ8Yet6wh38Icsd0xUNVG-dptkuD-Ik,5409
5
- kerykeion/aspects/natal_aspects.py,sha256=jzYItHWZcyaWqWJ6_akwFx3ct1eFesCcu0fE5l-1_uo,4691
6
- kerykeion/aspects/synastry_aspects.py,sha256=uYzHZNSw7IckE5ngtyaQ7LhNzCfTB4VZOhKlly43-oc,4167
7
- kerykeion/astrological_subject.py,sha256=zewCsuCdCyrhDRPgaNiwEPM4KaQPfKWFPFxj3Y76ZVk,35472
8
- kerykeion/charts/__init__.py,sha256=Juxkduy2TaagWblh_7CE8Acrg3dHL27-WEddJhau_eQ,127
9
- kerykeion/charts/charts_utils.py,sha256=A6ZHCM9en_BeCOAaoVmyH9yrm_TUD-vg9np4myvl-Rw,29448
10
- kerykeion/charts/kerykeion_chart_svg.py,sha256=UaXFaZci4vzkGL-BzZDGspI6KiNzIRuqpjD4Q5-n1u0,49312
11
- kerykeion/charts/templates/chart.xml,sha256=axmNWwAgPpuSNRDx-aaaArO29fZXQ9E8ODSFInOZuH8,68435
12
- kerykeion/enums.py,sha256=Xp_0A6jBSW7SZvB5LlKfBObg0xTqB6hTq1IXjz-UWl4,997
13
- kerykeion/ephemeris_data.py,sha256=8r-h4wPKFwfM--DFcxv5QouoqlYCJbaH78d5PKh8v_E,8085
14
- kerykeion/fetch_geonames.py,sha256=NmyTErvKISjJCAxvRB1H35aVZI8_-_U-Cqb_rmqRseA,4563
15
- kerykeion/kr_types/__init__.py,sha256=-qhGQikurdoHnGtuT1bsaEeZ-IwmZtIHMjGOPC9_oqQ,295
16
- kerykeion/kr_types/chart_types.py,sha256=GmX7u7wDXax8y4ZbQZCrvvUzAquuILcjGFzTuk9WGkw,2110
17
- kerykeion/kr_types/kerykeion_exception.py,sha256=G-7VFta78qBt10l54JZWvwH-3lUNKmDwuILXaVGVu9A,314
18
- kerykeion/kr_types/kr_literals.py,sha256=o1yLhsWNOTSCd3O1pYGhQU4w9sUEF9mt_v6DWUqutyE,3156
19
- kerykeion/kr_types/kr_models.py,sha256=nrH0GJAWQiAG8MECW3WUuy_DlB6aLET1zPqSFIBV2BE,3648
20
- kerykeion/kr_types/settings_models.py,sha256=loWmKjqE4uOxFy_2Evuj8m32sChL5o9dHQGP43gFD00,12532
21
- kerykeion/relationship_score.py,sha256=R9JugfK5_gJgr5ND-EghkqpqZcutzzKlJ-2JnYUMVv4,6794
22
- kerykeion/report.py,sha256=kS5avIN119pJVapYjZOvabg77nEcA8sSrOuXbRifABk,2565
23
- kerykeion/settings/__init__.py,sha256=QQNFCl7sgN27MKaVscqtpPk10HGz4wZS3I_7KEGMaVA,69
24
- kerykeion/settings/kerykeion_settings.py,sha256=uRAbhJ0ZXAbGBPGJjhh5u8YX2phcXobEwJA646wMHcM,2347
25
- kerykeion/settings/kr.config.json,sha256=3BNbPBfF-hCMx-LWtQxWCE7npf7lOrJ-AIOzowLwdgs,12646
26
- kerykeion/sweph/README.md,sha256=L7FtNAJTWtrZNGKa8MX87SjduFYPYxwWhaI5fmtzNZo,73
27
- kerykeion/sweph/seas_18.se1,sha256=X9nCqhZU43wJpq61WAdueVQJt9xL2UjrwPqn1Kdoa1s,223002
28
- kerykeion/utilities.py,sha256=s6zY1n25awevSy3qqsO03Bvnkh2Z7GMyinpYc9zU9Fs,11447
29
- kerykeion-4.14.2.dist-info/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
30
- kerykeion-4.14.2.dist-info/METADATA,sha256=mQa3uimc4_Blmi8Ewy6JlO9Z4Fpcyst5jJDuDYXaxsM,14410
31
- kerykeion-4.14.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
32
- kerykeion-4.14.2.dist-info/entry_points.txt,sha256=5SmANYscFDDTdeovHvGQ-cnj0hdFvGoxPaWLCpyDFnQ,49
33
- kerykeion-4.14.2.dist-info/RECORD,,