kerykeion 5.0.1__py3-none-any.whl → 5.1.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.

@@ -98,7 +98,7 @@ class AspectsFactory:
98
98
  Example:
99
99
  >>> johnny = AstrologicalSubjectFactory.from_birth_data("Johnny", 1963, 6, 9, 0, 0, "Owensboro", "US")
100
100
  >>> chart_aspects = AspectsFactory.single_chart_aspects(johnny)
101
- >>> print(f"Found {len(chart_aspects.relevant_aspects)} relevant aspects")
101
+ >>> print(f"Found {len(chart_aspects.aspects)} aspects")
102
102
  """
103
103
  # Initialize settings and configurations
104
104
  celestial_points = DEFAULT_CELESTIAL_POINTS_SETTINGS
@@ -162,7 +162,7 @@ class AspectsFactory:
162
162
  >>> john = AstrologicalSubjectFactory.from_birth_data("John", 1990, 1, 1, 12, 0, "London", "GB")
163
163
  >>> jane = AstrologicalSubjectFactory.from_birth_data("Jane", 1992, 6, 15, 14, 30, "Paris", "FR")
164
164
  >>> synastry = AspectsFactory.dual_chart_aspects(john, jane)
165
- >>> print(f"Found {len(synastry.relevant_aspects)} relevant aspects")
165
+ >>> print(f"Found {len(synastry.aspects)} aspects")
166
166
  """
167
167
  # Initialize settings and configurations
168
168
  celestial_points = DEFAULT_CELESTIAL_POINTS_SETTINGS
@@ -208,12 +208,12 @@ class AspectsFactory:
208
208
  Create the complete single chart aspects model with all calculations.
209
209
 
210
210
  Returns:
211
- SingleChartAspectsModel containing all aspects data
211
+ SingleChartAspectsModel containing filtered aspects data
212
212
  """
213
213
  all_aspects = AspectsFactory._calculate_single_chart_aspects(
214
214
  subject, active_points_resolved, active_aspects_resolved, aspects_settings, celestial_points
215
215
  )
216
- relevant_aspects = AspectsFactory._filter_relevant_aspects(
216
+ filtered_aspects = AspectsFactory._filter_relevant_aspects(
217
217
  all_aspects,
218
218
  axis_orb_limit,
219
219
  apply_axis_orb_filter=axis_orb_limit is not None,
@@ -221,8 +221,7 @@ class AspectsFactory:
221
221
 
222
222
  return SingleChartAspectsModel(
223
223
  subject=subject,
224
- all_aspects=all_aspects,
225
- relevant_aspects=relevant_aspects,
224
+ aspects=filtered_aspects,
226
225
  active_points=active_points_resolved,
227
226
  active_aspects=active_aspects_resolved,
228
227
  )
@@ -250,13 +249,13 @@ class AspectsFactory:
250
249
  celestial_points: Celestial points configuration
251
250
 
252
251
  Returns:
253
- DualChartAspectsModel: Complete model containing all aspects data
252
+ DualChartAspectsModel: Complete model containing filtered aspects data
254
253
  """
255
254
  all_aspects = AspectsFactory._calculate_dual_chart_aspects(
256
255
  first_subject, second_subject, active_points_resolved, active_aspects_resolved,
257
256
  aspects_settings, celestial_points
258
257
  )
