kerykeion 5.0.0a9__py3-none-any.whl → 5.0.0a11__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 (42) hide show
  1. kerykeion/__init__.py +21 -4
  2. kerykeion/aspects/__init__.py +7 -2
  3. kerykeion/aspects/aspects_utils.py +1 -3
  4. kerykeion/aspects/natal_aspects_factory.py +235 -0
  5. kerykeion/aspects/synastry_aspects_factory.py +275 -0
  6. kerykeion/astrological_subject_factory.py +688 -86
  7. kerykeion/charts/charts_utils.py +12 -12
  8. kerykeion/charts/draw_planets.py +584 -344
  9. kerykeion/charts/kerykeion_chart_svg.py +11 -16
  10. kerykeion/charts/templates/wheel_only.xml +1 -1
  11. kerykeion/composite_subject_factory.py +229 -10
  12. kerykeion/ephemeris_data_factory.py +431 -0
  13. kerykeion/fetch_geonames.py +27 -8
  14. kerykeion/house_comparison/__init__.py +6 -0
  15. kerykeion/house_comparison/house_comparison_factory.py +1 -1
  16. kerykeion/house_comparison/house_comparison_utils.py +0 -1
  17. kerykeion/kr_types/__init__.py +49 -0
  18. kerykeion/kr_types/kerykeion_exception.py +6 -0
  19. kerykeion/kr_types/kr_models.py +84 -2
  20. kerykeion/kr_types/settings_models.py +9 -1
  21. kerykeion/planetary_return_factory.py +538 -37
  22. kerykeion/relationship_score_factory.py +123 -59
  23. kerykeion/report.py +7 -1
  24. kerykeion/settings/__init__.py +5 -0
  25. kerykeion/settings/config_constants.py +20 -6
  26. kerykeion/settings/kr.config.json +80 -0
  27. kerykeion/transits_time_range_factory.py +293 -0
  28. kerykeion/utilities.py +130 -68
  29. {kerykeion-5.0.0a9.dist-info → kerykeion-5.0.0a11.dist-info}/METADATA +9 -4
  30. kerykeion-5.0.0a11.dist-info/RECORD +50 -0
  31. kerykeion/aspects/natal_aspects.py +0 -181
  32. kerykeion/aspects/synastry_aspects.py +0 -141
  33. kerykeion/aspects/transits_time_range.py +0 -41
  34. kerykeion/charts/draw_planets_v2.py +0 -649
  35. kerykeion/charts/draw_planets_v3.py +0 -679
  36. kerykeion/enums.py +0 -57
  37. kerykeion/ephemeris_data.py +0 -238
  38. kerykeion/transits_time_range.py +0 -128
  39. kerykeion-5.0.0a9.dist-info/RECORD +0 -55
  40. kerykeion-5.0.0a9.dist-info/entry_points.txt +0 -2
  41. {kerykeion-5.0.0a9.dist-info → kerykeion-5.0.0a11.dist-info}/WHEEL +0 -0
  42. {kerykeion-5.0.0a9.dist-info → kerykeion-5.0.0a11.dist-info}/licenses/LICENSE +0 -0
