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

@@ -0,0 +1,175 @@
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
+ from kerykeion.kr_types.kr_models import AstrologicalSubjectModel
12
+ import warnings
13
+
14
+
15
+ class RelationshipScore:
16
+ """
17
+ Calculates the relevance of the relationship between two subjects using the Ciro Discepolo method.
18
+
19
+ Results:
20
+ - 0 to 5: Minimal relationship
21
+ - 5 to 10: Medium relationship
22
+ - 10 to 15: Important relationship
23
+ - 15 to 20: Very important relationship
24
+ - 20 and 35: Exceptional relationship
25
+ - 35 and above: Rare Exceptional relationship
26
+
27
+ Documentation: http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
28
+
29
+ Args:
30
+ first_subject (AstrologicalSubject): First subject instance
31
+ second_subject (AstrologicalSubject): Second subject instance
32
+ """
33
+
34
+ def __init__(
35
+ self,
36
+ first_subject: Union[AstrologicalSubject, AstrologicalSubjectModel],
37
+ second_subject: Union[AstrologicalSubject, AstrologicalSubjectModel],
38
+ new_settings_file: Union[Path, None] = None,
39
+ ):
40
+ warnings.warn(
41
+ "The RelationshipScore class is deprecated and will be removed in a future version. Use RelationshipScoreFactory instead.",
42
+ DeprecationWarning,
43
+ stacklevel=2
44
+ )
45
+ self.first_subject = first_subject
46
+ self.second_subject = second_subject
47
+ self.score = 0
48
+ self.is_destiny_sign = False
49
+ self.relevant_aspects: list = []
50
+ self.relevant_default_aspects: list = []
51
+ self.__all_synastry_aspects = SynastryAspects(first_subject, second_subject, new_settings_file=new_settings_file).all_aspects
52
+
53
+ # Calculate all aspects at initialization
54
+ self._calculate_all()
55
+
56
+ def __str__(self) -> str:
57
+ return f"CoupleScoreInstance: {self.first_subject.name} and {self.second_subject.name}, score: {self.score}"
58
+
59
+ def __dict__(self) -> dict: # type: ignore
60
+ return {
61
+ "first_subject_name": self.first_subject.name,
62
+ "second_subject_name": self.second_subject.name,
63
+ "score": self.score,
64
+ "relevant_aspects": self.relevant_aspects,
65
+ "relevant_default_aspects": self.relevant_default_aspects,
66
+ "is_destiny_sign": self.is_destiny_sign,
67
+ }
68
+
69
+ def _log_aspect(self, aspect: dict, points: int) -> None:
70
+ logging.debug(f"{points} Points: {aspect['p1_name']} {aspect['aspect']} {aspect['p2_name']}, rounded orbit: {int(aspect['orbit'])}")
71
+
72
+ def _evaluate_destiny_sign(self) -> int:
73
+ """
74
+ Adds 5 points if the subjects share the same sun sign quality.
75
+ """
76
+ if self.first_subject.sun["quality"] == self.second_subject.sun["quality"]:
77
+ logging.debug(f'5 points: Destiny sign, {self.first_subject.sun["sign"]} and {self.second_subject.sun["sign"]}')
78
+ self.is_destiny_sign = True
79
+ return 5
80
+ return 0
81
+
82
+ def _check_if_sun_sun_aspect(self, aspect: dict) -> int:
83
+ """
84
+ Adds points for Sun-Sun aspects:
85
+ - 8 points for conjunction/opposition/square
86
+ - 11 points if the aspect's orbit is <= 2 degrees
87
+ """
88
+ aspect_types = ["conjunction", "opposition", "square"]
89
+
90
+ if aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun" and aspect["aspect"] in aspect_types:
91
+ self.relevant_default_aspects.append(aspect)
92
+ score = 11 if aspect["orbit"] <= 2 else 8
93
+
94
+ self._log_aspect(aspect, score)
95
+ self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
96
+
97
+ return score
98
+ return 0
99
+
100
+ def _check_if_sun_moon_conjunction(self, aspect: dict) -> int:
101
+ """
102
+ Adds points for Sun-Moon conjunction:
103
+ - 8 points for conjunction
104
+ - 11 points if the aspect's orbit is <= 2 degrees
105
+ """
106
+ planets = {"Moon", "Sun"}
107
+
108
+ if {aspect["p1_name"], aspect["p2_name"]} == planets and aspect["aspect"] == "conjunction":
109
+ self.relevant_default_aspects.append(aspect)
110
+ score = 11 if aspect["orbit"] <= 2 else 8
111
+
112
+ self._log_aspect(aspect, score)
113
+ self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
114
+
115
+ return score
116
+ return 0
117
+
118
+ def _check_if_sun_moon_asc_aspect(self, aspect: dict) -> int:
119
+ """
120
+ Adds 4 points for aspects involving Sun, Moon, and Ascendant.
121
+ """
122
+ planets = ["Sun", "Moon", "First_House"]
123
+
124
+ if self._check_if_sun_sun_aspect(aspect) or self._check_if_sun_moon_conjunction(aspect):
125
+ return 0
126
+
127
+ if aspect["p1_name"] in planets and aspect["p2_name"] in planets:
128
+ self.relevant_default_aspects.append(aspect)
129
+ score = 4
130
+
131
+ self._log_aspect(aspect, score)
132
+ self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
133
+
134
+ return score
135
+ return 0
136
+
137
+ def _check_if_venus_mars_aspect(self, aspect: dict) -> int:
138
+ """
139
+ Adds 4 points for Venus-Mars aspects.
140
+ """
141
+ planets = {"Venus", "Mars"}
142
+
143
+ if {aspect["p1_name"], aspect["p2_name"]} == planets:
144
+ score = 4
145
+ self.relevant_default_aspects.append(aspect)
146
+
147
+ self._log_aspect(aspect, score)
148
+ self.relevant_aspects.append(self._create_aspects_dictionary(aspect, score))
149
+
150
+ return score
151
+ return 0
152
+
153
+ def _create_aspects_dictionary(self, aspect: dict, score: int) -> dict:
154
+ """
155
+ Creates a dictionary representation of an aspect with its score.
156
+ """
157
+ return {
158
+ "points": score,
159
+ "p1_name": aspect["p1_name"],
160
+ "p2_name": aspect["p2_name"],
161
+ "aspect": aspect["aspect"],
162
+ "orbit": aspect["orbit"],
163
+ }
164
+
165
+ def _calculate_all(self) -> None:
166
+ """
167
+ Calculates the total score based on all relevant aspects.
168
+ """
169
+ self.score += self._evaluate_destiny_sign()
170
+
171
+ for aspect in self.__all_synastry_aspects:
172
+ self.score += self._check_if_sun_sun_aspect(aspect)
173
+ self.score += self._check_if_sun_moon_conjunction(aspect)
174
+ self.score += self._check_if_sun_moon_asc_aspect(aspect)
175
+ self.score += self._check_if_venus_mars_aspect(aspect)
@@ -0,0 +1,275 @@
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
+ from kerykeion.kr_types.kr_models import AstrologicalSubjectModel, RelationshipScoreAspectModel, RelationshipScoreModel
12
+ from kerykeion.kr_types.kr_literals import RelationshipScoreDescription
13
+
14
+
15
+ class RelationshipScoreFactory:
16
+ """
17
+ Calculates the relevance of the relationship between two subjects using the Ciro Discepolo method.
18
+
19
+ Results:
20
+ - 0 to 5: Minimal relationship
21
+ - 5 to 10: Medium relationship
22
+ - 10 to 15: Important relationship
23
+ - 15 to 20: Very important relationship
24
+ - 20 to 35: Exceptional relationship
25
+ - 30 and above: Rare Exceptional relationship
26
+
27
+ Documentation: http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
28
+
29
+ Args:
30
+ first_subject (Union[AstrologicalSubject, AstrologicalSubjectModel]): First subject instance
31
+ second_subject (Union[AstrologicalSubject, AstrologicalSubjectModel]): Second subject instance
32
+ """
33
+
34
+ SCORE_MAPPING = [
35
+ ("Minimal", 5),
36
+ ("Medium", 10),
37
+ ("Important", 15),
38
+ ("Very Important", 20),
39
+ ("Exceptional", 30),
40
+ ("Rare Exceptional", float("inf")),
41
+ ]
42
+
43
+ def __init__(
44
+ self,
45
+ first_subject: Union[AstrologicalSubject, AstrologicalSubjectModel],
46
+ second_subject: Union[AstrologicalSubject, AstrologicalSubjectModel],
47
+ use_only_major_aspects: bool = True,
48
+ ):
49
+ if isinstance(first_subject, AstrologicalSubject):
50
+ self.first_subject = first_subject.model()
51
+ if isinstance(second_subject, AstrologicalSubject):
52
+ self.second_subject = second_subject.model()
53
+
54
+ self.use_only_major_aspects = use_only_major_aspects
55
+
56
+ self.score_value = 0
57
+ self.relationship_score_description: RelationshipScoreDescription = "Minimal"
58
+ self.is_destiny_sign = True
59
+ self.relationship_score_aspects: list[RelationshipScoreAspectModel] = []
60
+ self._synastry_aspects = SynastryAspects(self.first_subject, self.second_subject).all_aspects
61
+
62
+ def _evaluate_destiny_sign(self):
63
+ """
64
+ Evaluates if the subjects share the same sun sign quality and adds points if true.
65
+ """
66
+ if self.first_subject.sun["quality"] == self.second_subject.sun["quality"]:
67
+ self.is_destiny_sign = True
68
+ self.score_value += 5
69
+ logging.debug(f"Destiny sign found, adding 5 points, total score: {self.score_value}")
70
+
71
+ def _evaluate_aspect(self, aspect, points):
72
+ """
73
+ Evaluates an aspect and adds points to the score.
74
+
75
+ Args:
76
+ aspect (dict): Aspect information.
77
+ points (int): Points to add.
78
+ """
79
+ if self.use_only_major_aspects and not aspect["is_major"]:
80
+ return
81
+
82
+ self.score_value += points
83
+ self.relationship_score_aspects.append(
84
+ RelationshipScoreAspectModel(
85
+ p1_name=aspect["p1_name"],
86
+ p2_name=aspect["p2_name"],
87
+ aspect=aspect["aspect"],
88
+ orbit=aspect["orbit"],
89
+ )
90
+ )
91
+ logging.debug(f"{aspect['p1_name']}-{aspect['p2_name']} aspect: {aspect['aspect']} with orbit {aspect['orbit']} degrees, adding {points} points, total score: {self.score_value}, total aspects: {len(self.relationship_score_aspects)}")
92
+
93
+ def _evaluate_sun_sun_main_aspect(self, aspect):
94
+ """
95
+ Evaluates Sun-Sun main aspects and adds points accordingly:
96
+ - 8 points for conjunction/opposition/square
97
+ - 11 points if the aspect's orbit is <= 2 degrees
98
+
99
+ Args:
100
+ aspect (dict): Aspect information.
101
+ """
102
+ if aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun" and aspect["aspect"] in {"conjunction", "opposition", "square"}:
103
+ points = 11 if aspect["orbit"] <= 2 else 8
104
+ self._evaluate_aspect(aspect, points)
105
+
106
+ def _evaluate_sun_moon_conjunction(self, aspect):
107
+ """
108
+ Evaluates Sun-Moon conjunctions and adds points accordingly:
109
+ - 8 points for conjunction
110
+ - 11 points if the aspect's orbit is <= 2 degrees
111
+
112
+ Args:
113
+ aspect (dict): Aspect information.
114
+ """
115
+ if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Sun"} and aspect["aspect"] == "conjunction":
116
+ points = 11 if aspect["orbit"] <= 2 else 8
117
+ self._evaluate_aspect(aspect, points)
118
+
119
+ def _evaluate_sun_sun_other_aspects(self, aspect):
120
+ """
121
+ Evaluates Sun-Sun aspects that are not conjunctions and adds points accordingly:
122
+ - 4 points for other aspects
123
+
124
+ Args:
125
+ aspect (dict): Aspect information.
126
+ """
127
+ if aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun" and aspect["aspect"] not in {"conjunction", "opposition", "square"}:
128
+ points = 4
129
+ self._evaluate_aspect(aspect, points)
130
+
131
+ def _evaluate_sun_moon_other_aspects(self, aspect):
132
+ """
133
+ Evaluates Sun-Moon aspects that are not conjunctions and adds points accordingly:
134
+ - 4 points for other aspects
135
+
136
+ Args:
137
+ aspect (dict): Aspect information.
138
+ """
139
+ if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Sun"} and aspect["aspect"] != "conjunction":
140
+ points = 4
141
+ self._evaluate_aspect(aspect, points)
142
+
143
+ def _evaluate_sun_ascendant_aspect(self, aspect):
144
+ """
145
+ Evaluates Sun-Ascendant aspects and adds points accordingly:
146
+ - 4 points for any aspect
147
+
148
+ Args:
149
+ aspect (dict): Aspect information.
150
+ """
151
+ if {aspect["p1_name"], aspect["p2_name"]} == {"Sun", "First_House"}:
152
+ points = 4
153
+ self._evaluate_aspect(aspect, points)
154
+
155
+ def _evaluate_moon_ascendant_aspect(self, aspect):
156
+ """
157
+ Evaluates Moon-Ascendant aspects and adds points accordingly:
158
+ - 4 points for any aspect
159
+
160
+ Args:
161
+ aspect (dict): Aspect information.
162
+ """
163
+ if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "First_House"}:
164
+ points = 4
165
+ self._evaluate_aspect(aspect, points)
166
+
167
+ def _evaluate_venus_mars_aspect(self, aspect):
168
+ """
169
+ Evaluates Venus-Mars aspects and adds points accordingly:
170
+ - 4 points for any aspect
171
+
172
+ Args:
173
+ aspect (dict): Aspect information.
174
+ """
175
+ if {aspect["p1_name"], aspect["p2_name"]} == {"Venus", "Mars"}:
176
+ points = 4
177
+ self._evaluate_aspect(aspect, points)
178
+
179
+ def _evaluate_relationship_score_description(self):
180
+ """
181
+ Evaluates the relationship score description based on the total score.
182
+ """
183
+ for description, threshold in self.SCORE_MAPPING:
184
+ if self.score_value < threshold:
185
+ self.relationship_score_description = description
186
+ break
187
+
188
+ def get_relationship_score(self):
189
+ """
190
+ Calculates the relationship score based on synastry aspects.
191
+
192
+ Returns:
193
+ RelationshipScoreModel: The calculated relationship score.
194
+ """
195
+ self._evaluate_destiny_sign()
196
+
197
+ for aspect in self._synastry_aspects:
198
+ self._evaluate_sun_sun_main_aspect(aspect)
199
+ self._evaluate_sun_moon_conjunction(aspect)
200
+ self._evaluate_sun_moon_other_aspects(aspect)
201
+ self._evaluate_sun_sun_other_aspects(aspect)
202
+ self._evaluate_sun_ascendant_aspect(aspect)
203
+ self._evaluate_moon_ascendant_aspect(aspect)
204
+ self._evaluate_venus_mars_aspect(aspect)
205
+
206
+ self._evaluate_relationship_score_description()
207
+
208
+ return RelationshipScoreModel(
209
+ score_value=self.score_value,
210
+ score_description=self.relationship_score_description,
211
+ is_destiny_sign=self.is_destiny_sign,
212
+ aspects=self.relationship_score_aspects,
213
+ subjects=[self.first_subject, self.second_subject],
214
+ )
215
+
216
+
217
+ if __name__ == "__main__":
218
+ from kerykeion.utilities import setup_logging
219
+
220
+ setup_logging(level="critical")
221
+
222
+ john = AstrologicalSubject("John", 1940, 10, 9, 18, 30, "Liverpool", "UK")
223
+ yoko = AstrologicalSubject("Yoko", 1933, 2, 18, 20, 30, "Tokyo", "JP")
224
+
225
+ relationship_score_factory = RelationshipScoreFactory(john, yoko)
226
+ relationship_score = relationship_score_factory.get_relationship_score()
227
+
228
+ print("John and Yoko relationship score:")
229
+ print(relationship_score.score_value)
230
+ print(relationship_score.score_description)
231
+ print(relationship_score.is_destiny_sign)
232
+ print(len(relationship_score.aspects))
233
+ print(len(relationship_score_factory._synastry_aspects))
234
+
235
+ print("------------------->")
236
+ freud = AstrologicalSubject("Freud", 1856, 5, 6, 18, 30, "Freiberg", "DE")
237
+ jung = AstrologicalSubject("Jung", 1875, 7, 26, 18, 30, "Kesswil", "CH")
238
+
239
+ relationship_score_factory = RelationshipScoreFactory(freud, jung)
240
+ relationship_score = relationship_score_factory.get_relationship_score()
241
+
242
+ print("Freud and Jung relationship score:")
243
+ print(relationship_score.score_value)
244
+ print(relationship_score.score_description)
245
+ print(relationship_score.is_destiny_sign)
246
+ print(len(relationship_score.aspects))
247
+ print(len(relationship_score_factory._synastry_aspects))
248
+
249
+ print("------------------->")
250
+ richart_burton = AstrologicalSubject("Richard Burton", 1925, 11, 10, 15, 00, "Pontrhydyfen", "UK")
251
+ liz_taylor = AstrologicalSubject("Elizabeth Taylor", 1932, 2, 27, 2, 30, "London", "UK")
252
+
253
+ relationship_score_factory = RelationshipScoreFactory(richart_burton, liz_taylor)
254
+ relationship_score = relationship_score_factory.get_relationship_score()
255
+
256
+ print("Richard Burton and Elizabeth Taylor relationship score:")
257
+ print(relationship_score.score_value)
258
+ print(relationship_score.score_description)
259
+ print(relationship_score.is_destiny_sign)
260
+ print(len(relationship_score.aspects))
261
+ print(len(relationship_score_factory._synastry_aspects))
262
+
263
+ print("------------------->")
264
+ dario_fo = AstrologicalSubject("Dario Fo", 1926, 3, 24, 12, 25, "Sangiano", "IT")
265
+ franca_rame = AstrologicalSubject("Franca Rame", 1929, 7, 18, 12, 25, "Parabiago", "IT")
266
+
267
+ relationship_score_factory = RelationshipScoreFactory(dario_fo, franca_rame)
268
+ relationship_score = relationship_score_factory.get_relationship_score()
269
+
270
+ print("Dario Fo and Franca Rame relationship score:")
271
+ print(relationship_score.score_value)
272
+ print(relationship_score.score_description)
273
+ print(relationship_score.is_destiny_sign)
274
+ print(len(relationship_score.aspects))
275
+ print(len(relationship_score_factory._synastry_aspects))
@@ -377,6 +377,48 @@
377
377
  "Chiron": "Chiron",