259
- relevant_aspects = AspectsFactory._filter_relevant_aspects(
258
+ filtered_aspects = AspectsFactory._filter_relevant_aspects(
260
259
  all_aspects,
261
260
  axis_orb_limit,
262
261
  apply_axis_orb_filter=False,
@@ -265,8 +264,7 @@ class AspectsFactory:
265
264
  return DualChartAspectsModel(
266
265
  first_subject=first_subject,
267
266
  second_subject=second_subject,
268
- all_aspects=all_aspects,
269
- relevant_aspects=relevant_aspects,
267
+ aspects=filtered_aspects,
270
268
  active_points=active_points_resolved,
271
269
  active_aspects=active_aspects_resolved,
272
270
  )
@@ -560,10 +558,11 @@ if __name__ == "__main__":
560
558
  # Test single chart aspects (replaces natal aspects)
561
559
  johnny = AstrologicalSubjectFactory.from_birth_data("Johnny Depp", 1963, 6, 9, 0, 0, city="Owensboro", nation="US")
562
560
  single_chart_aspects = AspectsFactory.single_chart_aspects(johnny)
563
- print(f"Single chart aspects - All: {len(single_chart_aspects.all_aspects)}, Relevant: {len(single_chart_aspects.relevant_aspects)}")
561
+ print(f"Single chart aspects: {len(single_chart_aspects.aspects)}")
564
562
 
565
563
  # Test dual chart aspects (replaces synastry aspects)
566
564
  john = AstrologicalSubjectFactory.from_birth_data("John", 1940, 10, 9, 10, 30, "Liverpool", "GB")
567
565
  yoko = AstrologicalSubjectFactory.from_birth_data("Yoko", 1933, 2, 18, 10, 30, "Tokyo", "JP")
568
566
  dual_chart_aspects = AspectsFactory.dual_chart_aspects(john, yoko)
569
- print(f"Dual chart aspects - All: {len(dual_chart_aspects.all_aspects)}, Relevant: {len(dual_chart_aspects.relevant_aspects)}")
567
+ print(f"Dual chart aspects: {len(dual_chart_aspects.aspects)}")
568
+
kerykeion/backword.py CHANGED
@@ -676,14 +676,16 @@ class NatalAspects:
676
676
 
677
677
  @cached_property
678
678
  def all_aspects(self):
679
+ """Legacy property - returns the same as aspects for backwards compatibility."""
679
680
  if self._all_aspects_cache is None:
680
- self._all_aspects_cache = list(self._build_aspects_model().all_aspects)
681
+ self._all_aspects_cache = list(self._build_aspects_model().aspects)
681
682
  return self._all_aspects_cache
682
683
 
683
684
  @cached_property
684
685
  def relevant_aspects(self):
686
+ """Legacy property - returns the same as aspects for backwards compatibility."""
685
687
  if self._relevant_aspects_cache is None:
686
- self._relevant_aspects_cache = list(self._build_aspects_model().relevant_aspects)
688
+ self._relevant_aspects_cache = list(self._build_aspects_model().aspects)
687
689
  return self._relevant_aspects_cache
688
690
 
689
691
  # ---------------------------------------------------------------------------
@@ -748,14 +750,16 @@ class SynastryAspects:
748
750
 
749
751
  @cached_property
750
752
  def all_aspects(self):
753
+ """Legacy property - returns the same as aspects for backwards compatibility."""
751
754
  if self._all_aspects_cache is None:
752
- self._all_aspects_cache = list(self._build_dual_model().all_aspects)
755
+ self._all_aspects_cache = list(self._build_dual_model().aspects)
753
756
  return self._all_aspects_cache
754
757
 
755
758
  @cached_property
756
759
  def relevant_aspects(self):
760
+ """Legacy property - returns the same as aspects for backwards compatibility."""
757
761
  if self._relevant_aspects_cache is None:
758
- self._relevant_aspects_cache = list(self._build_dual_model().relevant_aspects)
762
+ self._relevant_aspects_cache = list(self._build_dual_model().aspects)
759
763
  return self._relevant_aspects_cache
760
764
 
761
765
  def get_relevant_aspects(self):
@@ -542,7 +542,7 @@ if __name__ == "__main__":
542
542
 
543
543
  print(f"Chart Type: {natal_data.chart_type}")
544
544
  print(f"Active Points: {len(natal_data.active_points)}")
545
- print(f"Aspects: {len(natal_data.aspects.relevant_aspects)}")
545
+ print(f"Aspects: {len(natal_data.aspects.aspects)}")
546
546
  print(f"Fire: {natal_data.element_distribution.fire_percentage}%")
547
547
  print(f"Earth: {natal_data.element_distribution.earth_percentage}%")
548
548
  print(f"Air: {natal_data.element_distribution.air_percentage}%")
@@ -343,7 +343,7 @@ class ChartDrawer:
343
343
  # --- NATAL CHART SETUP ---
344
344
 
345
345
  # Extract aspects from pre-computed chart data
346
- self.aspects_list = chart_data.aspects.relevant_aspects
346
+ self.aspects_list = chart_data.aspects.aspects
347
347
 
348
348
  # Screen size
349
349
  self.height = self._DEFAULT_HEIGHT
@@ -366,7 +366,7 @@ class ChartDrawer:
366
366
  # --- COMPOSITE CHART SETUP ---
367
367
 
368
368
  # Extract aspects from pre-computed chart data
369
- self.aspects_list = chart_data.aspects.relevant_aspects
369
+ self.aspects_list = chart_data.aspects.aspects
370
370
 
371
371
  # Screen size
372
372
  self.height = self._DEFAULT_HEIGHT
@@ -384,7 +384,7 @@ class ChartDrawer:
384
384
  # --- TRANSIT CHART SETUP ---
385
385
 
386
386
  # Extract aspects from pre-computed chart data
387
- self.aspects_list = chart_data.aspects.relevant_aspects
387
+ self.aspects_list = chart_data.aspects.aspects
388
388
 
389
389
  # Screen size
390
390
  self.height = self._DEFAULT_HEIGHT
@@ -405,7 +405,7 @@ class ChartDrawer:
405
405
  # --- SYNASTRY CHART SETUP ---
406
406
 
407
407
  # Extract aspects from pre-computed chart data
408
- self.aspects_list = chart_data.aspects.relevant_aspects
408
+ self.aspects_list = chart_data.aspects.aspects
409
409
 
410
410
  # Screen size
411
411
  self.height = self._DEFAULT_HEIGHT
@@ -423,7 +423,7 @@ class ChartDrawer:
423
423
  # --- RETURN CHART SETUP ---
424
424
 
425
425
  # Extract aspects from pre-computed chart data
426
- self.aspects_list = chart_data.aspects.relevant_aspects
426
+ self.aspects_list = chart_data.aspects.aspects
427
427
 
428
428
  # Screen size
429
429
  self.height = self._DEFAULT_HEIGHT
@@ -441,7 +441,7 @@ class ChartDrawer:
441
441
  # --- SINGLE WHEEL RETURN CHART SETUP ---
442
442
 
443
443
  # Extract aspects from pre-computed chart data
444
- self.aspects_list = chart_data.aspects.relevant_aspects
444
+ self.aspects_list = chart_data.aspects.aspects
445
445
 
446
446
  # Screen size
447
447
  self.height = self._DEFAULT_HEIGHT
@@ -1071,24 +1071,28 @@ class ChartDrawer:
1071
1071
  return f"{synastry_label}: {name1} {and_word} {name2}"
1072
1072
 
1073
1073
  elif self.chart_type == "DualReturnChart":
1074
- year = datetime.fromisoformat(self.second_obj.iso_formatted_local_datetime).year # type: ignore
1074
+ return_datetime = datetime.fromisoformat(self.second_obj.iso_formatted_local_datetime) # type: ignore
1075
+ year = return_datetime.year
1076
+ month_year = return_datetime.strftime("%m/%Y")
1075
1077
  truncated_name = self._truncate_name(self.first_obj.name)
1076
1078
  if self.second_obj is not None and isinstance(self.second_obj, PlanetReturnModel) and self.second_obj.return_type == "Solar":
1077
1079
  solar_label = self._translate("solar_return", "Solar")
1078
1080
  return f"{truncated_name} - {solar_label} {year}"
1079
1081
  else:
1080
1082
  lunar_label = self._translate("lunar_return", "Lunar")
1081
- return f"{truncated_name} - {lunar_label} {year}"
1083
+ return f"{truncated_name} - {lunar_label} {month_year}"
1082
1084
 
1083
1085
  elif self.chart_type == "SingleReturnChart":
1084
- year = datetime.fromisoformat(self.first_obj.iso_formatted_local_datetime).year # type: ignore
1086
+ return_datetime = datetime.fromisoformat(self.first_obj.iso_formatted_local_datetime) # type: ignore
1087
+ year = return_datetime.year
1088
+ month_year = return_datetime.strftime("%m/%Y")
1085
1089
  truncated_name = self._truncate_name(self.first_obj.name)
1086
1090
  if isinstance(self.first_obj, PlanetReturnModel) and self.first_obj.return_type == "Solar":
1087
1091
  solar_label = self._translate("solar_return", "Solar")
1088
1092
  return f"{truncated_name} - {solar_label} {year}"
1089
1093
  else:
1090
1094
  lunar_label = self._translate("lunar_return", "Lunar")
1091
- return f"{truncated_name} - {lunar_label} {year}"
1095
+ return f"{truncated_name} - {lunar_label} {month_year}"
1092
1096
 
1093
1097
  # Fallback for unknown chart types
1094
1098
  return self._truncate_name(self.first_obj.name)
@@ -117,7 +117,7 @@ class RelationshipScoreFactory:
117
117
  self.first_subject,
118
118
  self.second_subject,
119
119
  axis_orb_limit=axis_orb_limit,
120
- ).all_aspects
120
+ ).aspects
121
121
 