@@ -1,34 +1,85 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2025 Giacomo Battaglia
3
+ Relationship Score Factory Module
4
+
5
+ This module calculates relationship scores between two astrological subjects using the
6
+ Ciro Discepolo method. It analyzes synastry aspects to generate numerical compatibility
7
+ scores with descriptive categories.
8
+
9
+ Key Features:
10
+ - Point-based scoring system using synastry aspects
11
+ - Configurable major/minor aspect filtering
12
+ - Orbital precision weighting
13
+ - Categorical score descriptions
14
+
15
+ Score Categories:
16
+ - 0-5: Minimal relationship
17
+ - 5-10: Medium relationship
18
+ - 10-15: Important relationship
19
+ - 15-20: Very important relationship
20
+ - 20-30: Exceptional relationship
21
+ - 30+: Rare exceptional relationship
22
+
23
+ Classes:
24
+ RelationshipScoreFactory: Main factory for calculating relationship scores
25
+
26
+ Example:
27
+ >>> from kerykeion import AstrologicalSubjectFactory
28
+ >>> from kerykeion.relationship_score_factory import RelationshipScoreFactory
29
+ >>>
30
+ >>> person1 = AstrologicalSubjectFactory.from_birth_data("John", 1990, 5, 15, 12, 0, "New York", "US")
31
+ >>> person2 = AstrologicalSubjectFactory.from_birth_data("Jane", 1988, 8, 22, 14, 30, "London", "GB")
32
+ >>> factory = RelationshipScoreFactory(person1, person2)
33
+ >>> score = factory.get_relationship_score()
34
+ >>> print(f"Score: {score.score_value} ({score.score_description})")
35
+
36
+ Reference:
37
+ Ciro Discepolo Method: http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
38
+
39
+ Author: Giacomo Battaglia
40
+ Copyright: (C) 2025 Kerykeion Project
41
+ License: AGPL-3.0
4
42
  """
5
43
 
6
44
  from kerykeion import AstrologicalSubjectFactory
7
- from kerykeion.aspects.synastry_aspects import SynastryAspects
45
+ from kerykeion.aspects.synastry_aspects_factory import SynastryAspectsFactory
8
46
  import logging
9
- from pathlib import Path
10
- from typing import Union
11
47
  from kerykeion.kr_types.kr_models import AstrologicalSubjectModel, RelationshipScoreAspectModel, RelationshipScoreModel
12
48
  from kerykeion.kr_types.kr_literals import RelationshipScoreDescription
13
49
 
50
+ # Scoring constants
51
+ DESTINY_SIGN_POINTS = 5
52
+ HIGH_PRECISION_ORBIT_THRESHOLD = 2
53
+ MAJOR_ASPECT_POINTS_HIGH_PRECISION = 11
54
+ MAJOR_ASPECT_POINTS_STANDARD = 8
55
+ MINOR_ASPECT_POINTS = 4
56
+ SUN_ASCENDANT_ASPECT_POINTS = 4
57
+ MOON_ASCENDANT_ASPECT_POINTS = 4
58
+ VENUS_MARS_ASPECT_POINTS = 4
59
+
14
60
 
15
61
  class RelationshipScoreFactory:
16
62
  """
17
- Calculates the relevance of the relationship between two subjects using the Ciro Discepolo method.
63
+ Calculates relationship scores between two subjects using the Ciro Discepolo method.
18
64
 
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
65
+ The scoring system evaluates synastry aspects between planetary positions to generate
66
+ numerical compatibility scores with categorical descriptions.
26
67
 
27
- Documentation: http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
68
+ Score Ranges:
69
+ - 0-5: Minimal relationship
70
+ - 5-10: Medium relationship
71
+ - 10-15: Important relationship
72
+ - 15-20: Very important relationship
73
+ - 20-30: Exceptional relationship
74
+ - 30+: Rare exceptional relationship
28
75
 
29
76
  Args:
30
- first_subject (AstrologicalSubjectModel): First subject instance
31
- second_subject (AstrologicalSubjectModel): Second subject instance
77
+ first_subject (AstrologicalSubjectModel): First astrological subject
78
+ second_subject (AstrologicalSubjectModel): Second astrological subject
79
+ use_only_major_aspects (bool, optional): Filter to major aspects only. Defaults to True.
80
+
81
+ Reference:
82
+ http://www.cirodiscepolo.it/Articoli/Discepoloele.htm
32
83
  """
33
84
 
34
85
  SCORE_MAPPING = [
@@ -56,24 +107,27 @@ class RelationshipScoreFactory:
56
107
  self.relationship_score_description: RelationshipScoreDescription = "Minimal"
57
108
  self.is_destiny_sign = True
58
109
  self.relationship_score_aspects: list[RelationshipScoreAspectModel] = []
59
- self._synastry_aspects = SynastryAspects(self.first_subject, self.second_subject).all_aspects
110
+ self._synastry_aspects = SynastryAspectsFactory.from_subjects(self.first_subject, self.second_subject).all_aspects
60
111
 
61
112
  def _evaluate_destiny_sign(self):
62
113
  """
