kerykeion 4.12.3__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 (36) hide show
  1. kerykeion/__init__.py +3 -1
  2. kerykeion/aspects/aspects_utils.py +40 -123
  3. kerykeion/aspects/natal_aspects.py +34 -25
  4. kerykeion/aspects/synastry_aspects.py +34 -28
  5. kerykeion/astrological_subject.py +199 -196
  6. kerykeion/charts/charts_utils.py +701 -62
  7. kerykeion/charts/draw_planets.py +407 -0
  8. kerykeion/charts/kerykeion_chart_svg.py +534 -1140
  9. kerykeion/charts/templates/aspect_grid_only.xml +452 -0
  10. kerykeion/charts/templates/chart.xml +88 -70
  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/enums.py +1 -0
  17. kerykeion/ephemeris_data.py +178 -0
  18. kerykeion/fetch_geonames.py +2 -3
  19. kerykeion/kr_types/chart_types.py +6 -16
  20. kerykeion/kr_types/kr_literals.py +12 -3
  21. kerykeion/kr_types/kr_models.py +77 -32
  22. kerykeion/kr_types/settings_models.py +4 -10
  23. kerykeion/relationship_score/__init__.py +2 -0
  24. kerykeion/relationship_score/relationship_score.py +175 -0
  25. kerykeion/relationship_score/relationship_score_factory.py +275 -0
  26. kerykeion/report.py +6 -3
  27. kerykeion/settings/kerykeion_settings.py +6 -1
  28. kerykeion/settings/kr.config.json +256 -102
  29. kerykeion/utilities.py +122 -217
  30. {kerykeion-4.12.3.dist-info → kerykeion-4.18.0.dist-info}/METADATA +40 -10
  31. kerykeion-4.18.0.dist-info/RECORD +42 -0
  32. kerykeion/relationship_score.py +0 -205
  33. kerykeion-4.12.3.dist-info/RECORD +0 -32
  34. {kerykeion-4.12.3.dist-info → kerykeion-4.18.0.dist-info}/LICENSE +0 -0
  35. {kerykeion-4.12.3.dist-info → kerykeion-4.18.0.dist-info}/WHEEL +0 -0
  36. {kerykeion-4.12.3.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,32 +0,0 @@
1
- LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
2
- kerykeion/__init__.py,sha256=AOTx2pvk1-SByVSen5VW4QHsN5LTIjNxpHOIjlm8XA4,487
3
- kerykeion/aspects/__init__.py,sha256=9FlDVI1ndCJga0-chNIhcLitjU_x3kbtAFfFqVp2ejc,293
4
- kerykeion/aspects/aspects_utils.py,sha256=ZCOnhgW6CZQrCruAGaf8vkUlBtjubbfKOqXy6qyQupE,5321
5
- kerykeion/aspects/natal_aspects.py,sha256=R47UToYKqbVrRmGzmY4pgsikcoXNmJvs5KhSmz7HZtM,4460
6
- kerykeion/aspects/synastry_aspects.py,sha256=BqG0E4tDZJjPQm3NTX3G6LkTuijP0AsKtI9pwH0F_Mc,3946
7
- kerykeion/astrological_subject.py,sha256=skJW8Xey_cyews-3CRusO_9jDTKTiOFOIWoeX5t0hHA,32781
8
- kerykeion/charts/__init__.py,sha256=Juxkduy2TaagWblh_7CE8Acrg3dHL27-WEddJhau_eQ,127
9
- kerykeion/charts/charts_utils.py,sha256=Pfy-SkPnABIy5ZkKgypnGqxXOAKhTRIeQX3fQKO8DgQ,15065
10
- kerykeion/charts/kerykeion_chart_svg.py,sha256=P3xRWedqdbYjeI1xX9saL729IXBfJ_8TWLz1AzUF5vI,64864
11
- kerykeion/charts/templates/chart.xml,sha256=aP_dVC2w2sULBtGrjrOUi46e5m59zKaMizMnTq1VfNM,67714
12
- kerykeion/enums.py,sha256=Ben9GLYkPucpYY2ZDpURzUbNCc9jzK2MuaffkgiXFdQ,965
13
- kerykeion/fetch_geonames.py,sha256=ZWB1DbcH54ab3fQhzPhLY0Dz0OaPJqiHFn2e7DRr1MM,4588
14
- kerykeion/kr_types/__init__.py,sha256=-qhGQikurdoHnGtuT1bsaEeZ-IwmZtIHMjGOPC9_oqQ,295
15
- kerykeion/kr_types/chart_types.py,sha256=qaZjm1rMpDDnUZlLjEihd9KPyv3PvrV8vkRmNBuRZzE,2201
16
- kerykeion/kr_types/kerykeion_exception.py,sha256=G-7VFta78qBt10l54JZWvwH-3lUNKmDwuILXaVGVu9A,314
17
- kerykeion/kr_types/kr_literals.py,sha256=Urk4wbRXeCOMhJEIkfvwTWrbU-Z5csDnh03hVwxpMbc,3140
18
- kerykeion/kr_types/kr_models.py,sha256=eZU3CYFjK2f2JvwNneUUHrBVPmS55u6PMywHv1VD9LA,3524
19
- kerykeion/kr_types/settings_models.py,sha256=Gh467QjvlGmheD6eJI1IHpuK4cz_hbtjGTJT_1NMoAE,12376
20
- kerykeion/relationship_score.py,sha256=R9JugfK5_gJgr5ND-EghkqpqZcutzzKlJ-2JnYUMVv4,6794
21
- kerykeion/report.py,sha256=kS5avIN119pJVapYjZOvabg77nEcA8sSrOuXbRifABk,2565
22
- kerykeion/settings/__init__.py,sha256=QQNFCl7sgN27MKaVscqtpPk10HGz4wZS3I_7KEGMaVA,69
23
- kerykeion/settings/kerykeion_settings.py,sha256=uRAbhJ0ZXAbGBPGJjhh5u8YX2phcXobEwJA646wMHcM,2347
24
- kerykeion/settings/kr.config.json,sha256=1Yhv9RGHom5U9e-JZZRWVfT2Ubllz2WrckdwadDWfyg,12282
25
- kerykeion/sweph/README.md,sha256=L7FtNAJTWtrZNGKa8MX87SjduFYPYxwWhaI5fmtzNZo,73
26
- kerykeion/sweph/seas_18.se1,sha256=X9nCqhZU43wJpq61WAdueVQJt9xL2UjrwPqn1Kdoa1s,223002
27
- kerykeion/utilities.py,sha256=1GxV7Du2L9QZEwNKc0oDjNsEddpAFCqY_kyWx38IRiA,11392
28
- kerykeion-4.12.3.dist-info/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
29
- kerykeion-4.12.3.dist-info/METADATA,sha256=8W1pRQlQ5UwY81Ukt1l4ICIGdQqMZRmWl5zVyLgj7ao,14410
30
- kerykeion-4.12.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
31
- kerykeion-4.12.3.dist-info/entry_points.txt,sha256=5SmANYscFDDTdeovHvGQ-cnj0hdFvGoxPaWLCpyDFnQ,49
32
- kerykeion-4.12.3.dist-info/RECORD,,