122
122
  def _evaluate_destiny_sign(self):
123
123
  """
kerykeion/report.py CHANGED
@@ -511,14 +511,14 @@ class ReportGenerator:
511
511
  return ""
512
512
 
513
513
  aspects_model = self._chart_data.aspects
514
- relevant_aspects = list(getattr(aspects_model, "relevant_aspects", []))
514
+ aspects_list = list(getattr(aspects_model, "aspects", []))
515
515
 
516
- if not relevant_aspects:
516
+ if not aspects_list:
517
517
  return "No aspects data available."
518
518
 
519
- total_aspects = len(relevant_aspects)
519
+ total_aspects = len(aspects_list)
520
520
  if max_aspects is not None:
521
- relevant_aspects = relevant_aspects[:max_aspects]
521
+ aspects_list = aspects_list[:max_aspects]
522
522
 
523
523
  is_dual = isinstance(self._chart_data, DualChartDataModel)
524
524
  if is_dual:
@@ -527,7 +527,7 @@ class ReportGenerator:
527
527
  table_header = ["Point 1", "Aspect", "Point 2", "Orb", "Movement"]
528
528
 
529
529
  aspects_table: List[List[str]] = [table_header]
530
- for aspect in relevant_aspects:
530
+ for aspect in aspects_list:
531
531
  aspect_name = str(aspect.aspect)
532
532
  symbol = ASPECT_SYMBOLS.get(aspect_name.lower(), aspect_name)
533
533
  movement_symbol = MOVEMENT_SYMBOLS.get(aspect.aspect_movement, "")
@@ -552,7 +552,7 @@ class ReportGenerator:
552
552
  movement,
553
553
  ])
554
554
 
555
- suffix = f" (showing {len(relevant_aspects)} of {total_aspects})" if max_aspects is not None else ""
555
+ suffix = f" (showing {len(aspects_list)} of {total_aspects})" if max_aspects is not None else ""
556
556
  title = f"Aspects{suffix}"
557
557
  return AsciiTable(aspects_table, title=title).table
558
558
 
@@ -353,12 +353,11 @@ class SingleChartAspectsModel(SubscriptableBaseModel):
353
353
  - Composite charts
354
354
  - Any other single chart type
355
355
 
356
- Contains both all calculated aspects and the filtered relevant aspects
357
- for the astrological subject.
356
+ Contains the filtered and relevant aspects for the astrological subject
357
+ based on configured orb settings.
358
358
  """