63
- Evaluates if the subjects share the same sun sign quality and adds points if true.
114
+ Checks if subjects share the same sun sign quality and adds points.
115
+
116
+ Adds 5 points if both subjects have sun signs with matching quality
117
+ (cardinal, fixed, or mutable).
64
118
  """
65
- if self.first_subject.sun["quality"] == self.second_subject.sun["quality"]:
119
+ if self.first_subject.sun["quality"] == self.second_subject.sun["quality"]: # type: ignore
66
120
  self.is_destiny_sign = True
67
- self.score_value += 5
68
- logging.debug(f"Destiny sign found, adding 5 points, total score: {self.score_value}")
121
+ self.score_value += DESTINY_SIGN_POINTS
122
+ logging.debug(f"Destiny sign found, adding {DESTINY_SIGN_POINTS} points, total score: {self.score_value}")
69
123
 
70
124
  def _evaluate_aspect(self, aspect, points):
71
125
  """
72
- Evaluates an aspect and adds points to the score.
126
+ Processes an aspect and adds points to the total score.
73
127
 
74
128
  Args:
75
- aspect (dict): Aspect information.
76
- points (int): Points to add.
129
+ aspect (dict): Aspect data containing planetary positions and geometry
130
+ points (int): Points to add to the total score
77
131
  """
78
132
  if self.use_only_major_aspects and aspect["aspect"] not in self.MAJOR_ASPECTS:
79
133
  return
@@ -91,93 +145,100 @@ class RelationshipScoreFactory:
91
145
 
92
146
  def _evaluate_sun_sun_main_aspect(self, aspect):
93
147
  """
94
- Evaluates Sun-Sun main aspects and adds points accordingly:
95
- - 8 points for conjunction/opposition/square
96
- - 11 points if the aspect's orbit is <= 2 degrees
148
+ Evaluates Sun-Sun conjunction, opposition, or square aspects.
149
+
150
+ Adds 8 points for standard orbs, 11 points for tight orbs (≤2°).
97
151
 
98
152
  Args:
99
- aspect (dict): Aspect information.
153
+ aspect (dict): Aspect data
100
154
  """
101
155
  if aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun" and aspect["aspect"] in {"conjunction", "opposition", "square"}:
102
- points = 11 if aspect["orbit"] <= 2 else 8
156
+ points = MAJOR_ASPECT_POINTS_HIGH_PRECISION if aspect["orbit"] <= HIGH_PRECISION_ORBIT_THRESHOLD else MAJOR_ASPECT_POINTS_STANDARD
103
157
  self._evaluate_aspect(aspect, points)
104
158
 
105
159
  def _evaluate_sun_moon_conjunction(self, aspect):
106
160
  """
107
- Evaluates Sun-Moon conjunctions and adds points accordingly:
108
- - 8 points for conjunction
109
- - 11 points if the aspect's orbit is <= 2 degrees
161
+ Evaluates Sun-Moon conjunction aspects.
162
+
163
+ Adds 8 points for standard orbs, 11 points for tight orbs (≤2°).
110
164
 
111
165
  Args:
112
- aspect (dict): Aspect information.
166
+ aspect (dict): Aspect data
113
167
  """
114
168
  if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Sun"} and aspect["aspect"] == "conjunction":
115
- points = 11 if aspect["orbit"] <= 2 else 8
169
+ points = MAJOR_ASPECT_POINTS_HIGH_PRECISION if aspect["orbit"] <= HIGH_PRECISION_ORBIT_THRESHOLD else MAJOR_ASPECT_POINTS_STANDARD
116
170
  self._evaluate_aspect(aspect, points)
117
171
 
118
172
  def _evaluate_sun_sun_other_aspects(self, aspect):
119
173
  """
