kerykeion 4.26.3__py3-none-any.whl → 5.0.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 (76) hide show
  1. kerykeion/__init__.py +54 -11
  2. kerykeion/aspects/__init__.py +5 -2
  3. kerykeion/aspects/aspects_factory.py +569 -0
  4. kerykeion/aspects/aspects_utils.py +81 -8
  5. kerykeion/astrological_subject_factory.py +1897 -0
  6. kerykeion/backword.py +773 -0
  7. kerykeion/chart_data_factory.py +549 -0
  8. kerykeion/charts/chart_drawer.py +2601 -0
  9. kerykeion/charts/charts_utils.py +948 -177
  10. kerykeion/charts/draw_planets.py +602 -351
  11. kerykeion/charts/templates/aspect_grid_only.xml +328 -202
  12. kerykeion/charts/templates/chart.xml +432 -272
  13. kerykeion/charts/templates/wheel_only.xml +350 -214
  14. kerykeion/charts/themes/black-and-white.css +148 -0
  15. kerykeion/charts/themes/classic.css +107 -76
  16. kerykeion/charts/themes/dark-high-contrast.css +145 -107
  17. kerykeion/charts/themes/dark.css +146 -107
  18. kerykeion/charts/themes/light.css +146 -103
  19. kerykeion/charts/themes/strawberry.css +158 -0
  20. kerykeion/composite_subject_factory.py +253 -51
  21. kerykeion/ephemeris_data_factory.py +434 -0
  22. kerykeion/fetch_geonames.py +27 -8
  23. kerykeion/house_comparison/__init__.py +6 -0
  24. kerykeion/house_comparison/house_comparison_factory.py +103 -0
  25. kerykeion/house_comparison/house_comparison_utils.py +126 -0
  26. kerykeion/kr_types/__init__.py +66 -6
  27. kerykeion/kr_types/chart_template_model.py +20 -0
  28. kerykeion/kr_types/kerykeion_exception.py +15 -9
  29. kerykeion/kr_types/kr_literals.py +14 -132
  30. kerykeion/kr_types/kr_models.py +14 -318
  31. kerykeion/kr_types/settings_models.py +15 -203
  32. kerykeion/planetary_return_factory.py +805 -0
  33. kerykeion/relationship_score_factory.py +301 -0
  34. kerykeion/report.py +751 -64
  35. kerykeion/schemas/__init__.py +106 -0
  36. kerykeion/schemas/chart_template_model.py +367 -0
  37. kerykeion/schemas/kerykeion_exception.py +20 -0
  38. kerykeion/schemas/kr_literals.py +181 -0
  39. kerykeion/schemas/kr_models.py +605 -0
  40. kerykeion/schemas/settings_models.py +180 -0
  41. kerykeion/settings/__init__.py +20 -1
  42. kerykeion/settings/chart_defaults.py +444 -0
  43. kerykeion/settings/config_constants.py +117 -12
  44. kerykeion/settings/kerykeion_settings.py +31 -73
  45. kerykeion/settings/translation_strings.py +1479 -0
  46. kerykeion/settings/translations.py +74 -0
  47. kerykeion/sweph/ast136/s136108s.se1 +0 -0
  48. kerykeion/sweph/ast136/s136199s.se1 +0 -0
  49. kerykeion/sweph/ast136/s136472s.se1 +0 -0
  50. kerykeion/sweph/ast28/se28978s.se1 +0 -0
  51. kerykeion/sweph/ast50/se50000s.se1 +0 -0
  52. kerykeion/sweph/ast90/se90377s.se1 +0 -0
  53. kerykeion/sweph/ast90/se90482s.se1 +0 -0
  54. kerykeion/sweph/sefstars.txt +1602 -0
  55. kerykeion/transits_time_range_factory.py +302 -0
  56. kerykeion/utilities.py +393 -114
  57. kerykeion-5.0.0.dist-info/METADATA +1176 -0
  58. kerykeion-5.0.0.dist-info/RECORD +63 -0
  59. {kerykeion-4.26.3.dist-info → kerykeion-5.0.0.dist-info}/WHEEL +1 -1
  60. kerykeion/aspects/natal_aspects.py +0 -172
  61. kerykeion/aspects/synastry_aspects.py +0 -124
  62. kerykeion/aspects/transits_time_range.py +0 -41
  63. kerykeion/astrological_subject.py +0 -841
  64. kerykeion/charts/kerykeion_chart_svg.py +0 -1219
  65. kerykeion/enums.py +0 -57
  66. kerykeion/ephemeris_data.py +0 -242
  67. kerykeion/kr_types/chart_types.py +0 -95
  68. kerykeion/relationship_score/__init__.py +0 -2
  69. kerykeion/relationship_score/relationship_score.py +0 -175
  70. kerykeion/relationship_score/relationship_score_factory.py +0 -230
  71. kerykeion/settings/kr.config.json +0 -1258
  72. kerykeion/transits_time_range.py +0 -124
  73. kerykeion-4.26.3.dist-info/METADATA +0 -634
  74. kerykeion-4.26.3.dist-info/RECORD +0 -45
  75. kerykeion-4.26.3.dist-info/entry_points.txt +0 -3
  76. {kerykeion-4.26.3.dist-info → kerykeion-5.0.0.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,126 @@
1
+ """
2
+ House Comparison Utilities
3
+
4
+ Utility functions for calculating house placement relationships between astrological subjects.
5
+ Provides core calculation logic for determining where points from one subject fall within
6
+ another subject's house system.
7
+
8
+ Author: Giacomo Battaglia
9
+ Copyright: (C) 2025 Kerykeion Project
10
+ License: AGPL-3.0
11
+ """
12
+
13
+ from kerykeion.schemas.kr_models import AstrologicalSubjectModel, PlanetReturnModel, PointInHouseModel
14
+ from kerykeion.schemas.kr_literals import AstrologicalPoint
15
+ from kerykeion.settings.config_constants import DEFAULT_ACTIVE_POINTS
16
+ from kerykeion.utilities import get_planet_house, get_house_number
17
+ from typing import Union
18
+
19
+
20
+ def calculate_points_in_reciprocal_houses(
21
+ point_subject: Union[AstrologicalSubjectModel, PlanetReturnModel],
22
+ house_subject: Union[AstrologicalSubjectModel, PlanetReturnModel],
23
+ active_points: list[AstrologicalPoint] = DEFAULT_ACTIVE_POINTS,
24
+ ) -> list[PointInHouseModel]:
25
+ """
26
+ Calculate house placements of one subject's points within another subject's house system.
27
+
28
+ Analyzes where each astrological point from the point_subject falls within the
29
+ house structure of the house_subject. Creates detailed mapping including both
30
+ the point's original house position and its projected house placement.
31
+
32
+ Args:
33
+ point_subject: Subject whose astrological points are being analyzed
34
+ house_subject: Subject whose house system provides the projection framework
35
+ active_points: List of astrological points to include in the analysis.
36
+ Defaults to standard active points configuration.
37
+
38
+ Returns:
39
+ list[PointInHouseModel]: List of point placement models containing detailed
40
+ information about each point's house relationships,
41
+ including original and projected house positions.
42
+
43
+ Note:
44
+ Only processes points that exist in both the point_subject's active_points
45
+ and the provided active_points list. Points with None values are skipped.
46
+
47
+ Example:
48
+ >>> points_in_houses = calculate_points_in_reciprocal_houses(
49
+ ... natal_chart, partner_chart, ["Sun", "Moon"]
50
+ ... )
51
+ >>> sun_placement = points_in_houses[0] # Assuming Sun is first
52
+ >>> print(f"Sun falls in house: {sun_placement.projected_house_name}")
53
+ """
54
+ points_in_houses: list[PointInHouseModel] = []
55
+
56
+ # List of points to consider
57
+ celestial_points = []
58
+
59
+ for point in point_subject.active_points:
60
+ if point not in active_points:
61
+ continue
62
+
63
+ point_obj = getattr(point_subject, point.lower())
64
+ if point_obj is not None:
65
+ celestial_points.append(point_obj)
66
+
67
+ # Ordered list of house cusps degrees for house_subject
68
+ house_cusps = [
69
+ house_subject.first_house.abs_pos,
70
+ house_subject.second_house.abs_pos,
71
+ house_subject.third_house.abs_pos,
72
+ house_subject.fourth_house.abs_pos,
73
+ house_subject.fifth_house.abs_pos,
74
+ house_subject.sixth_house.abs_pos,
75
+ house_subject.seventh_house.abs_pos,
76
+ house_subject.eighth_house.abs_pos,
77
+ house_subject.ninth_house.abs_pos,
78
+ house_subject.tenth_house.abs_pos,
79
+ house_subject.eleventh_house.abs_pos,
80
+ house_subject.twelfth_house.abs_pos,
81
+ ]
82
+
83
+ # Ordered list of house cusps degrees for point_subject
84
+ point_subject_house_cusps = [
85
+ point_subject.first_house.abs_pos,
86
+ point_subject.second_house.abs_pos,
87
+ point_subject.third_house.abs_pos,
88
+ point_subject.fourth_house.abs_pos,
89
+ point_subject.fifth_house.abs_pos,
90
+ point_subject.sixth_house.abs_pos,
91
+ point_subject.seventh_house.abs_pos,
92
+ point_subject.eighth_house.abs_pos,
93
+ point_subject.ninth_house.abs_pos,
94
+ point_subject.tenth_house.abs_pos,
95
+ point_subject.eleventh_house.abs_pos,
96
+ point_subject.twelfth_house.abs_pos,
97
+ ]
98
+
99
+ # For each point, determine which house it falls in
100
+ for point in celestial_points:
101
+ if point is None:
102
+ continue
103
+
104
+ point_degree = point.abs_pos
105
+ house_name = get_planet_house(point_degree, house_cusps)
106
+ house_number = get_house_number(house_name)
107
+
108
+ # Find which house the point is in its own chart (point_subject)
109
+ point_owner_house_name = get_planet_house(point_degree, point_subject_house_cusps)
110
+ point_owner_house_number = get_house_number(point_owner_house_name)
111
+
112
+ point_in_house = PointInHouseModel(
113
+ point_name=point.name,
114
+ point_degree=point.position,
115
+ point_sign=point.sign,
116
+ point_owner_name=point_subject.name,
117
+ point_owner_house_name=point_owner_house_name,
118
+ point_owner_house_number=point_owner_house_number,
119
+ projected_house_number=house_number,
120
+ projected_house_name=house_name,
121
+ projected_house_owner_name=house_subject.name,
122
+ )
123
+
124
+ points_in_houses.append(point_in_house)
125
+
126
+ return points_in_houses
@@ -1,10 +1,70 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2025 Giacomo Battaglia
3
+ Backward compatibility module for Kerykeion v4.x imports.
4
+
5
+ DEPRECATED: This module will be removed in Kerykeion v6.0.
6
+ Please update your imports:
7
+ OLD: from kerykeion.kr_types import ...
8
+ NEW: from kerykeion.schemas import ...
4
9
  """
10
+ import warnings
11
+
12
+ # Issue deprecation warning when this module is imported
13
+ warnings.warn(
14
+ "The 'kerykeion.kr_types' module is deprecated and will be removed in v6.0. "
15
+ "Please update your imports to use 'kerykeion.schemas' instead.",
16
+ DeprecationWarning,
17
+ stacklevel=2,
18
+ )
19
+
20
+ # Re-export everything from schemas for backward compatibility
21
+ from kerykeion.schemas import * # noqa: F401, F403
22
+ from kerykeion.schemas.kerykeion_exception import * # noqa: F401, F403
23
+ from kerykeion.schemas.kr_literals import * # noqa: F401, F403
24
+ from kerykeion.schemas.kr_models import * # noqa: F401, F403
25
+ from kerykeion.schemas.settings_models import * # noqa: F401, F403
26
+ from kerykeion.schemas.chart_template_model import * # noqa: F401, F403
5
27
 
6
- from .kerykeion_exception import KerykeionException
7
- from .kr_literals import *
8
- from .kr_models import *
9
- from .chart_types import ChartTemplateDictionary
10
- from .settings_models import KerykeionSettingsModel
28
+ __all__ = [
29
+ # Re-export from schemas
30
+ "KerykeionException",
31
+ # kr_literals
32
+ "ZodiacType",
33
+ "Sign",
34
+ "SignNumbers",
35
+ "AspectMovementType",
36
+ "Houses",
37
+ "HouseNumbers",
38
+ "AstrologicalPoint",
39
+ "Element",
40
+ "Quality",
41
+ "ChartType",
42
+ "PointType",
43
+ "LunarPhaseEmoji",
44
+ "LunarPhaseName",
45
+ "SiderealMode",
46
+ "HousesSystemIdentifier",
47
+ "PerspectiveType",
48
+ "SignsEmoji",
49
+ "KerykeionChartTheme",
50
+ "KerykeionChartLanguage",
51
+ "RelationshipScoreDescription",
52
+ "CompositeChartType",
53
+ "AspectName",
54
+ # kr_models
55
+ "AstrologicalSubjectModel",
56
+ "CompositeSubjectModel",
57
+ "KerykeionPointModel",
58
+ "AspectModel",
59
+ "ActiveAspect",
60
+ "SingleChartAspectsModel",
61
+ "DualChartAspectsModel",
62
+ "ElementDistributionModel",
63
+ "QualityDistributionModel",
64
+ "SingleChartDataModel",
65
+ "DualChartDataModel",
66
+ # settings_models
67
+ "KerykeionSettingsModel",
68
+ # chart_template_model
69
+ "ChartTemplateModel",
70
+ ]
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Backward compatibility module for chart_template_model.
4
+
5
+ DEPRECATED: This module will be removed in Kerykeion v6.0.
6
+ Please update your imports:
7
+ OLD: from kerykeion.kr_types.chart_template_model import ...
8
+ NEW: from kerykeion.schemas.chart_template_model import ...
9
+ """
10
+ import warnings
11
+
12
+ warnings.warn(
13
+ "The 'kerykeion.kr_types.chart_template_model' module is deprecated and will be removed in v6.0. "
14
+ "Please update your imports to use 'kerykeion.schemas.chart_template_model' instead.",
15
+ DeprecationWarning,
16
+ stacklevel=2,
17
+ )
18
+
19
+ # Re-export everything from schemas.chart_template_model for backward compatibility
20
+ from kerykeion.schemas.chart_template_model import * # noqa: F401, F403
@@ -1,14 +1,20 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
- """
3
+ Backward compatibility module for kerykeion_exception.
5
4
 
5
+ DEPRECATED: This module will be removed in Kerykeion v6.0.
6
+ Please update your imports:
7
+ OLD: from kerykeion.kr_types.kerykeion_exception import ...
8
+ NEW: from kerykeion.schemas.kerykeion_exception import ...
9
+ """
10
+ import warnings
6
11
 
7
- class KerykeionException(Exception):
8
- """
9
- Custom Kerykeion Exception
10
- """
12
+ warnings.warn(
13
+ "The 'kerykeion.kr_types.kerykeion_exception' module is deprecated and will be removed in v6.0. "
14
+ "Please update your imports to use 'kerykeion.schemas.kerykeion_exception' instead.",
15
+ DeprecationWarning,
16
+ stacklevel=2,
17
+ )
11
18
 
12
- def __init__(self, message):
13
- # Call the base class constructor with the parameters it needs
14
- super().__init__(message)
19
+ # Re-export everything from schemas.kerykeion_exception for backward compatibility
20
+ from kerykeion.schemas.kerykeion_exception import * # noqa: F401, F403
@@ -1,138 +1,20 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """
3
- This is part of Kerykeion (C) 2025 Giacomo Battaglia
4
- """
5
- from typing import Literal
6
-
7
-
8
- ZodiacType = Literal["Tropic", "Sidereal"]
9
- """Literal type for Zodiac Types"""
10
-
11
-
12
- Sign = Literal["Ari", "Tau", "Gem", "Can", "Leo", "Vir", "Lib", "Sco", "Sag", "Cap", "Aqu", "Pis"]
13
- """Literal type for Zodiac Signs"""
14
-
15
-
16
- SignNumbers = Literal[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
17
- """Literal type for Zodiac Sign Numbers, the signs are numbered in order starting from Aries (0) to Pis (11)"""
18
-
19
-
20
- Houses = Literal["First_House", "Second_House", "Third_House", "Fourth_House", "Fifth_House", "Sixth_House", "Seventh_House", "Eighth_House", "Ninth_House", "Tenth_House", "Eleventh_House", "Twelfth_House"]
21
- """Literal type for Houses"""
22
-
23
-
24
- HouseNumbers = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
25
- """Literal type for House Numbers, starting from the First House (1) to the Twelfth House (12)"""
26
-
27
-
28
- Planet = Literal["Sun", "Moon", "Mercury", "Venus", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "Mean_Node", "True_Node", "Mean_South_Node", "True_South_Node", "Chiron", "Mean_Lilith"]
29
- """Literal type for Planets"""
30
-
31
- AxialCusps = Literal["Ascendant", "Medium_Coeli", "Descendant", "Imum_Coeli"]
32
- """Literal type for Axial Cusps"""
33
-
34
-
35
- Element = Literal["Air", "Fire", "Earth", "Water"]
36
- """Literal type for Elements"""
37
-
38
-
39
- Quality = Literal["Cardinal", "Fixed", "Mutable"]
40
- """Literal type for Qualities"""
41
-
42
-
43
- ChartType = Literal["Natal", "ExternalNatal", "Synastry", "Transit", "Composite"]
44
- """Literal type for Chart Types"""
45
-
46
-
47
- PointType = Literal["Planet", "House", "AxialCusps"]
48
- """Literal type for Point Types"""
49
-
3
+ Backward compatibility module for kr_literals.
50
4
 
51
- LunarPhaseEmoji = Literal["🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"]
52
- """Literal type for Lunar Phases Emoji"""
53
-
54
-
55
- LunarPhaseName = Literal["New Moon", "Waxing Crescent", "First Quarter", "Waxing Gibbous", "Full Moon", "Waning Gibbous", "Last Quarter", "Waning Crescent"]
56
- """Literal type for Lunar Phases Name"""
57
-
58
-
59
- SiderealMode = Literal["FAGAN_BRADLEY", "LAHIRI", "DELUCE", "RAMAN", "USHASHASHI", "KRISHNAMURTI", "DJWHAL_KHUL", "YUKTESHWAR", "JN_BHASIN", "BABYL_KUGLER1", "BABYL_KUGLER2", "BABYL_KUGLER3", "BABYL_HUBER", "BABYL_ETPSC", "ALDEBARAN_15TAU", "HIPPARCHOS", "SASSANIAN", "J2000", "J1900", "B1950"]
60
- """Literal type for Sidereal Modes, as known as Ayanamsa"""
61
-
62
-
63
- HousesSystemIdentifier = Literal["A", "B", "C", "D", "F", "H", "I", "i", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"]
64
- """
65
- Literal type for Houses Systems:
66
-
67
- A = equal
68
- B = Alcabitius
69
- C = Campanus
70
- D = equal (MC)
71
- F = Carter poli-equ.
72
- H = horizon/azimut
73
- I = Sunshine
74
- i = Sunshine/alt.
75
- K = Koch
76
- L = Pullen SD
77
- M = Morinus
78
- N = equal/1=Aries
79
- O = Porphyry
80
- P = Placidus
81
- Q = Pullen SR
82
- R = Regiomontanus
83
- S = Sripati
84
- T = Polich/Page
85
- U = Krusinski-Pisa-Goelzer
86
- V = equal/Vehlow
87
- W = equal/whole sign
88
- X = axial rotation system/Meridian houses
89
- Y = APC houses
90
-
91
- Usually the standard is Placidus (P)
92
- """
93
-
94
-
95
- PerspectiveType = Literal["Apparent Geocentric", "Heliocentric", "Topocentric", "True Geocentric"]
96
- """
97
- Literal type for perspective types.
98
- - "Apparent Geocentric": Earth-centered, apparent positions.
99
- - "Heliocentric": Sun-centered.
100
- - "Topocentric": Observer's location on Earth's surface.
101
- - "True Geocentric": Earth-centered, true positions.
102
-
103
- Usually the standard is "Apparent Geocentric"
5
+ DEPRECATED: This module will be removed in Kerykeion v6.0.
6
+ Please update your imports:
7
+ OLD: from kerykeion.kr_types.kr_literals import ...
8
+ NEW: from kerykeion.schemas.kr_literals import ...
104
9
  """
10
+ import warnings
105
11
 
12
+ warnings.warn(
13
+ "The 'kerykeion.kr_types.kr_literals' module is deprecated and will be removed in v6.0. "
14
+ "Please update your imports to use 'kerykeion.schemas.kr_literals' instead.",
15
+ DeprecationWarning,
16
+ stacklevel=2,
17
+ )
106
18
 
107
- SignsEmoji = Literal["♈️", "♉️", "♊️", "♋️", "♌️", "♍️", "♎️", "♏️", "♐️", "♑️", "♒️", "♓️"]
108
- """Literal type for Zodiac Signs Emoji"""
109
-
110
- KerykeionChartTheme = Literal["light", "dark", "dark-high-contrast", "classic"]
111
- """Literal type for Kerykeion Chart Themes"""
112
-
113
-
114
- KerykeionChartLanguage = Literal["EN", "FR", "PT", "IT", "CN", "ES", "RU", "TR", "DE", "HI"]
115
- """Literal type for Kerykeion Chart Languages"""
116
-
117
-
118
- RelationshipScoreDescription = Literal["Minimal", "Medium", "Important", "Very Important", "Exceptional", "Rare Exceptional"]
119
- """Literal type for Relationship Score Description"""
120
-
121
-
122
- CompositeChartType = Literal["Midpoint"]
123
- """Literal type for Composite Chart Types"""
124
-
125
- AspectName = Literal[
126
- "conjunction",
127
- "semi-sextile",
128
- "semi-square",
129
- "sextile",
130
- "quintile",
131
- "square",
132
- "trine",
133
- "sesquiquadrate",
134
- "biquintile",
135
- "quincunx",
136
- "opposition"
137
- ]
138
- """Literal type for all the available aspects names"""
19
+ # Re-export everything from schemas.kr_literals for backward compatibility
20
+ from kerykeion.schemas.kr_literals import * # noqa: F401, F403