359
359
  subject: Union["AstrologicalSubjectModel", "CompositeSubjectModel", "PlanetReturnModel"] = Field(description="The astrological subject for which aspects were calculated.")
360
- all_aspects: List[AspectModel] = Field(description="Complete list of all calculated aspects within the chart.")
361
- relevant_aspects: List[AspectModel] = Field(description="Filtered list of relevant aspects based on orb settings.")
360
+ aspects: List[AspectModel] = Field(description="List of calculated aspects within the chart, filtered based on orb settings.")
362
361
  active_points: List[AstrologicalPoint] = Field(description="List of active points used in the calculation.")
363
362
  active_aspects: List["ActiveAspect"] = Field(description="List of active aspects with their orb settings.")
364
363
 
@@ -373,13 +372,12 @@ class DualChartAspectsModel(SubscriptableBaseModel):
373
372
  - Composite vs natal comparisons
374
373
  - Any other dual chart comparison
375
374
 
376
- Contains both all calculated aspects and the filtered relevant aspects
377
- between the two charts.
375
+ Contains the filtered and relevant aspects between the two charts
376
+ based on configured orb settings.
378
377
  """
379
378
  first_subject: Union["AstrologicalSubjectModel", "CompositeSubjectModel", "PlanetReturnModel"] = Field(description="The first astrological subject.")
380
379
  second_subject: Union["AstrologicalSubjectModel", "CompositeSubjectModel", "PlanetReturnModel"] = Field(description="The second astrological subject.")
381
- all_aspects: List[AspectModel] = Field(description="Complete list of all calculated aspects between the two charts.")
382
- relevant_aspects: List[AspectModel] = Field(description="Filtered list of relevant aspects based on orb settings.")
380
+ aspects: List[AspectModel] = Field(description="List of calculated aspects between the two charts, filtered based on orb settings.")
383
381
  active_points: List[AstrologicalPoint] = Field(description="List of active points used in the calculation.")
384
382
  active_aspects: List["ActiveAspect"] = Field(description="List of active aspects with their orb settings.")
385
383
 
@@ -247,7 +247,7 @@ class TransitsTimeRangeFactory:
247
247
  active_points=self.active_points,
248
248
  active_aspects=self.active_aspects,
249
249
  axis_orb_limit=self.axis_orb_limit,
250
- ).relevant_aspects
250
+ ).aspects
251
251
 
252
252
  # Create a transit moment for this point in time
253
253
  transit_moments.append(