120
- Evaluates Sun-Sun aspects that are not conjunctions and adds points accordingly:
121
- - 4 points for other aspects
174
+ Evaluates Sun-Sun aspects other than conjunction, opposition, or square.
175
+
176
+ Adds 4 points for any qualifying aspect.
122
177
 
123
178
  Args:
124
- aspect (dict): Aspect information.
179
+ aspect (dict): Aspect data
125
180
  """
126
181
  if aspect["p1_name"] == "Sun" and aspect["p2_name"] == "Sun" and aspect["aspect"] not in {"conjunction", "opposition", "square"}:
127
- points = 4
182
+ points = MINOR_ASPECT_POINTS
128
183
  self._evaluate_aspect(aspect, points)
129
184
 
130
185
  def _evaluate_sun_moon_other_aspects(self, aspect):
131
186
  """
132
- Evaluates Sun-Moon aspects that are not conjunctions and adds points accordingly:
133
- - 4 points for other aspects
187
+ Evaluates Sun-Moon aspects other than conjunctions.
188
+
189
+ Adds 4 points for any qualifying aspect.
134
190
 
135
191
  Args:
136
- aspect (dict): Aspect information.
192
+ aspect (dict): Aspect data
137
193
  """
138
194
  if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Sun"} and aspect["aspect"] != "conjunction":
139
- points = 4
195
+ points = MINOR_ASPECT_POINTS
140
196
  self._evaluate_aspect(aspect, points)
141
197
 
142
198
  def _evaluate_sun_ascendant_aspect(self, aspect):
143
199
  """
144
- Evaluates Sun-Ascendant aspects and adds points accordingly:
145
- - 4 points for any aspect
200
+ Evaluates Sun-Ascendant aspects.
201
+
202
+ Adds 4 points for any aspect between Sun and Ascendant.
146
203
 
147
204
  Args:
148
- aspect (dict): Aspect information.
205
+ aspect (dict): Aspect data
149
206
  """
150
207
  if {aspect["p1_name"], aspect["p2_name"]} == {"Sun", "Ascendant"}:
151
- points = 4
208
+ points = SUN_ASCENDANT_ASPECT_POINTS
152
209
  self._evaluate_aspect(aspect, points)
153
210
 
154
211
  def _evaluate_moon_ascendant_aspect(self, aspect):
155
212
  """
156
- Evaluates Moon-Ascendant aspects and adds points accordingly:
157
- - 4 points for any aspect
213
+ Evaluates Moon-Ascendant aspects.
214
+
215
+ Adds 4 points for any aspect between Moon and Ascendant.
158
216
 
159
217
  Args:
160
- aspect (dict): Aspect information.
218
+ aspect (dict): Aspect data
161
219
  """
162
220
  if {aspect["p1_name"], aspect["p2_name"]} == {"Moon", "Ascendant"}:
163
- points = 4
221
+ points = MOON_ASCENDANT_ASPECT_POINTS
164
222
  self._evaluate_aspect(aspect, points)
165
223
 
166
224
  def _evaluate_venus_mars_aspect(self, aspect):
167
225
  """
168
- Evaluates Venus-Mars aspects and adds points accordingly:
169
- - 4 points for any aspect
226
+ Evaluates Venus-Mars aspects.
227
+
228
+ Adds 4 points for any aspect between Venus and Mars.
170
229
 
171
230
  Args:
172
- aspect (dict): Aspect information.
231
+ aspect (dict): Aspect data
173
232
  """
174
233
  if {aspect["p1_name"], aspect["p2_name"]} == {"Venus", "Mars"}:
175
- points = 4
234
+ points = VENUS_MARS_ASPECT_POINTS
176
235
  self._evaluate_aspect(aspect, points)
177
236
 
178
237
  def _evaluate_relationship_score_description(self):
179
238
  """