378
378
  "Mean_Lilith": "Lilith"
379
379
  }
380
+ },
381
+ "HI": {
382
+ "info": "जानकारी",
383
+ "cusp": "घर",
384
+ "longitude": "देशांतर",
385
+ "latitude": "अक्षांश",
386
+ "north": "उत्तर",
387
+ "east": "पूर्व",
388
+ "south": "दक्षिण",
389
+ "west": "पश्चिम",
390
+ "fire": "अग्नि",
391
+ "earth": "पृथ्वी",
392
+ "air": "वायु",
393
+ "water": "जल",
394
+ "and_word": "और",
395
+ "transits": "गोचर के लिए",
396
+ "type": "प्रकार",
397
+ "aspects": "जोड़ी के पहलू",
398
+ "planets_and_house": "अंक के लिए",
399
+ "transit_name": "गोचर के समय",
400
+ "lunar_phase": "चंद्र चरण",
401
+ "day": "दिन",
402
+ "celestial_points": {
403
+ "Sun": "सूर्य",
404
+ "Moon": "चंद्रमा",
405
+ "Mercury": "बुध",
406
+ "Venus": "शुक्र",
407
+ "Mars": "मंगल",
408
+ "Jupiter": "गुरु",
409
+ "Saturn": "शनि",
410
+ "Uranus": "यूरेनस",
411
+ "Neptune": "नेपच्यून",
412
+ "Pluto": "प्लूटो",
413
+ "Asc": "आस",
414
+ "Mc": "एमसी",
415
+ "Dsc": "डीएससी",
416
+ "Ic": "आईसी",
417
+ "True_Node": "सत्य चंद्र नोड",
418
+ "Mean_Node": "औसत चंद्र नोड",
419
+ "Chiron": "चिरोन",
420
+ "Mean_Lilith": "लिलिथ"
421
+ }
380
422
  }
