kerykeion 5.0.0a4__py3-none-any.whl → 5.0.0a6__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.
- kerykeion/astrological_subject_factory.py +245 -233
- kerykeion/charts/kerykeion_chart_svg.py +94 -50
- kerykeion/charts/templates/chart.xml +3 -3
- kerykeion/charts/themes/classic.css +5 -0
- kerykeion/charts/themes/dark-high-contrast.css +5 -0
- kerykeion/charts/themes/dark.css +5 -0
- kerykeion/charts/themes/light.css +5 -0
- kerykeion/charts/themes/strawberry.css +5 -0
- kerykeion/kr_types/kr_models.py +5 -5
- kerykeion/planetary_return_factory.py +1 -0
- kerykeion/settings/kr.config.json +16 -16
- kerykeion/utilities.py +7 -10
- {kerykeion-5.0.0a4.dist-info → kerykeion-5.0.0a6.dist-info}/METADATA +1 -1
- {kerykeion-5.0.0a4.dist-info → kerykeion-5.0.0a6.dist-info}/RECORD +17 -17
- {kerykeion-5.0.0a4.dist-info → kerykeion-5.0.0a6.dist-info}/LICENSE +0 -0
- {kerykeion-5.0.0a4.dist-info → kerykeion-5.0.0a6.dist-info}/WHEEL +0 -0
- {kerykeion-5.0.0a4.dist-info → kerykeion-5.0.0a6.dist-info}/entry_points.txt +0 -0
|
@@ -245,7 +245,6 @@ class KerykeionChartSVG:
|
|
|
245
245
|
home_directory = Path.home()
|
|
246
246
|
self.new_settings_file = new_settings_file
|
|
247
247
|
self.chart_language = chart_language
|
|
248
|
-
self.active_points = active_points
|
|
249
248
|
self.active_aspects = active_aspects
|
|
250
249
|
self.chart_type = chart_type
|
|
251
250
|
self.double_chart_aspect_grid_type = double_chart_aspect_grid_type
|
|
@@ -254,16 +253,16 @@ class KerykeionChartSVG:
|
|
|
254
253
|
self.aspects_settings = aspects_settings
|
|
255
254
|
|
|
256
255
|
if not active_points:
|
|
257
|
-
active_points = first_obj.active_points
|
|
256
|
+
self.active_points = first_obj.active_points
|
|
258
257
|
else:
|
|
259
|
-
active_points = find_common_active_points(
|
|
258
|
+
self.active_points = find_common_active_points(
|
|
260
259
|
active_points,
|
|
261
260
|
first_obj.active_points
|
|
262
261
|
)
|
|
263
262
|
|
|
264
263
|
if second_obj:
|
|
265
|
-
active_points = find_common_active_points(
|
|
266
|
-
active_points,
|
|
264
|
+
self.active_points = find_common_active_points(
|
|
265
|
+
self.active_points,
|
|
267
266
|
second_obj.active_points
|
|
268
267
|
)
|
|
269
268
|
|
|
@@ -285,7 +284,7 @@ class KerykeionChartSVG:
|
|
|
285
284
|
# Configure available planets
|
|
286
285
|
self.available_planets_setting = []
|
|
287
286
|
for body in self.planets_settings:
|
|
288
|
-
if body["name"] in active_points:
|
|
287
|
+
if body["name"] in self.active_points:
|
|
289
288
|
body["is_active"] = True
|
|
290
289
|
self.available_planets_setting.append(body)
|
|
291
290
|
|
|
@@ -310,7 +309,7 @@ class KerykeionChartSVG:
|
|
|
310
309
|
natal_aspects_instance = NatalAspects(
|
|
311
310
|
self.first_obj,
|
|
312
311
|
new_settings_file=self.new_settings_file,
|
|
313
|
-
active_points=active_points,
|
|
312
|
+
active_points=self.active_points,
|
|
314
313
|
active_aspects=active_aspects,
|
|
315
314
|
)
|
|
316
315
|
self.aspects_list = natal_aspects_instance.relevant_aspects
|
|
@@ -342,7 +341,7 @@ class KerykeionChartSVG:
|
|
|
342
341
|
raise KerykeionException("First object must be a CompositeSubjectModel instance.")
|
|
343
342
|
|
|
344
343
|
# Calculate aspects
|
|
345
|
-
self.aspects_list = NatalAspects(self.first_obj, new_settings_file=self.new_settings_file, active_points=active_points).relevant_aspects
|
|
344
|
+
self.aspects_list = NatalAspects(self.first_obj, new_settings_file=self.new_settings_file, active_points=self.active_points).relevant_aspects
|
|
346
345
|
|
|
347
346
|
# Screen size
|
|
348
347
|
self.height = self._DEFAULT_HEIGHT
|
|
@@ -377,15 +376,13 @@ class KerykeionChartSVG:
|
|
|
377
376
|
self.first_obj,
|
|
378
377
|
self.second_obj,
|
|
379
378
|
new_settings_file=self.new_settings_file,
|
|
380
|
-
active_points=active_points,
|
|
379
|
+
active_points=self.active_points,
|
|
381
380
|
active_aspects=active_aspects,
|
|
382
381
|
)
|
|
383
382
|
self.aspects_list = synastry_aspects_instance.relevant_aspects
|
|
384
383
|
|
|
385
384
|
# Secondary subject available points
|
|
386
|
-
self.t_available_kerykeion_celestial_points =
|
|
387
|
-
for body in available_celestial_points_names:
|
|
388
|
-
self.t_available_kerykeion_celestial_points.append(self.second_obj.get(body))
|
|
385
|
+
self.t_available_kerykeion_celestial_points = self.available_kerykeion_celestial_points
|
|
389
386
|
|
|
390
387
|
# Screen size
|
|
391
388
|
self.height = self._DEFAULT_HEIGHT
|
|
@@ -424,15 +421,13 @@ class KerykeionChartSVG:
|
|
|
424
421
|
self.first_obj,
|
|
425
422
|
self.second_obj,
|
|
426
423
|
new_settings_file=self.new_settings_file,
|
|
427
|
-
active_points=active_points,
|
|
424
|
+
active_points=self.active_points,
|
|
428
425
|
active_aspects=active_aspects,
|
|
429
426
|
)
|
|
430
427
|
self.aspects_list = synastry_aspects_instance.relevant_aspects
|
|
431
428
|
|
|
432
429
|
# Secondary subject available points
|
|
433
|
-
self.t_available_kerykeion_celestial_points =
|
|
434
|
-
for body in available_celestial_points_names:
|
|
435
|
-
self.t_available_kerykeion_celestial_points.append(self.second_obj.get(body))
|
|
430
|
+
self.t_available_kerykeion_celestial_points = self.available_kerykeion_celestial_points
|
|
436
431
|
|
|
437
432
|
# Screen size
|
|
438
433
|
self.height = self._DEFAULT_HEIGHT
|
|
@@ -467,15 +462,13 @@ class KerykeionChartSVG:
|
|
|
467
462
|
self.first_obj,
|
|
468
463
|
self.second_obj,
|
|
469
464
|
new_settings_file=self.new_settings_file,
|
|
470
|
-
active_points=active_points,
|
|
465
|
+
active_points=self.active_points,
|
|
471
466
|
active_aspects=active_aspects,
|
|
472
467
|
)
|
|
473
468
|
self.aspects_list = synastry_aspects_instance.relevant_aspects
|
|
474
469
|
|
|
475
470
|
# Secondary subject available points
|
|
476
|
-
self.t_available_kerykeion_celestial_points =
|
|
477
|
-
for body in available_celestial_points_names:
|
|
478
|
-
self.t_available_kerykeion_celestial_points.append(self.second_obj.get(body))
|
|
471
|
+
self.t_available_kerykeion_celestial_points = self.available_kerykeion_celestial_points
|
|
479
472
|
|
|
480
473
|
# Screen size
|
|
481
474
|
self.height = self._DEFAULT_HEIGHT
|
|
@@ -502,7 +495,7 @@ class KerykeionChartSVG:
|
|
|
502
495
|
natal_aspects_instance = NatalAspects(
|
|
503
496
|
self.first_obj,
|
|
504
497
|
new_settings_file=self.new_settings_file,
|
|
505
|
-
active_points=active_points,
|
|
498
|
+
active_points=self.active_points,
|
|
506
499
|
active_aspects=active_aspects,
|
|
507
500
|
)
|
|
508
501
|
self.aspects_list = natal_aspects_instance.relevant_aspects
|
|
@@ -830,12 +823,22 @@ class KerykeionChartSVG:
|
|
|
830
823
|
|
|
831
824
|
template_dict["bottom_left_0"] = zodiac_info
|
|
832
825
|
template_dict["bottom_left_1"] = f"{self.language_settings.get('domification', 'Domification')}: {self.language_settings.get('houses_system_' + self.first_obj.houses_system_identifier, self.first_obj.houses_system_name)}"
|
|
833
|
-
|
|
834
|
-
|
|
826
|
+
|
|
827
|
+
# Lunar phase information (optional)
|
|
828
|
+
if self.first_obj.lunar_phase is not None:
|
|
829
|
+
template_dict["bottom_left_2"] = f'{self.language_settings.get("lunation_day", "Lunation Day")}: {self.first_obj.lunar_phase.get("moon_phase", "")}'
|
|
830
|
+
template_dict["bottom_left_3"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.language_settings.get(self.first_obj.lunar_phase.moon_phase_name.lower().replace(" ", "_"), self.first_obj.lunar_phase.moon_phase_name)}'
|
|
831
|
+
else:
|
|
832
|
+
template_dict["bottom_left_2"] = ""
|
|
833
|
+
template_dict["bottom_left_3"] = ""
|
|
834
|
+
|
|
835
835
|
template_dict["bottom_left_4"] = f'{self.language_settings.get("perspective_type", "Perspective")}: {self.language_settings.get(self.first_obj.perspective_type.lower().replace(" ", "_"), self.first_obj.perspective_type)}'
|
|
836
836
|
|
|
837
837
|
# Moon phase section calculations
|
|
838
|
-
|
|
838
|
+
if self.first_obj.lunar_phase is not None:
|
|
839
|
+
template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
|
|
840
|
+
else:
|
|
841
|
+
template_dict["makeLunarPhase"] = ""
|
|
839
842
|
|
|
840
843
|
# Houses and planet drawing
|
|
841
844
|
template_dict["makeMainHousesGrid"] = draw_main_house_grid(
|
|
@@ -971,7 +974,10 @@ class KerykeionChartSVG:
|
|
|
971
974
|
template_dict["bottom_left_4"] = ""
|
|
972
975
|
|
|
973
976
|
# Moon phase section calculations
|
|
974
|
-
|
|
977
|
+
if self.first_obj.lunar_phase is not None:
|
|
978
|
+
template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
|
|
979
|
+
else:
|
|
980
|
+
template_dict["makeLunarPhase"] = ""
|
|
975
981
|
|
|
976
982
|
# Houses and planet drawing
|
|
977
983
|
template_dict["makeMainHousesGrid"] = draw_main_house_grid(
|
|
@@ -1108,12 +1114,22 @@ class KerykeionChartSVG:
|
|
|
1108
1114
|
|
|
1109
1115
|
template_dict["bottom_left_0"] = zodiac_info
|
|
1110
1116
|
template_dict["bottom_left_1"] = f"{self.language_settings.get('domification', 'Domification')}: {self.language_settings.get('houses_system_' + self.first_obj.houses_system_identifier, self.first_obj.houses_system_name)}"
|
|
1111
|
-
|
|
1112
|
-
|
|
1117
|
+
|
|
1118
|
+
# Lunar phase information from second object (Transit) (optional)
|
|
1119
|
+
if self.second_obj is not None and hasattr(self.second_obj, 'lunar_phase') and self.second_obj.lunar_phase is not None:
|
|
1120
|
+
template_dict["bottom_left_2"] = f'{self.language_settings.get("lunation_day", "Lunation Day")}: {self.second_obj.lunar_phase.get("moon_phase", "")}' # type: ignore
|
|
1121
|
+
template_dict["bottom_left_3"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.language_settings.get(self.second_obj.lunar_phase.moon_phase_name.lower().replace(" ", "_"), self.second_obj.lunar_phase.moon_phase_name)}'
|
|
1122
|
+
else:
|
|
1123
|
+
template_dict["bottom_left_2"] = ""
|
|
1124
|
+
template_dict["bottom_left_3"] = ""
|
|
1125
|
+
|
|
1113
1126
|
template_dict["bottom_left_4"] = f'{self.language_settings.get("perspective_type", "Perspective")}: {self.language_settings.get(self.second_obj.perspective_type.lower().replace(" ", "_"), self.second_obj.perspective_type)}' # type: ignore
|
|
1114
1127
|
|
|
1115
|
-
# Moon phase section calculations
|
|
1116
|
-
|
|
1128
|
+
# Moon phase section calculations - use first_obj for visualization
|
|
1129
|
+
if self.first_obj.lunar_phase is not None:
|
|
1130
|
+
template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
|
|
1131
|
+
else:
|
|
1132
|
+
template_dict["makeLunarPhase"] = ""
|
|
1117
1133
|
|
|
1118
1134
|
# Houses and planet drawing
|
|
1119
1135
|
template_dict["makeMainHousesGrid"] = draw_main_house_grid(
|
|
@@ -1386,7 +1402,7 @@ class KerykeionChartSVG:
|
|
|
1386
1402
|
template_dict["makeAspects"] = self._draw_all_transit_aspects_lines(self.main_radius, self.main_radius - 160)
|
|
1387
1403
|
|
|
1388
1404
|
# Chart title
|
|
1389
|
-
if self.second_obj.return_type == "Solar":
|
|
1405
|
+
if self.second_obj is not None and hasattr(self.second_obj, 'return_type') and self.second_obj.return_type == "Solar":
|
|
1390
1406
|
template_dict["stringTitle"] = f"{self.first_obj.name} - {self.language_settings.get('solar_return', 'Solar Return')}"
|
|
1391
1407
|
else:
|
|
1392
1408
|
template_dict["stringTitle"] = f"{self.first_obj.name} - {self.language_settings.get('lunar_return', 'Lunar Return')}"
|
|
@@ -1401,7 +1417,7 @@ class KerykeionChartSVG:
|
|
|
1401
1417
|
return_latitude_string = convert_latitude_coordinate_to_string(self.second_obj.lat, self.language_settings["north"], self.language_settings["south"]) # type: ignore
|
|
1402
1418
|
return_longitude_string = convert_longitude_coordinate_to_string(self.second_obj.lng, self.language_settings["east"], self.language_settings["west"]) # type: ignore
|
|
1403
1419
|
|
|
1404
|
-
if self.second_obj.return_type == "Solar":
|
|
1420
|
+
if self.second_obj is not None and hasattr(self.second_obj, 'return_type') and self.second_obj.return_type == "Solar":
|
|
1405
1421
|
template_dict["top_left_0"] = f"{self.language_settings.get('solar_return', 'Solar Return')}:"
|
|
1406
1422
|
else:
|
|
1407
1423
|
template_dict["top_left_0"] = f"{self.language_settings.get('lunar_return', 'Lunar Return')}:"
|
|
@@ -1421,12 +1437,22 @@ class KerykeionChartSVG:
|
|
|
1421
1437
|
|
|
1422
1438
|
template_dict["bottom_left_0"] = zodiac_info
|
|
1423
1439
|
template_dict["bottom_left_1"] = f"{self.language_settings.get('domification', 'Domification')}: {self.language_settings.get('houses_system_' + self.first_obj.houses_system_identifier, self.first_obj.houses_system_name)}"
|
|
1424
|
-
|
|
1425
|
-
|
|
1440
|
+
|
|
1441
|
+
# Lunar phase information (optional)
|
|
1442
|
+
if self.first_obj.lunar_phase is not None:
|
|
1443
|
+
template_dict["bottom_left_2"] = f'{self.language_settings.get("lunation_day", "Lunation Day")}: {self.first_obj.lunar_phase.get("moon_phase", "")}'
|
|
1444
|
+
template_dict["bottom_left_3"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.language_settings.get(self.first_obj.lunar_phase.moon_phase_name.lower().replace(" ", "_"), self.first_obj.lunar_phase.moon_phase_name)}'
|
|
1445
|
+
else:
|
|
1446
|
+
template_dict["bottom_left_2"] = ""
|
|
1447
|
+
template_dict["bottom_left_3"] = ""
|
|
1448
|
+
|
|
1426
1449
|
template_dict["bottom_left_4"] = f'{self.language_settings.get("perspective_type", "Perspective")}: {self.language_settings.get(self.first_obj.perspective_type.lower().replace(" ", "_"), self.first_obj.perspective_type)}'
|
|
1427
1450
|
|
|
1428
1451
|
# Moon phase section calculations
|
|
1429
|
-
|
|
1452
|
+
if self.first_obj.lunar_phase is not None:
|
|
1453
|
+
template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
|
|
1454
|
+
else:
|
|
1455
|
+
template_dict["makeLunarPhase"] = ""
|
|
1430
1456
|
|
|
1431
1457
|
# Houses and planet drawing
|
|
1432
1458
|
template_dict["makeMainHousesGrid"] = draw_main_house_grid(
|
|
@@ -1468,7 +1494,7 @@ class KerykeionChartSVG:
|
|
|
1468
1494
|
)
|
|
1469
1495
|
|
|
1470
1496
|
# Planet grid
|
|
1471
|
-
if self.second_obj.return_type == "Solar":
|
|
1497
|
+
if self.second_obj is not None and hasattr(self.second_obj, 'return_type') and self.second_obj.return_type == "Solar":
|
|
1472
1498
|
first_return_grid_title = f"{self.first_obj.name} ({self.language_settings.get('inner_wheel', 'Inner Wheel')})"
|
|
1473
1499
|
second_return_grid_title = f"{self.language_settings.get('solar_return', 'Solar Return')} ({self.language_settings.get('outer_wheel', 'Outer Wheel')})"
|
|
1474
1500
|
else:
|
|
@@ -1488,7 +1514,7 @@ class KerykeionChartSVG:
|
|
|
1488
1514
|
second_subject_available_kerykeion_celestial_points=self.t_available_kerykeion_celestial_points,
|
|
1489
1515
|
chart_type=self.chart_type,
|
|
1490
1516
|
text_color=self.chart_colors_settings["paper_0"],
|
|
1491
|
-
celestial_point_language=self.language_settings["celestial_points"]
|
|
1517
|
+
celestial_point_language=self.language_settings["celestial_points"],
|
|
1492
1518
|
)
|
|
1493
1519
|
|
|
1494
1520
|
house_comparison_factory = HouseComparisonFactory(
|
|
@@ -1564,7 +1590,7 @@ class KerykeionChartSVG:
|
|
|
1564
1590
|
template_dict["top_left_3"] = f"{self.language_settings['latitude']}: {latitude_string}"
|
|
1565
1591
|
template_dict["top_left_4"] = f"{self.language_settings['longitude']}: {longitude_string}"
|
|
1566
1592
|
|
|
1567
|
-
if self.first_obj.return_type == "Solar":
|
|
1593
|
+
if hasattr(self.first_obj, 'return_type') and self.first_obj.return_type == "Solar":
|
|
1568
1594
|
template_dict["top_left_5"] = f"{self.language_settings['type']}: {self.language_settings.get('solar_return', 'Solar Return')}"
|
|
1569
1595
|
else:
|
|
1570
1596
|
template_dict["top_left_5"] = f"{self.language_settings['type']}: {self.language_settings.get('lunar_return', 'Lunar Return')}"
|
|
@@ -1579,12 +1605,22 @@ class KerykeionChartSVG:
|
|
|
1579
1605
|
|
|
1580
1606
|
template_dict["bottom_left_0"] = zodiac_info
|
|
1581
1607
|
template_dict["bottom_left_1"] = f"{self.language_settings.get('houses_system_' + self.first_obj.houses_system_identifier, self.first_obj.houses_system_name)} {self.language_settings.get('houses', 'Houses')}"
|
|
1582
|
-
|
|
1583
|
-
|
|
1608
|
+
|
|
1609
|
+
# Lunar phase information (optional)
|
|
1610
|
+
if self.first_obj.lunar_phase is not None:
|
|
1611
|
+
template_dict["bottom_left_2"] = f'{self.language_settings.get("lunation_day", "Lunation Day")}: {self.first_obj.lunar_phase.get("moon_phase", "")}'
|
|
1612
|
+
template_dict["bottom_left_3"] = f'{self.language_settings.get("lunar_phase", "Lunar Phase")}: {self.language_settings.get(self.first_obj.lunar_phase.moon_phase_name.lower().replace(" ", "_"), self.first_obj.lunar_phase.moon_phase_name)}'
|
|
1613
|
+
else:
|
|
1614
|
+
template_dict["bottom_left_2"] = ""
|
|
1615
|
+
template_dict["bottom_left_3"] = ""
|
|
1616
|
+
|
|
1584
1617
|
template_dict["bottom_left_4"] = f'{self.language_settings.get("perspective_type", "Perspective")}: {self.language_settings.get(self.first_obj.perspective_type.lower().replace(" ", "_"), self.first_obj.perspective_type)}'
|
|
1585
1618
|
|
|
1586
1619
|
# Moon phase section calculations
|
|
1587
|
-
|
|
1620
|
+
if self.first_obj.lunar_phase is not None:
|
|
1621
|
+
template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
|
|
1622
|
+
else:
|
|
1623
|
+
template_dict["makeLunarPhase"] = ""
|
|
1588
1624
|
|
|
1589
1625
|
# Houses and planet drawing
|
|
1590
1626
|
template_dict["makeMainHousesGrid"] = draw_main_house_grid(
|
|
@@ -1687,9 +1723,9 @@ class KerykeionChartSVG:
|
|
|
1687
1723
|
|
|
1688
1724
|
self.template = self.makeTemplate(minify, remove_css_variables)
|
|
1689
1725
|
|
|
1690
|
-
if self.chart_type == "Return" and self.second_obj.return_type == "Lunar":
|
|
1726
|
+
if self.chart_type == "Return" and self.second_obj is not None and hasattr(self.second_obj, 'return_type') and self.second_obj.return_type == "Lunar":
|
|
1691
1727
|
chartname = self.output_directory / f"{self.first_obj.name} - {self.chart_type} Chart - Lunar Return.svg"
|
|
1692
|
-
elif self.chart_type == "Return" and self.second_obj.return_type == "Solar":
|
|
1728
|
+
elif self.chart_type == "Return" and self.second_obj is not None and hasattr(self.second_obj, 'return_type') and self.second_obj.return_type == "Solar":
|
|
1693
1729
|
chartname = self.output_directory / f"{self.first_obj.name} - {self.chart_type} Chart - Solar Return.svg"
|
|
1694
1730
|
else:
|
|
1695
1731
|
chartname = self.output_directory / f"{self.first_obj.name} - {self.chart_type} Chart.svg"
|
|
@@ -1841,6 +1877,10 @@ if __name__ == "__main__":
|
|
|
1841
1877
|
from kerykeion.planetary_return_factory import PlanetaryReturnFactory
|
|
1842
1878
|
from kerykeion.astrological_subject_factory import AstrologicalSubjectFactory
|
|
1843
1879
|
|
|
1880
|
+
ACTIVE_PLANETS: list[AstrologicalPoint] = [
|
|
1881
|
+
"Sun", "Moon", "Pars_Fortunae", "Mercury", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "Chiron", "True_Node"
|
|
1882
|
+
]
|
|
1883
|
+
|
|
1844
1884
|
setup_logging(level="info")
|
|
1845
1885
|
|
|
1846
1886
|
subject = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
|
|
@@ -1852,7 +1892,7 @@ if __name__ == "__main__":
|
|
|
1852
1892
|
lng=-118.2437,
|
|
1853
1893
|
lat=34.0522,
|
|
1854
1894
|
tz_str="America/Los_Angeles",
|
|
1855
|
-
altitude=0
|
|
1895
|
+
altitude=0
|
|
1856
1896
|
)
|
|
1857
1897
|
|
|
1858
1898
|
###
|
|
@@ -1861,6 +1901,7 @@ if __name__ == "__main__":
|
|
|
1861
1901
|
first_obj=subject,
|
|
1862
1902
|
chart_language="IT",
|
|
1863
1903
|
theme="strawberry",
|
|
1904
|
+
active_points=ACTIVE_PLANETS,
|
|
1864
1905
|
)
|
|
1865
1906
|
birth_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
1866
1907
|
|
|
@@ -1875,7 +1916,7 @@ if __name__ == "__main__":
|
|
|
1875
1916
|
second_obj=solar_return,
|
|
1876
1917
|
chart_language="IT",
|
|
1877
1918
|
theme="classic",
|
|
1878
|
-
active_points=
|
|
1919
|
+
active_points=ACTIVE_PLANETS,
|
|
1879
1920
|
)
|
|
1880
1921
|
|
|
1881
1922
|
solar_return_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
@@ -1888,7 +1929,7 @@ if __name__ == "__main__":
|
|
|
1888
1929
|
second_obj=solar_return,
|
|
1889
1930
|
chart_language="IT",
|
|
1890
1931
|
theme="dark",
|
|
1891
|
-
active_points=
|
|
1932
|
+
active_points=ACTIVE_PLANETS,
|
|
1892
1933
|
)
|
|
1893
1934
|
|
|
1894
1935
|
single_wheel_return_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
@@ -1905,20 +1946,23 @@ if __name__ == "__main__":
|
|
|
1905
1946
|
second_obj=lunar_return,
|
|
1906
1947
|
chart_language="IT",
|
|
1907
1948
|
theme="dark",
|
|
1908
|
-
active_points=
|
|
1949
|
+
active_points=ACTIVE_PLANETS,
|
|
1909
1950
|
)
|
|
1910
1951
|
lunar_return_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
1911
1952
|
|
|
1912
1953
|
###
|
|
1913
1954
|
## Transit Chart
|
|
1914
|
-
transit = AstrologicalSubjectFactory.
|
|
1955
|
+
transit = AstrologicalSubjectFactory.from_iso_utc_time(
|
|
1956
|
+
"Transit",
|
|
1957
|
+
"2021-10-04T18:30:00+01:00",
|
|
1958
|
+
)
|
|
1915
1959
|
transit_chart = KerykeionChartSVG(
|
|
1916
1960
|
first_obj=subject,
|
|
1917
1961
|
chart_type="Transit",
|
|
1918
1962
|
second_obj=transit,
|
|
1919
1963
|
chart_language="IT",
|
|
1920
1964
|
theme="dark",
|
|
1921
|
-
active_points=
|
|
1965
|
+
active_points=ACTIVE_PLANETS
|
|
1922
1966
|
)
|
|
1923
1967
|
transit_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
1924
1968
|
|
|
@@ -1931,7 +1975,7 @@ if __name__ == "__main__":
|
|
|
1931
1975
|
second_obj=second_subject,
|
|
1932
1976
|
chart_language="IT",
|
|
1933
1977
|
theme="dark",
|
|
1934
|
-
active_points=
|
|
1978
|
+
active_points=ACTIVE_PLANETS
|
|
1935
1979
|
)
|
|
1936
1980
|
synastry_chart.makeSVG() # minify=True, remove_css_variables=True)
|
|
1937
1981
|
|
|
@@ -1944,7 +1988,7 @@ if __name__ == "__main__":
|
|
|
1944
1988
|
second_obj=transit,
|
|
1945
1989
|
chart_language="IT",
|
|
1946
1990
|
theme="dark",
|
|
1947
|
-
active_points=
|
|
1991
|
+
active_points=ACTIVE_PLANETS,
|
|
1948
1992
|
double_chart_aspect_grid_type="table"
|
|
1949
1993
|
)
|
|
1950
1994
|
transit_chart_with_grid.makeSVG() # minify=True, remove_css_variables=True)
|
|
@@ -370,9 +370,9 @@ OpenAstro.org -->
|
|
|
370
370
|
<symbol id="Pars_Fortunae">
|
|
371
371
|
<g transform="translate(1,2)">
|
|
372
372
|
<circle cx="11" cy="11" r="9"
|
|
373
|
-
style="fill: none; stroke: $
|
|
374
|
-
<path d="M
|
|
375
|
-
style="stroke: $
|
|
373
|
+
style="fill: none; stroke: $planets_color_36; stroke-width: 2px" />
|
|
374
|
+
<path d="M 5,5 L 17,17 M 17,5 L 5,17"
|
|
375
|
+
style="stroke: $planets_color_36; stroke-width: 2px; fill: none;" />
|
|
376
376
|
</g>
|
|
377
377
|
</symbol>
|
|
378
378
|
|
|
@@ -92,6 +92,11 @@
|
|
|
92
92
|
--kerykeion-chart-color-fire-percentage: #ff6600;
|
|
93
93
|
--kerykeion-chart-color-water-percentage: #630e73;
|
|
94
94
|
|
|
95
|
+
/* Modalities Percentage */
|
|
96
|
+
--kerykeion-chart-color-cardinal-percentage: var(--kerykeion-chart-color-fire-percentage);
|
|
97
|
+
--kerykeion-chart-color-fixed-percentage: var(--kerykeion-chart-color-earth-percentage);
|
|
98
|
+
--kerykeion-chart-color-mutable-percentage: var(--kerykeion-chart-color-water-percentage);
|
|
99
|
+
|
|
95
100
|
/* Other */
|
|
96
101
|
--kerykeion-chart-color-house-number: #f00;
|
|
97
102
|
}
|
|
@@ -134,6 +134,11 @@
|
|
|
134
134
|
--kerykeion-chart-color-fire-percentage: var(--kerykeion-color-accent);
|
|
135
135
|
--kerykeion-chart-color-water-percentage: var(--kerykeion-color-secondary);
|
|
136
136
|
|
|
137
|
+
/* Modalities Percentage */
|
|
138
|
+
--kerykeion-chart-color-cardinal-percentage: var(--kerykeion-color-success);
|
|
139
|
+
--kerykeion-chart-color-fixed-percentage: var(--kerykeion-color-warning);
|
|
140
|
+
--kerykeion-chart-color-mutable-percentage: var(--kerykeion-color-error);
|
|
141
|
+
|
|
137
142
|
/* Aspects */
|
|
138
143
|
--kerykeion-chart-color-lunar-phase-0: var(--kerykeion-color-black);
|
|
139
144
|
--kerykeion-chart-color-lunar-phase-1: var(--kerykeion-color-white);
|
kerykeion/charts/themes/dark.css
CHANGED
|
@@ -135,6 +135,11 @@
|
|
|
135
135
|
--kerykeion-chart-color-fire-percentage: var(--kerykeion-color-accent);
|
|
136
136
|
--kerykeion-chart-color-water-percentage: var(--kerykeion-color-secondary);
|
|
137
137
|
|
|
138
|
+
/* Modalities Percentage */
|
|
139
|
+
--kerykeion-chart-color-cardinal-percentage: var(--kerykeion-color-success);
|
|
140
|
+
--kerykeion-chart-color-fixed-percentage: var(--kerykeion-color-warning);
|
|
141
|
+
--kerykeion-chart-color-mutable-percentage: var(--kerykeion-color-error);
|
|
142
|
+
|
|
138
143
|
/* Aspects */
|
|
139
144
|
--kerykeion-chart-color-lunar-phase-0: var(--kerykeion-color-black);
|
|
140
145
|
--kerykeion-chart-color-lunar-phase-1: var(--kerykeion-color-white);
|
|
@@ -135,6 +135,11 @@
|
|
|
135
135
|
--kerykeion-chart-color-fire-percentage: var(--kerykeion-color-accent);
|
|
136
136
|
--kerykeion-chart-color-water-percentage: var(--kerykeion-color-secondary);
|
|
137
137
|
|
|
138
|
+
/* Modalities Percentage */
|
|
139
|
+
--kerykeion-chart-color-cardinal-percentage: var(--kerykeion-color-success);
|
|
140
|
+
--kerykeion-chart-color-fixed-percentage: var(--kerykeion-color-warning);
|
|
141
|
+
--kerykeion-chart-color-mutable-percentage: var(--kerykeion-color-error);
|
|
142
|
+
|
|
138
143
|
/* Aspects */
|
|
139
144
|
--kerykeion-chart-color-lunar-phase-0: var(--kerykeion-color-black);
|
|
140
145
|
--kerykeion-chart-color-lunar-phase-1: var(--kerykeion-color-white);
|
|
@@ -134,6 +134,11 @@
|
|
|
134
134
|
--kerykeion-chart-color-fire-percentage: var(--kerykeion-color-accent);
|
|
135
135
|
--kerykeion-chart-color-water-percentage: var(--kerykeion-color-secondary);
|
|
136
136
|
|
|
137
|
+
/* Modalities Percentage */
|
|
138
|
+
--kerykeion-chart-color-cardinal-percentage: var(--kerykeion-color-success);
|
|
139
|
+
--kerykeion-chart-color-fixed-percentage: var(--kerykeion-color-warning);
|
|
140
|
+
--kerykeion-chart-color-mutable-percentage: var(--kerykeion-color-error);
|
|
141
|
+
|
|
137
142
|
/* Aspects */
|
|
138
143
|
--kerykeion-chart-color-lunar-phase-0: var(--kerykeion-color-black);
|
|
139
144
|
--kerykeion-chart-color-lunar-phase-1: var(--kerykeion-color-white);
|
kerykeion/kr_types/kr_models.py
CHANGED
|
@@ -100,9 +100,9 @@ class AstrologicalBaseModel(SubscriptableBaseModel):
|
|
|
100
100
|
perspective_type: PerspectiveType
|
|
101
101
|
|
|
102
102
|
# Common celestial points
|
|
103
|
-
# Main planets
|
|
104
|
-
sun: KerykeionPointModel
|
|
105
|
-
moon: KerykeionPointModel
|
|
103
|
+
# Main planets (all optional to support selective calculations)
|
|
104
|
+
sun: Optional[KerykeionPointModel] = None
|
|
105
|
+
moon: Optional[KerykeionPointModel] = None
|
|
106
106
|
mercury: Optional[KerykeionPointModel] = None
|
|
107
107
|
venus: Optional[KerykeionPointModel] = None
|
|
108
108
|
mars: Optional[KerykeionPointModel] = None
|
|
@@ -180,8 +180,8 @@ class AstrologicalBaseModel(SubscriptableBaseModel):
|
|
|
180
180
|
houses_names_list: List[Houses] = Field(description="Ordered list of houses names")
|
|
181
181
|
active_points: List[AstrologicalPoint] = Field(description="List of active points in the chart or aspects calculations.")
|
|
182
182
|
|
|
183
|
-
# Common lunar phase data
|
|
184
|
-
lunar_phase: LunarPhaseModel = Field(description="Lunar phase model")
|
|
183
|
+
# Common lunar phase data (optional)
|
|
184
|
+
lunar_phase: Optional[LunarPhaseModel] = Field(default=None, description="Lunar phase model")
|
|
185
185
|
|
|
186
186
|
|
|
187
187
|
class AstrologicalSubjectModel(AstrologicalBaseModel):
|
|
@@ -252,10 +252,10 @@
|
|
|
252
252
|
"Quaoar": "Quaoar",
|
|
253
253
|
"Regulus": "Regulus",
|
|
254
254
|
"Spica": "Spica",
|
|
255
|
-
"Pars_Fortunae": "
|
|
256
|
-
"Pars_Spiritus": "
|
|
257
|
-
"Pars_Amoris": "
|
|
258
|
-
"Pars_Fidei": "
|
|
255
|
+
"Pars_Fortunae": "Pars Fortunae",
|
|
256
|
+
"Pars_Spiritus": "Pars Spiritus",
|
|
257
|
+
"Pars_Amoris": "Pars Amoris",
|
|
258
|
+
"Pars_Fidei": "Pars Fidei",
|
|
259
259
|
"Vertex": "Vertex",
|
|
260
260
|
"Anti_Vertex": "Anti-Vertex"
|
|
261
261
|
}
|
|
@@ -382,10 +382,10 @@
|
|
|
382
382
|
"Quaoar": "Quaoar",
|
|
383
383
|
"Regulus": "Régulo",
|
|
384
384
|
"Spica": "Spica",
|
|
385
|
-
"Pars_Fortunae": "
|
|
386
|
-
"Pars_Spiritus": "
|
|
387
|
-
"Pars_Amoris": "
|
|
388
|
-
"Pars_Fidei": "
|
|
385
|
+
"Pars_Fortunae": "Pars Fortunae",
|
|
386
|
+
"Pars_Spiritus": "Pars Spiritus",
|
|
387
|
+
"Pars_Amoris": "Pars Amoris",
|
|
388
|
+
"Pars_Fidei": "Pars Fidei",
|
|
389
389
|
"Vertex": "Vertex",
|
|
390
390
|
"Anti_Vertex": "Anti-Vertex"
|
|
391
391
|
}
|
|
@@ -512,10 +512,10 @@
|
|
|
512
512
|
"Quaoar": "Quaoar",
|
|
513
513
|
"Regulus": "Regolo",
|
|
514
514
|
"Spica": "Spica",
|
|
515
|
-
"Pars_Fortunae": "
|
|
516
|
-
"Pars_Spiritus": "
|
|
517
|
-
"Pars_Amoris": "
|
|
518
|
-
"Pars_Fidei": "
|
|
515
|
+
"Pars_Fortunae": "Pars Fortunae",
|
|
516
|
+
"Pars_Spiritus": "Pars Spiritus",
|
|
517
|
+
"Pars_Amoris": "Pars Amoris",
|
|
518
|
+
"Pars_Fidei": "Pars Fidei",
|
|
519
519
|
"Vertex": "Vertex",
|
|
520
520
|
"Anti_Vertex": "Anti-Vertex"
|
|
521
521
|
}
|
|
@@ -772,10 +772,10 @@
|
|
|
772
772
|
"Quaoar": "Quaoar",
|
|
773
773
|
"Regulus": "Régulo",
|
|
774
774
|
"Spica": "Spica",
|
|
775
|
-
"Pars_Fortunae": "
|
|
776
|
-
"Pars_Spiritus": "
|
|
777
|
-
"Pars_Amoris": "
|
|
778
|
-
"Pars_Fidei": "
|
|
775
|
+
"Pars_Fortunae": "Pars Fortunae",
|
|
776
|
+
"Pars_Spiritus": "Pars Spiritus",
|
|
777
|
+
"Pars_Amoris": "Pars Amoris",
|
|
778
|
+
"Pars_Fidei": "Pars Fidei",
|
|
779
779
|
"Vertex": "Vertex",
|
|
780
780
|
"Anti_Vertex": "Anti-Vertex"
|
|
781
781
|
}
|
kerykeion/utilities.py
CHANGED
|
@@ -677,18 +677,15 @@ def get_house_number(house_name: Houses) -> int:
|
|
|
677
677
|
|
|
678
678
|
def find_common_active_points(first_points: list[AstrologicalPoint], second_points: list[AstrologicalPoint]) -> list[AstrologicalPoint]:
|
|
679
679
|
"""
|
|
680
|
-
|
|
680
|
+
Find only the elements that are present in both lists.
|
|
681
681
|
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
682
|
+
Args:
|
|
683
|
+
first_points: List of astrological points
|
|
684
|
+
second_points: List of astrological points
|
|
685
685
|
|
|
686
|
-
|
|
687
|
-
|
|
686
|
+
Returns:
|
|
687
|
+
List of elements common to both lists (without duplicates, order not guaranteed).
|
|
688
688
|
"""
|
|
689
|
-
common_points
|
|
690
|
-
common_points = [point for point in second_points if point in first_points]
|
|
691
|
-
|
|
692
|
-
ignored_points = set(second_points) - set(common_points)
|
|
689
|
+
common_points = list(set(first_points) & set(second_points))
|
|
693
690
|
|
|
694
691
|
return common_points
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: kerykeion
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.0a6
|
|
4
4
|
Summary: A python library for astrology.
|
|
5
5
|
License: AGPL-3.0
|
|
6
6
|
Keywords: astrology,ephemeris,astrology library,birtchart,svg,zodiac,zodiac-sing,astronomical-algorithms,synastry,astrology-calculator
|