180
- Evaluates the relationship score description based on the total score.
239
+ Determines the categorical description based on the numerical score.
240
+
241
+ Maps the total score to predefined description ranges.
181
242
  """
182
243
  for description, threshold in self.SCORE_MAPPING:
183
244
  if self.score_value < threshold:
@@ -186,10 +247,11 @@ class RelationshipScoreFactory:
186
247
 
187
248
  def get_relationship_score(self):
188
249
  """
189
- Calculates the relationship score based on synastry aspects.
250
+ Calculates the complete relationship score using all evaluation methods.
190
251
 
191
252
  Returns:
192
- RelationshipScoreModel: The calculated relationship score.
253
+ RelationshipScoreModel: Score object containing numerical value, description,
254
+ destiny sign status, contributing aspects, and subject data.
193
255
  """
194
256
  self._evaluate_destiny_sign()
195
257
 
@@ -218,10 +280,12 @@ if __name__ == "__main__":
218
280
 
219
281
  setup_logging(level="critical")
220
282
 
221
- john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
222
- yoko = AstrologicalSubjectFactory.from_birth_data("Yoko Ono", 1933, 2, 18, 18, 30, "Tokyo", "JP")
283
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB", lng=53.416666, lat=-3, tz_str="Europe/London")
284
+ yoko = AstrologicalSubjectFactory.from_birth_data("Yoko Ono", 1933, 2, 18, 20, 30, "Tokyo", "JP", lng=35.68611, lat=139.7525, tz_str="Asia/Tokyo")
223
285
 
224
286
  factory = RelationshipScoreFactory(john, yoko)
225
287
  score = factory.get_relationship_score()
226
- print(score)
227
288
 
289
+ # Remove subjects key
290
+ score.subjects = []
291
+ print(score.model_dump_json(indent=4))
kerykeion/report.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from kerykeion import AstrologicalSubjectFactory
2
2
  from simple_ascii_tables import AsciiTable
3
3
  from kerykeion.utilities import get_houses_list, get_available_astrological_points_list
4
- from typing import Union
5
4
  from kerykeion.kr_types.kr_models import AstrologicalSubjectModel
6
5
 
7
6
  class Report:
@@ -15,6 +14,12 @@ class Report:
15
14
  houses_table: str
16
15
 
17
16
  def __init__(self, instance: AstrologicalSubjectModel):
17
+ """
18
+ Initialize a new Report instance.
19
+
20
+ Args:
21
+ instance: The astrological subject model to create a report for.
22
+ """
18
23
  self.instance = instance
19
24
 
20
25
  self.get_report_title()
@@ -23,6 +28,7 @@ class Report:
23
28
  self.get_houses_table()
24
29
 
25
30
  def get_report_title(self) -> None:
31
+ """Generate the report title based on the subject's name."""
26
32
  self.report_title = f"\n+- Kerykeion report for {self.instance.name} -+"
27
33
 
28
34
  def get_data_table(self) -> None:
@@ -1 +1,6 @@
1
1
  from .kerykeion_settings import KerykeionSettingsModel, get_settings