381
423
  },
382
424
  "aspects": [
@@ -384,9 +426,7 @@
384
426
  "degree": 0,
385
427
  "name": "conjunction",
386
428
  "is_active": 1,
387
- "visible_grid": 1,
388
429
  "is_major": 1,
389
- "is_minor": 0,
390
430
  "orb": 10,
391
431
  "color": "var(--kerykeion-chart-color-conjunction)"
392
432
  },
@@ -394,9 +434,7 @@
394
434
  "degree": 30,
395
435
  "name": "semi-sextile",
396
436
  "is_active": 0,
397
- "visible_grid": 0,
398
437
  "is_major": 0,
399
- "is_minor": 1,
400
438
  "orb": 1,
401
439
  "color": "var(--kerykeion-chart-color-semi-sextile)"
402
440
  },
@@ -404,9 +442,7 @@
404
442
  "degree": 45,
405
443
  "name": "semi-square",
406
444
  "is_active": 0,
407
- "visible_grid": 0,
408
445
  "is_major": 0,
409
- "is_minor": 1,
410
446
  "orb": 1,
411
447
  "color": "var(--kerykeion-chart-color-semi-square)"
412
448
  },
@@ -414,9 +450,7 @@
414
450
  "degree": 60,
415
451
  "name": "sextile",
416
452
  "is_active": 1,
417
- "visible_grid": 1,
418
453
  "is_major": 1,
419
- "is_minor": 0,
420
454
  "orb": 6,
421
455
  "color": "var(--kerykeion-chart-color-sextile)"
422
456
  },
@@ -424,9 +458,7 @@
424
458
  "degree": 72,
425
459
  "name": "quintile",
426
460
  "is_active": 1,
427
- "visible_grid": 1,
428
461
  "is_major": 0,
429
- "is_minor": 1,
430
462
  "orb": 1,
431
463
  "color": "var(--kerykeion-chart-color-quintile)"
432
464
  },
@@ -434,9 +466,7 @@
434
466
  "degree": 90,
435
467
  "name": "square",
436
468
  "is_active": 1,
437
- "visible_grid": 1,
438
469
  "is_major": 1,
439
- "is_minor": 0,
440
470
  "orb": 5,
441
471
  "color": "var(--kerykeion-chart-color-square)"
442
472
  },
@@ -444,9 +474,7 @@
444
474
  "degree": 120,
445
475
  "name": "trine",
446
476
  "is_active": 1,
447
- "visible_grid": 1,
448
477
  "is_major": 1,
449
- "is_minor": 0,
450
478
  "orb": 8,
451
479
  "color": "var(--kerykeion-chart-color-trine)"