2
+
3
+ __all__ = [
4
+ "KerykeionSettingsModel",
5
+ "get_settings",
6
+ ]
@@ -14,10 +14,10 @@ DEFAULT_ACTIVE_POINTS: List[AstrologicalPoint] = [
14
14
  "Uranus",
15
15
  "Neptune",
16
16
  "Pluto",
17
- "Mean_Node",
18
- # "True_Node",
19
- "Mean_South_Node",
20
- # "True_South_Node",
17
+ # "Mean_Node",
18
+ "True_Node",
19
+ # "Mean_South_Node",
20
+ "True_South_Node",
21
21
  "Chiron",
22
22
  "Mean_Lilith",
23
23
  # "True_Lilith",
@@ -38,8 +38,8 @@ DEFAULT_ACTIVE_POINTS: List[AstrologicalPoint] = [
38
38
  # "Spica",
39
39
  "Ascendant",
40
40
  "Medium_Coeli",
41
- # "Descendant",
42
- # "Imum_Coeli",
41
+ "Descendant",
42
+ "Imum_Coeli",
43
43
  # "Vertex",
44
44
  # "Anti_Vertex",
45
45
  # "Pars_Fortunae",
@@ -70,6 +70,20 @@ Default list of active aspects in the aspects calculations.
70
70
  The full list of aspects is available in the `kr_types.kr_literals.AspectName` literal.
71
71
  """
72
72
 
73
+ DISCEPOLO_SCORE_ACTIVE_ASPECTS: List[ActiveAspect] = [
74
+ {"name": "conjunction", "orb": 8},
75
+ {"name": "semi-sextile", "orb": 2},
76
+ {"name": "semi-square", "orb": 2},
77
+ {"name": "sextile", "orb": 4},
78
+ {"name": "square", "orb": 5},
79
+ {"name": "trine", "orb": 7},
80
+ {"name": "sesquiquadrate", "orb": 2},
81
+ {"name": "opposition", "orb": 8},
82
+ ]
83
+ """
84
+ List of active aspects with their orbs according to Ciro Discepolo's affinity scoring methodology.
85
+ """
86
+
73
87
  DEFAULT_AXIS_ORBIT: int = 1
74
88
  """
75
89
  Default orbit for the axes aspects.
@@ -85,6 +85,14 @@
85
85
  "Return": "Return",
86
86
  "natal": "Natal",
87
87
  "perspective_type": "Perspective",
88
+ "location": "Location",
89
+ "day_of_week": "Day of Week",
90
+ "elements": "Elements",
91
+ "qualities": "Qualities",
92
+ "cardinal": "Cardinal",
93
+ "fixed": "Fixed",
94
+ "mutable": "Mutable",
95
+ "birth_chart": "Birth Chart",
88
96
  "celestial_points": {
89
97
  "Sun": "Sun",
90
98
  "Moon": "Moon",
@@ -215,6 +223,14 @@
215
223
  "Return": "Révolution",
216
224
  "natal": "Radix",
217
225
  "perspective_type": "Perspective",
226
+ "location": "Lieu",
227
+ "day_of_week": "Jour de la semaine",
228
+ "elements": "Éléments",
229
+ "qualities": "Qualités",
230
+ "cardinal": "Cardinal",
231
+ "fixed": "Fixe",
232
+ "mutable": "Mutable",
233
+ "birth_chart": "Thème Natal",
218
234
  "celestial_points": {
219
235
  "Sun": "Soleil",
220
236
  "Moon": "Lune",
@@ -345,6 +361,14 @@
345
361
  "return_point": "Ponto (ret.)",
346
362
  "natal": "Natal",
347
363
  "perspective_type": "Perspectiva",
364
+ "location": "Localização",
365
+ "day_of_week": "Dia da semana",
366
+ "elements": "Elementos",
367
+ "qualities": "Qualidades",
368
+ "cardinal": "Cardinal",
369
+ "fixed": "Fixo",
370
+ "mutable": "Mutável",
371
+ "birth_chart": "Mapa Natal",
348
372
  "celestial_points": {
349
373
  "Sun": "Sol",
350
374
  "Moon": "Lua",
@@ -475,6 +499,14 @@
475
499
  "Return": "Ritorno",
476
500
  "natal": "Radix",
477
501
  "perspective_type": "Prospettiva",
502
+ "location": "Località",
503
+ "day_of_week": "Giorno della settimana",
504
+ "elements": "Elementi",
505
+ "qualities": "Qualità",
506
+ "cardinal": "Cardinale",
507
+ "fixed": "Fisso",
508
+ "mutable": "Mutevole",
509
+ "birth_chart": "Tema Natale",
478
510
  "celestial_points": {
479
511
  "Sun": "Sole",
480
512
  "Moon": "Luna",
@@ -605,6 +637,14 @@
605
637
  "Return": "回归",
606
638
  "natal": "本命",
607
639
  "perspective_type": "视角",
640
+ "location": "位置",
641
+ "day_of_week": "星期",
642
+ "elements": "元素",
643
+ "qualities": "性质",
644
+ "cardinal": "本位",
645
+ "fixed": "固定",
646
+ "mutable": "变动",
647
+ "birth_chart": "出生图",
608
648
  "celestial_points": {
609
649
  "Sun": "太陽",
610
650
  "Moon": "月亮",
@@ -735,6 +775,14 @@
735
775
  "return_point": "Punto (rev.)",
736
776
  "natal": "Radix",
737
777
  "perspective_type": "Perspectiva",
778
+ "location": "Ubicación",
779
+ "day_of_week": "Día de la semana",
780
+ "elements": "Elementos",
781
+ "qualities": "Cualidades",
782
+ "cardinal": "Cardinal",
783
+ "fixed": "Fijo",
784
+ "mutable": "Mutable",
785
+ "birth_chart": "Carta Natal",
738
786
  "celestial_points": {
739
787
  "Sun": "Sol",
740
788
  "Moon": "Luna",
@@ -865,6 +913,14 @@
865
913
  "Return": "Возвращение",
866
914
  "natal": "Радикс",
867
915
  "perspective_type": "Перспектива",
916
+ "location": "Местоположение",
917
+ "day_of_week": "День недели",
918
+ "elements": "Стихии",
919
+ "qualities": "Качества",
920
+ "cardinal": "Кардинальный",
921
+ "fixed": "Фиксированный",
922
+ "mutable": "Мутабельный",
923
+ "birth_chart": "Натальная Карта",
868
924
  "celestial_points": {
869
925
  "Sun": "Солнце",
870
926
  "Moon": "Луна",
@@ -995,6 +1051,14 @@
995
1051
  "Return": "Dönüş",
996
1052
  "natal": "Doğum haritası",
997
1053
  "perspective_type": "Perspektif",
1054
+ "location": "Konum",
1055
+ "day_of_week": "Haftanın günü",
1056
+ "elements": "Elementler",
1057
+ "qualities": "Nitelikler",
1058
+ "cardinal": "Kardinal",
1059
+ "fixed": "Sabit",
1060
+ "mutable": "Değişken",
1061
+ "birth_chart": "Doğum Haritası",
998
1062
  "celestial_points": {
999
1063
  "Sun": "Güneş",
1000
1064
  "Moon": "Ay",
@@ -1125,6 +1189,14 @@
1125
1189
  "return_point": "Rückkehrpunkt",
1126
1190
  "natal": "Radix",
1127
1191
  "perspective_type": "Perspektive",
1192
+ "location": "Ort",
1193
+ "day_of_week": "Wochentag",
1194
+ "elements": "Elemente",
1195
+ "qualities": "Qualitäten",
1196
+ "cardinal": "Kardinal",
1197
+ "fixed": "Fix",
1198
+ "mutable": "Veränderlich",
1199
+ "birth_chart": "Geburtshoroskop",
1128
1200
  "celestial_points": {
1129
1201
  "Sun": "Sonne",
1130
1202
  "Moon": "Mond",
@@ -1255,6 +1327,14 @@
1255
1327
  "return_point": "पुनरागमन बिंदु",
1256
1328
  "natal": "जन्म कुंडली",
1257
1329
  "perspective_type": "दृष्टिकोण",
1330
+ "location": "स्थान",
1331
+ "day_of_week": "सप्ताह का दिन",
1332
+ "elements": "तत्व",
1333
+ "qualities": "गुण",
1334
+ "cardinal": "चल",
1335
+ "fixed": "स्थिर",
1336
+ "mutable": "द्विस्वभाव",
1337
+ "birth_chart": "जन्म चार्ट",
1258
1338
  "celestial_points": {
1259
1339
  "Sun": "सूर्य",
1260
1340
  "Moon": "चंद्रमा",