452
480
  },
@@ -454,9 +482,7 @@
454
482
  "degree": 135,
455
483
  "name": "sesquiquadrate",
456
484
  "is_active": 0,
457
- "visible_grid": 0,
458
485
  "is_major": 0,
459
- "is_minor": 1,
460
486
  "orb": 1,
461
487
  "color": "var(--kerykeion-chart-color-sesquiquadrate)"
462
488
  },
@@ -464,9 +490,7 @@
464
490
  "degree": 144,
465
491
  "name": "biquintile",
466
492
  "is_active": 0,
467
- "visible_grid": 0,
468
493
  "is_major": 0,
469
- "is_minor": 1,
470
494
  "orb": 1,
471
495
  "color": "var(--kerykeion-chart-color-biquintile)"
472
496
  },
@@ -474,9 +498,7 @@
474
498
  "degree": 150,
475
499
  "name": "quincunx",
476
500
  "is_active": 0,
477
- "visible_grid": 0,
478
501
  "is_major": 0,
479
- "is_minor": 0,
480
502
  "orb": 1,
481
503
  "color": "var(--kerykeion-chart-color-quincunx)"
482
504
  },
@@ -484,9 +506,7 @@
484
506
  "degree": 180,
485
507
  "name": "opposition",
486
508
  "is_active": 1,
487
- "visible_grid": 1,
488
509
  "is_major": 1,
489
- "is_minor": 0,
490
510
  "orb": 10,
491
511
  "color": "var(--kerykeion-chart-color-opposition)"
492
512
  }
@@ -596,7 +616,7 @@
596
616
  "name": "True_Node",
597
617
  "color": "var(--kerykeion-chart-color-true-node)",
598
618
  "is_active": true,
599
- "element_points": 20,
619
+ "element_points": 0,
600
620
  "related_zodiac_signs": [],
601
621
  "label": "True_Node"
602
622
  },
@@ -696,12 +716,6 @@
696
716
  "lunar_phase_1": "var(--kerykeion-chart-color-lunar-phase-1)"
697
717
  },
698
718
  "general_settings": {
699
- "axes_orbit": 1,
700
- "planet_in_zodiac_extra_points": 10,
701
- "language": "EN"
702
- },
703
- "chart_settings": {
704
- "basic_chart_viewBox": "0 0 772.2 546.0",
705
- "wide_chart_viewBox": "0 0 1060 546.0"
719
+ "axes_orbit": 1
706
720
  }
707
721
  }
kerykeion/utilities.py CHANGED
@@ -107,6 +107,7 @@ def setup_logging(level: str) -> None:
107
107
  "info": logging.INFO,
108
108
  "warning": logging.WARNING,
109
109
  "error": logging.ERROR,
110
+ "critical": logging.CRITICAL,
110
111
  }
111
112
  format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
112
113
  loglevel: int = logging_options.get(level, logging.INFO)
@@ -261,9 +262,11 @@ def get_houses_list(subject: Union["AstrologicalSubject", AstrologicalSubjectMod
261
262
 
262
263
  return houses_absolute_position_list
263
264
 
265
+
264
266
  def get_available_planets_list(subject: Union["AstrologicalSubject", AstrologicalSubjectModel]) -> list[KerykeionPointModel]:
265
267
  """
266
- Return the names of the houses in the order of the houses.
268
+ Return the names of the planets in the order of the planets.
269
+ The names can be used to access the planets from the AstrologicalSubject object with the __getitem__ method or the [] operator.
267
270
  """
268
271
  planets_absolute_position_list = []
269
272
  for planet in subject.planets_names_list:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kerykeion
3
- Version: 4.17.2
3
+ Version: 4.18.1
4
4
  Summary: A python library for astrology.
5
5
  Home-page: https://www.kerykeion.net/
6
6
  License: AGPL-3.0
@@ -194,7 +194,7 @@ You can change the language of the SVG by passing the `chart_language` parameter
194
194
  ```python
195
195
  first = AstrologicalSubject("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB", chart_language="ES")
196
196
  ```
197
- More details [here](https://www.kerykeion.net/docs/examples/change-language).
197
+ More details [here](https://www.kerykeion.net/docs/examples/chart-language).
198
198
 
199
199
  ## Report
200
200