kerykeion 5.1.0__tar.gz → 5.1.2__tar.gz

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 (244) hide show
  1. {kerykeion-5.1.0 → kerykeion-5.1.2}/PKG-INFO +2 -2
  2. {kerykeion-5.1.0 → kerykeion-5.1.2}/README.md +1 -1
  3. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/planetary_return.py +1 -1
  4. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/chart_data_factory.py +9 -6
  5. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/chart_drawer.py +6 -6
  6. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/charts_utils.py +5 -8
  7. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/report.py +1 -2
  8. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/kr_models.py +2 -2
  9. {kerykeion-5.1.0 → kerykeion-5.1.2}/pyproject.toml +1 -1
  10. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/aspects.md +9 -9
  11. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/chart_data_factory.md +18 -18
  12. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Albert Einstein - Natal Chart.svg +1 -1
  13. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Amitabh Bachchan - Natal Chart.svg +1 -1
  14. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Black and White Theme - Composite Chart.svg +1 -1
  15. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Composite Chart.svg +1 -1
  16. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Antonio Banderas - Natal Chart.svg +1 -1
  17. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Cristiano Ronaldo - Natal Chart.svg +1 -1
  18. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Hua Chenyu - Natal Chart.svg +1 -1
  19. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Jeanne Moreau - Natal Chart.svg +1 -1
  20. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart.svg +1 -1
  21. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Black and White Theme - DualReturnChart Chart - Solar Return.svg +1 -1
  22. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Black and White Theme - Natal Chart.svg +1 -1
  23. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Black and White Theme - Transit Chart.svg +1 -1
  24. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Dark High Contrast Theme - Natal Chart.svg +1 -1
  25. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Dark Theme - Natal Chart.svg +1 -1
  26. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Dark Theme External - Natal Chart.svg +1 -1
  27. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - DualReturnChart Chart - Lunar Return.svg +1 -1
  28. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - DualReturnChart Chart - Solar Return.svg +1 -1
  29. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - ExternalNatal - Natal Chart.svg +1 -1
  30. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Heliocentric - Natal Chart.svg +1 -1
  31. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - House System Morinus - Natal Chart.svg +1 -1
  32. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Light Theme - Natal Chart.svg +1 -1
  33. kerykeion-5.1.2/tests/charts/svg/John Lennon - Minified - Natal Chart.svg +1 -0
  34. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Natal Chart.svg +1 -1
  35. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - TCWTG - Transit Chart.svg +1 -1
  36. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Topocentric - Natal Chart.svg +1 -1
  37. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Transit Chart.svg +1 -1
  38. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Transparent Background - Natal Chart.svg +1 -1
  39. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - True Geocentric - Natal Chart.svg +1 -1
  40. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon DeLuce - Natal Chart.svg +1 -1
  41. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Fagan-Bradley - Natal Chart.svg +1 -1
  42. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon J2000 - Natal Chart.svg +1 -1
  43. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Lahiri - Natal Chart.svg +1 -1
  44. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Lunar Return - SingleReturnChart Chart.svg +1 -1
  45. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Solar Return - Black and White Theme - SingleReturnChart Chart.svg +1 -1
  46. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Solar Return - SingleReturnChart Chart.svg +1 -1
  47. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Kanye - Natal Chart.svg +1 -1
  48. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Mehmet Oz - Natal Chart.svg +1 -1
  49. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Mikhail Bulgakov - Natal Chart.svg +1 -1
  50. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/Sophia Loren - Natal Chart.svg +1 -1
  51. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_all_active_points.py +6 -2
  52. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_chart_data_factory.py +9 -9
  53. kerykeion-5.1.0/tests/charts/svg/John Lennon - Minified - Natal Chart.svg +0 -1
  54. {kerykeion-5.1.0 → kerykeion-5.1.2}/.coveragerc +0 -0
  55. {kerykeion-5.1.0 → kerykeion-5.1.2}/.github/FUNDING.yml +0 -0
  56. {kerykeion-5.1.0 → kerykeion-5.1.2}/.gitignore +0 -0
  57. {kerykeion-5.1.0 → kerykeion-5.1.2}/CHANGELOG.md +0 -0
  58. {kerykeion-5.1.0 → kerykeion-5.1.2}/DEVELOPMENT.md +0 -0
  59. {kerykeion-5.1.0 → kerykeion-5.1.2}/LICENSE +0 -0
  60. {kerykeion-5.1.0 → kerykeion-5.1.2}/MANIFEST.in +0 -0
  61. {kerykeion-5.1.0 → kerykeion-5.1.2}/TODO.md +0 -0
  62. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/index.html +0 -0
  63. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/aspects/aspects_utils.html +0 -0
  64. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/aspects/natal_aspects.html +0 -0
  65. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/aspects/synastry_aspects.html +0 -0
  66. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/aspects/transits_time_range.html +0 -0
  67. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/aspects.html +0 -0
  68. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/astrological_subject.html +0 -0
  69. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/charts/charts_utils.html +0 -0
  70. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/charts/draw_planets.html +0 -0
  71. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/charts/kerykeion_chart_svg.html +0 -0
  72. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/charts.html +0 -0
  73. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/composite_subject_factory.html +0 -0
  74. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/enums.html +0 -0
  75. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/ephemeris_data.html +0 -0
  76. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/fetch_geonames.html +0 -0
  77. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types/chart_types.html +0 -0
  78. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types/kerykeion_exception.html +0 -0
  79. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types/kr_literals.html +0 -0
  80. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types/kr_models.html +0 -0
  81. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types/settings_models.html +0 -0
  82. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/kr_types.html +0 -0
  83. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/relationship_score/relationship_score.html +0 -0
  84. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/relationship_score/relationship_score_factory.html +0 -0
  85. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/relationship_score.html +0 -0
  86. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/report.html +0 -0
  87. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/settings/config_constants.html +0 -0
  88. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/settings/kerykeion_settings.html +0 -0
  89. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/settings.html +0 -0
  90. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/transits_time_range.html +0 -0
  91. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion/utilities.html +0 -0
  92. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/kerykeion.html +0 -0
  93. {kerykeion-5.1.0 → kerykeion-5.1.2}/docs/search.js +0 -0
  94. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/aspects_synastry.py +0 -0
  95. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/composite_report_example.py +0 -0
  96. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/current_time_report.py +0 -0
  97. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/dual_return_report_example.py +0 -0
  98. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/natal_report_example.py +0 -0
  99. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/quickstart_natal_chart.py +0 -0
  100. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/solar_return_report_example.py +0 -0
  101. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/subject_report_example.py +0 -0
  102. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/synastry_report_example.py +0 -0
  103. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/transit_report_example.py +0 -0
  104. {kerykeion-5.1.0 → kerykeion-5.1.2}/examples/transits_time_range.py +0 -0
  105. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/__init__.py +0 -0
  106. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/aspects/__init__.py +0 -0
  107. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/aspects/aspects_factory.py +0 -0
  108. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/aspects/aspects_utils.py +0 -0
  109. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/astrological_subject_factory.py +0 -0
  110. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/backword.py +0 -0
  111. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/__init__.py +0 -0
  112. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/draw_planets.py +0 -0
  113. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/templates/aspect_grid_only.xml +0 -0
  114. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/templates/chart.xml +0 -0
  115. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/templates/wheel_only.xml +0 -0
  116. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/black-and-white.css +0 -0
  117. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/classic.css +0 -0
  118. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/dark-high-contrast.css +0 -0
  119. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/dark.css +0 -0
  120. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/light.css +0 -0
  121. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/charts/themes/strawberry.css +0 -0
  122. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/composite_subject_factory.py +0 -0
  123. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/ephemeris_data_factory.py +0 -0
  124. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/fetch_geonames.py +0 -0
  125. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/house_comparison/__init__.py +0 -0
  126. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/house_comparison/house_comparison_factory.py +0 -0
  127. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/house_comparison/house_comparison_utils.py +0 -0
  128. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/__init__.py +0 -0
  129. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/chart_template_model.py +0 -0
  130. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/kerykeion_exception.py +0 -0
  131. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/kr_literals.py +0 -0
  132. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/kr_models.py +0 -0
  133. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/kr_types/settings_models.py +0 -0
  134. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/planetary_return_factory.py +0 -0
  135. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/relationship_score_factory.py +0 -0
  136. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/__init__.py +0 -0
  137. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/chart_template_model.py +0 -0
  138. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/kerykeion_exception.py +0 -0
  139. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/kr_literals.py +0 -0
  140. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/schemas/settings_models.py +0 -0
  141. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/__init__.py +0 -0
  142. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/chart_defaults.py +0 -0
  143. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/config_constants.py +0 -0
  144. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/kerykeion_settings.py +0 -0
  145. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/translation_strings.py +0 -0
  146. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/settings/translations.py +0 -0
  147. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/README.md +0 -0
  148. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast136/s136108s.se1 +0 -0
  149. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast136/s136199s.se1 +0 -0
  150. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast136/s136472s.se1 +0 -0
  151. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast28/se28978s.se1 +0 -0
  152. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast50/se50000s.se1 +0 -0
  153. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast90/se90377s.se1 +0 -0
  154. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/ast90/se90482s.se1 +0 -0
  155. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/seas_18.se1 +0 -0
  156. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/sweph/sefstars.txt +0 -0
  157. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/transits_time_range_factory.py +0 -0
  158. {kerykeion-5.1.0 → kerykeion-5.1.2}/kerykeion/utilities.py +0 -0
  159. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.14.0.md +0 -0
  160. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.16.0.md +0 -0
  161. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.17.0.md +0 -0
  162. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.19.0.md +0 -0
  163. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.21.0.md +0 -0
  164. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.22.0.md +0 -0
  165. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.23.0.md +0 -0
  166. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.24.0.md +0 -0
  167. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.25.0.md +0 -0
  168. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/V4.26.0.md +0 -0
  169. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/v5.0.0.md +0 -0
  170. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/v5.0.0a.md +0 -0
  171. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/v5.0.0b.md +0 -0
  172. {kerykeion-5.1.0 → kerykeion-5.1.2}/release_notes/v5.1.0.md +0 -0
  173. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/README.md +0 -0
  174. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/__init__.py +0 -0
  175. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/quality_check.py +0 -0
  176. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/regenerate_expected_aspects.py +0 -0
  177. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/regenerate_synastry_aspects.py +0 -0
  178. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/regenerate_synastry_from_test.py +0 -0
  179. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/regenerate_test_charts.py +0 -0
  180. {kerykeion-5.1.0 → kerykeion-5.1.2}/scripts/test_markdown_snippets.py +0 -0
  181. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/astrological_subject_factory.md +0 -0
  182. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/charts.md +0 -0
  183. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/composite_subject_factory.md +0 -0
  184. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/element_quality_distribution.md +0 -0
  185. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/ephemeris_data_factory.md +0 -0
  186. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/house_comparison.md +0 -0
  187. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/planetary_return_factory.md +0 -0
  188. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/relationship_score_factory.md +0 -0
  189. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/report.md +0 -0
  190. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/transits_time_range_factory.md +0 -0
  191. {kerykeion-5.1.0 → kerykeion-5.1.2}/site-docs/utilities.md +0 -0
  192. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/__init__.py +0 -0
  193. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/aspects/__init__.py +0 -0
  194. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/aspects/expected_natal_aspects.py +0 -0
  195. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/aspects/expected_synastry_aspects.py +0 -0
  196. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/aspects/test_natal_aspects.py +0 -0
  197. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/aspects/test_synastry_aspects.py +0 -0
  198. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/__init__.py +0 -0
  199. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/compare_svg_lines.py +0 -0
  200. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Aspect Grid Only.svg +0 -0
  201. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Wheel Only.svg +0 -0
  202. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Aspect Grid Only.svg +0 -0
  203. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Grid.svg +0 -0
  204. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - List.svg +0 -0
  205. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Wheel Only.svg +0 -0
  206. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Dark Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  207. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Dark Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  208. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Light Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  209. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Only - Natal Chart - Aspect Grid Only.svg +0 -0
  210. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  211. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Aspect Grid Transit - Transit Chart - Aspect Grid Only.svg +0 -0
  212. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Black and White Theme - Synastry Chart.svg +0 -0
  213. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - DTS - Synastry Chart.svg +0 -0
  214. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - SCTWL - Synastry Chart.svg +0 -0
  215. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Wheel External Only - ExternalNatal Chart - Wheel Only.svg +0 -0
  216. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Wheel Only - Natal Chart - Wheel Only.svg +0 -0
  217. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Wheel Synastry Only - Synastry Chart - Wheel Only.svg +0 -0
  218. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon - Wheel Transit Only - Transit Chart - Wheel Only.svg +0 -0
  219. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Fagan-Bradley - Light Theme - Natal Chart - Wheel Only.svg +0 -0
  220. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/svg/John Lennon Lahiri - Dark Theme - Natal Chart - Wheel Only.svg +0 -0
  221. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/test_charts.py +0 -0
  222. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/charts/test_draw_planets.py +0 -0
  223. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/settings/test_settings.py +0 -0
  224. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_astrological_subject.py +0 -0
  225. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_astrological_subject_jyotish.py +0 -0
  226. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_backward_compatibility.py +0 -0
  227. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_backword.py +0 -0
  228. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_chart_data_factory_complete.py +0 -0
  229. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_chart_drawer_complete.py +0 -0
  230. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_composite_subject_factory_complete.py +0 -0
  231. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_ephemeris_data.py +0 -0
  232. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_ephemeris_data_factory_complete.py +0 -0
  233. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_fetch_geonames.py +0 -0
  234. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_json_dump.py +0 -0
  235. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_planetary_return_factory_complete.py +0 -0
  236. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_relationship_score.py +0 -0
  237. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_relationship_score_factory_complete.py +0 -0
  238. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_report.py +0 -0
  239. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_transits_time_range_factory_complete.py +0 -0
  240. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_utc.py +0 -0
  241. {kerykeion-5.1.0 → kerykeion-5.1.2}/tests/test_utilities.py +0 -0
  242. {kerykeion-5.1.0 → kerykeion-5.1.2}/uv.lock +0 -0
  243. {kerykeion-5.1.0 → kerykeion-5.1.2}/workspace/README.md +0 -0
  244. {kerykeion-5.1.0 → kerykeion-5.1.2}/workspace/main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kerykeion
3
- Version: 5.1.0
3
+ Version: 5.1.2
4
4
  Summary: A Python library for astrological calculations, including natal charts, houses, planetary aspects, and SVG chart generation.
5
5
  Project-URL: Homepage, https://www.kerykeion.net/
6
6
  Project-URL: Repository, https://github.com/g-battaglia/kerykeion
@@ -1336,7 +1336,7 @@ All data structures are now strongly typed Pydantic models:
1336
1336
 
1337
1337
  - **`AstrologicalSubjectModel`**: Subject data with full validation
1338
1338
  - **`ChartDataModel`**: Enriched chart data with elements, qualities, aspects
1339
- - **`SingleChartAspectsModel` / `DualChartAspectsModel`**: Typed aspect collections
1339
+ - **`AspectModel` list**: Raw aspect entries directly on `ChartDataModel.aspects`
1340
1340
  - **`PlanetReturnModel`**: Planetary return data
1341
1341
  - **`ElementDistributionModel`**: Element statistics (fire, earth, air, water)
1342
1342
  - **`QualityDistributionModel`**: Quality statistics (cardinal, fixed, mutable)
@@ -1296,7 +1296,7 @@ All data structures are now strongly typed Pydantic models:
1296
1296
 
1297
1297
  - **`AstrologicalSubjectModel`**: Subject data with full validation
1298
1298
  - **`ChartDataModel`**: Enriched chart data with elements, qualities, aspects
1299
- - **`SingleChartAspectsModel` / `DualChartAspectsModel`**: Typed aspect collections
1299
+ - **`AspectModel` list**: Raw aspect entries directly on `ChartDataModel.aspects`
1300
1300
  - **`PlanetReturnModel`**: Planetary return data
1301
1301
  - **`ElementDistributionModel`**: Element statistics (fire, earth, air, water)
1302
1302
  - **`QualityDistributionModel`**: Quality statistics (cardinal, fixed, mutable)
@@ -44,7 +44,7 @@ def main() -> None:
44
44
 
45
45
  print("Solar return cast for:", solar_return.iso_formatted_local_datetime)
46
46
  print("Return location:", solar_return.city, solar_return.nation)
47
- print("Total aspects:", len(chart_data.aspects.aspects))
47
+ print("Total aspects:", len(chart_data.aspects))
48
48
 
49
49
 
50
50
  if __name__ == "__main__":
@@ -159,10 +159,10 @@ class ChartDataFactory:
159
159
  )
160
160
 
161
161
  # Calculate aspects based on chart type
162
- aspects: Union[SingleChartAspectsModel, DualChartAspectsModel]
162
+ aspects_model: Union[SingleChartAspectsModel, DualChartAspectsModel]
163
163
  if chart_type in ["Natal", "Composite", "SingleReturnChart"]:
164
164
  # Single chart aspects
165
- aspects = AspectsFactory.single_chart_aspects(
165
+ aspects_model = AspectsFactory.single_chart_aspects(
166
166
  first_subject,
167
167
  active_points=effective_active_points,
168
168
  active_aspects=active_aspects,
@@ -172,7 +172,7 @@ class ChartDataFactory:
172
172
  # Dual chart aspects - second_subject is guaranteed to exist here due to validation above
173
173
  if second_subject is None:
174
174
  raise KerykeionException(f"Second subject is required for {chart_type} charts.")
175
- aspects = AspectsFactory.dual_chart_aspects(
175
+ aspects_model = AspectsFactory.dual_chart_aspects(
176
176
  first_subject,
177
177
  second_subject,
178
178
  active_points=effective_active_points,
@@ -301,7 +301,7 @@ class ChartDataFactory:
301
301
  return SingleChartDataModel(
302
302
  chart_type=cast(Literal["Natal", "Composite", "SingleReturnChart"], chart_type),
303
303
  subject=first_subject,
304
- aspects=cast(SingleChartAspectsModel, aspects),
304
+ aspects=cast(SingleChartAspectsModel, aspects_model).aspects,
305
305
  element_distribution=element_distribution,
306
306
  quality_distribution=quality_distribution,
307
307
  active_points=effective_active_points,
@@ -315,7 +315,7 @@ class ChartDataFactory:
315
315
  chart_type=cast(Literal["Transit", "Synastry", "DualReturnChart"], chart_type),
316
316
  first_subject=first_subject,
317
317
  second_subject=second_subject,
318
- aspects=cast(DualChartAspectsModel, aspects),
318
+ aspects=cast(DualChartAspectsModel, aspects_model).aspects,
319
319
  house_comparison=house_comparison,
320
320
  relationship_score=relationship_score,
321
321
  element_distribution=element_distribution,
@@ -542,8 +542,11 @@ 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.aspects)}")
545
+ print(f"Aspects: {len(natal_data.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}%")
549
549
  print(f"Water: {natal_data.element_distribution.water_percentage}%")
550
+
551
+ print("\n---\n")
552
+ print(natal_data.model_dump_json(indent=4))
@@ -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.aspects
346
+ self.aspects_list = chart_data.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.aspects
369
+ self.aspects_list = chart_data.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.aspects
387
+ self.aspects_list = chart_data.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.aspects
408
+ self.aspects_list = chart_data.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.aspects
426
+ self.aspects_list = chart_data.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.aspects
444
+ self.aspects_list = chart_data.aspects
445
445
 
446
446
  # Screen size
447
447
  self.height = self._DEFAULT_HEIGHT
@@ -1023,15 +1023,13 @@ def draw_transit_aspect_list(
1023
1023
 
1024
1024
 
1025
1025
  def calculate_moon_phase_chart_params(
1026
- degrees_between_sun_and_moon: float,
1027
- latitude: float
1026
+ degrees_between_sun_and_moon: float
1028
1027
  ) -> dict:
1029
1028
  """
1030
1029
  Calculate the parameters for the moon phase chart.
1031
1030
 
1032
1031
  Parameters:
1033
1032
  - degrees_between_sun_and_moon (float): The degrees between the sun and the moon.
1034
- - latitude (float): The latitude for rotation calculation.
1035
1033
 
1036
1034
  Returns:
1037
1035
  - dict: The moon phase chart parameters.
@@ -1074,9 +1072,8 @@ def calculate_moon_phase_chart_params(
1074
1072
  else:
1075
1073
  raise KerykeionException(f"Invalid degree value: {deg}")
1076
1074
 
1077
-
1078
- # Calculate rotation based on latitude
1079
- lunar_phase_rotate = -90.0 - latitude
1075
+ # No artificial rotation for moon phase icon in astrological chart
1076
+ lunar_phase_rotate = 0.0
1080
1077
 
1081
1078
  return {
1082
1079
  "circle_center_x": circle_center_x,
@@ -1697,13 +1694,13 @@ def makeLunarPhase(degrees_between_sun_and_moon: float, latitude: float) -> str:
1697
1694
 
1698
1695
  Parameters:
1699
1696
  - degrees_between_sun_and_moon (float): Angle between sun and moon in degrees
1700
- - latitude (float): Observer's latitude for correct orientation
1697
+ - latitude (float): Observer's latitude (no longer used, kept for backward compatibility)
1701
1698
 
1702
1699
  Returns:
1703
1700
  - str: SVG representation of lunar phase
1704
1701
  """
1705
1702
  # Calculate parameters for the lunar phase visualization
1706
- params = calculate_moon_phase_chart_params(degrees_between_sun_and_moon, latitude)
1703
+ params = calculate_moon_phase_chart_params(degrees_between_sun_and_moon)
1707
1704
 
1708
1705
  # Extract the calculated values
1709
1706
  lunar_phase_circle_center_x = params["circle_center_x"]
@@ -510,8 +510,7 @@ class ReportGenerator:
510
510
  if not self._chart_data or not getattr(self._chart_data, "aspects", None):
511
511
  return ""
512
512
 
513
- aspects_model = self._chart_data.aspects
514
- aspects_list = list(getattr(aspects_model, "aspects", []))
513
+ aspects_list = list(self._chart_data.aspects)
515
514
 
516
515
  if not aspects_list:
517
516
  return "No aspects data available."
@@ -536,7 +536,7 @@ class SingleChartDataModel(SubscriptableBaseModel):
536
536
  subject: Union["AstrologicalSubjectModel", "CompositeSubjectModel", "PlanetReturnModel"]
537
537
 
538
538
  # Internal aspects analysis
539
- aspects: "SingleChartAspectsModel"
539
+ aspects: List[AspectModel]
540
540
 
541
541
  # Element and quality distributions
542
542
  element_distribution: "ElementDistributionModel"
@@ -582,7 +582,7 @@ class DualChartDataModel(SubscriptableBaseModel):
582
582
  second_subject: Union["AstrologicalSubjectModel", "PlanetReturnModel"]
583
583
 
584
584
  # Inter-chart aspects analysis
585
- aspects: "DualChartAspectsModel"
585
+ aspects: List[AspectModel]
586
586
 
587
587
  # House comparison analysis
588
588
  house_comparison: Optional["HouseComparisonModel"] = None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kerykeion"
3
- version = "5.1.0"
3
+ version = "5.1.2"
4
4
  authors = [
5
5
  { name = "Giacomo Battaglia", email = "kerykeion.astrology@gmail.com" }
6
6
  ]
@@ -911,8 +911,8 @@ def generate_consultation_report(person, report_type="comprehensive"):
911
911
 
912
912
  if report_type == "comprehensive":
913
913
  strongest = sorted(chart_aspects.aspects, key=lambda aspect: abs(aspect.orbit))[:5]
914
- for aspect in strongest:
915
- print(f" {aspect.p1_name} {aspect.aspect} {aspect.p2_name} (orb {aspect.orbit:+.2f}°)")
914
+ for aspect in strongest:
915
+ print(f" {aspect.p1_name} {aspect.aspect} {aspect.p2_name} (orb {aspect.orbit:+.2f}°)")
916
916
 
917
917
  return chart_aspects
918
918
 
@@ -977,13 +977,13 @@ def comparative_study(subjects_list, study_focus="general"):
977
977
  print(f"Processing subject {i}/{len(subjects_list)}: {subject.name}")
978
978
  chart_aspects = AspectsFactory.single_chart_aspects(subject)
979
979
  stats = statistical_aspects_analysis(chart_aspects.aspects)
980
- result = {
981
- "name": subject.name,
982
- "birth_year": subject.year,
983
- "sun_sign": subject.sun.sign,
984
- "aspects": len(chart_aspects.aspects),
985
- "stats": stats,
986
- }
980
+ result = {
981
+ "name": subject.name,
982
+ "birth_year": subject.year,
983
+ "sun_sign": subject.sun.sign,
984
+ "aspects": len(chart_aspects.aspects),
985
+ "stats": stats,
986
+ }
987
987
  all_results.append(result)
988
988
 
989
989
  print()
@@ -148,7 +148,7 @@ print(f"Model Type: {type(chart_data).__name__}") # SingleChartDataModel
148
148
  print(f"Chart Type: {chart_data.chart_type}") # Natal
149
149
  print(f"Subject: {chart_data.subject.name}") # John Doe
150
150
  print(f"Active Points: {len(chart_data.active_points)}")
151
- print(f"Aspects: {len(chart_data.aspects.aspects)}")
151
+ print(f"Aspects: {len(chart_data.aspects)}")
152
152
 
153
153
  # Element distribution analysis
154
154
  elements = chart_data.element_distribution
@@ -204,7 +204,7 @@ print(f"Model Type: {type(synastry_data).__name__}") # DualChartDataModel
204
204
  print(f"Chart Type: {synastry_data.chart_type}") # Synastry
205
205
  print(f"First Subject: {synastry_data.first_subject.name}") # Person 1
206
206
  print(f"Second Subject: {synastry_data.second_subject.name}") # Person 2
207
- print(f"Inter-chart Aspects: {len(synastry_data.aspects.aspects)}")
207
+ print(f"Inter-chart Aspects: {len(synastry_data.aspects)}")
208
208
 
209
209
  # Relationship compatibility analysis
210
210
  if synastry_data.relationship_score:
@@ -256,12 +256,12 @@ transit_data = ChartDataFactory.create_transit_chart_data(
256
256
  )
257
257
 
258
258
  print(f"Transit Time: {transit_data.second_subject.iso_formatted_local_datetime}")
259
- print(f"Active Transits: {len(transit_data.aspects.aspects)}")
259
+ print(f"Active Transits: {len(transit_data.aspects)}")
260
260
 
261
261
  # Analyze major transits
262
262
  major_aspects = ["conjunction", "opposition", "trine", "square", "sextile"]
263
263
  major_transits = [
264
- aspect for aspect in transit_data.aspects.aspects
264
+ aspect for aspect in transit_data.aspects
265
265
  if aspect.aspect in major_aspects
266
266
  ]
267
267
 
@@ -308,7 +308,7 @@ second_subject = composite_subject_model.second_subject
308
308
  print(f"Composite Chart Name: {composite_subject_model.name}")
309
309
  print(f"Members: {first_subject.name} & {second_subject.name}")
310
310
  print(f"Chart Type: {composite_chart.chart_type}")
311
- print(f"Aspects: {len(composite_chart.aspects.aspects)}")
311
+ print(f"Aspects: {len(composite_chart.aspects)}")
312
312
 
313
313
  average_latitude = (first_subject.lat + second_subject.lat) / 2
314
314
  average_longitude = (first_subject.lng + second_subject.lng) / 2
@@ -356,7 +356,7 @@ chart_data = ChartDataFactory.create_natal_chart_data(
356
356
  )
357
357
 
358
358
  print(f"Active Points: {len(chart_data.active_points)}")
359
- print(f"Calculated Aspects: {len(chart_data.aspects.aspects)}")
359
+ print(f"Calculated Aspects: {len(chart_data.aspects)}")
360
360
  ```
361
361
 
362
362
  ### Custom Aspect Configuration
@@ -390,7 +390,7 @@ chart_data = ChartDataFactory.create_natal_chart_data(
390
390
  )
391
391
 
392
392
  print(f"Configured Aspects: {len(chart_data.active_aspects)}")
393
- print(f"Found Aspects: {len(chart_data.aspects.aspects)}")
393
+ print(f"Found Aspects: {len(chart_data.aspects)}")
394
394
  ```
395
395
 
396
396
  ### Selective Analysis Features
@@ -423,7 +423,7 @@ synastry_data = ChartDataFactory.create_synastry_chart_data(
423
423
  active_points=["Sun", "Moon", "Venus", "Mars"],
424
424
  )
425
425
 
426
- print(f"Love-focused aspects: {len(synastry_data.aspects.aspects)}")
426
+ print(f"Love-focused aspects: {len(synastry_data.aspects)}")
427
427
  ```
428
428
 
429
429
  ## Programming Integration Examples
@@ -492,8 +492,8 @@ def process_natal_chart(birth_data: BirthData) -> Dict[str, Any]:
492
492
  },
493
493
  "analysis": {
494
494
  "aspects": {
495
- "total": len(chart_data.aspects.aspects),
496
- "relevant": len(chart_data.aspects.aspects),
495
+ "total": len(chart_data.aspects),
496
+ "relevant": len(chart_data.aspects),
497
497
  "list": [
498
498
  {
499
499
  "from": aspect.p1_name,
@@ -502,7 +502,7 @@ def process_natal_chart(birth_data: BirthData) -> Dict[str, Any]:
502
502
  "orb": round(aspect.orbit, 2),
503
503
  "exact_degrees": aspect.aspect_degrees
504
504
  }
505
- for aspect in chart_data.aspects.aspects
505
+ for aspect in chart_data.aspects
506
506
  ]
507
507
  },
508
508
  "elements": {
@@ -544,7 +544,7 @@ def analyze_relationship_compatibility(person1: BirthData, person2: BirthData) -
544
544
  "compatibility": {
545
545
  "score": synastry_data.relationship_score.score_value if synastry_data.relationship_score else None,
546
546
  "description": synastry_data.relationship_score.score_description if synastry_data.relationship_score else None,
547
- "aspects_count": len(synastry_data.aspects.aspects)
547
+ "aspects_count": len(synastry_data.aspects)
548
548
  },
549
549
  "key_aspects": [
550
550
  {
@@ -554,7 +554,7 @@ def analyze_relationship_compatibility(person1: BirthData, person2: BirthData) -
554
554
  "orb": round(aspect.orbit, 2),
555
555
  "strength": "strong" if aspect.orbit < 3 else "moderate" if aspect.orbit < 6 else "weak"
556
556
  }
557
- for aspect in synastry_data.aspects.aspects[:10]
557
+ for aspect in synastry_data.aspects[:10]
558
558
  ],
559
559
  "house_overlays": {
560
560
  "person1_in_person2": len(synastry_data.house_comparison.first_points_in_second_houses) if synastry_data.house_comparison else 0,
@@ -626,7 +626,7 @@ def process_multiple_charts(birth_data_list: List[BirthData]) -> List[Dict[str,
626
626
  "cardinal_percentage": chart_data.quality_distribution.cardinal_percentage,
627
627
  "fixed_percentage": chart_data.quality_distribution.fixed_percentage,
628
628
  "mutable_percentage": chart_data.quality_distribution.mutable_percentage,
629
- "aspect_count": len(chart_data.aspects.aspects),
629
+ "aspect_count": len(chart_data.aspects),
630
630
  }
631
631
 
632
632
  results.append(result)
@@ -808,7 +808,7 @@ subject = AstrologicalSubjectFactory.from_birth_data(
808
808
  )
809
809
  chart_data = ChartDataFactory.create_natal_chart_data(subject)
810
810
 
811
- aspects = chart_data.aspects.aspects
811
+ aspects = chart_data.aspects
812
812
 
813
813
  # Count aspect types
814
814
  aspect_counts = {}
@@ -860,7 +860,7 @@ chart_data = ChartDataFactory.create_natal_chart_data(
860
860
  )
861
861
 
862
862
  print(f"Active Points: {len(chart_data.active_points)}")
863
- print(f"Calculated Aspects: {len(chart_data.aspects.aspects)}")
863
+ print(f"Calculated Aspects: {len(chart_data.aspects)}")
864
864
  ```
865
865
 
866
866
  ### Aspect Configuration Optimization
@@ -904,7 +904,7 @@ chart_data = ChartDataFactory.create_natal_chart_data(
904
904
  )
905
905
 
906
906
  print(f"Configured {len(chart_data.active_aspects)} active aspect types")
907
- print(f"Resulting aspects: {len(chart_data.aspects.aspects)}")
907
+ print(f"Resulting aspects: {len(chart_data.aspects)}")
908
908
  ```
909
909
 
910
910
  ### Selective Feature Loading
@@ -936,7 +936,7 @@ quick_synastry = ChartDataFactory.create_synastry_chart_data(
936
936
  active_points=["Sun", "Moon", "Venus", "Mars"],
937
937
  )
938
938
 
939
- print(f"Quick analysis: {len(quick_synastry.aspects.aspects)} aspects")
939
+ print(f"Quick analysis: {len(quick_synastry.aspects)} aspects")
940
940
  ```
941
941
 
942
942
  ## Error Handling
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-138.39841 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-115.44478000000001 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -218,7 +218,7 @@
218
218
 
219
219
  <!-- Lunar Phase -->
220
220
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
221
- <g transform='rotate(-124.61500000000001 20 10)'>
221
+ <g transform='rotate(0.0 20 10)'>
222
222
  <defs>
223
223
  <clipPath id='moonPhaseCutOffCircle'>
224
224
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-124.61500000000001 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-126.72015999999999 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-122.66568000000001 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-118.19874 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-138.85341 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,694)'>
186
- <g transform='rotate(-143.41058 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -218,7 +218,7 @@
218
218
 
219
219
  <!-- Lunar Phase -->
220
220
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
221
- <g transform='rotate(-143.4 20 10)'>
221
+ <g transform='rotate(0.0 20 10)'>
222
222
  <defs>
223
223
  <clipPath id='moonPhaseCutOffCircle'>
224
224
  <circle cx='20' cy='10' r='10' />
@@ -218,7 +218,7 @@
218
218
 
219
219
  <!-- Lunar Phase -->
220
220
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
221
- <g transform='rotate(-143.41058 20 10)'>
221
+ <g transform='rotate(0.0 20 10)'>
222
222
  <defs>
223
223
  <clipPath id='moonPhaseCutOffCircle'>
224
224
  <circle cx='20' cy='10' r='10' />
@@ -218,7 +218,7 @@
218
218
 
219
219
  <!-- Lunar Phase -->
220
220
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
221
- <g transform='rotate(-143.41058 20 10)'>
221
+ <g transform='rotate(0.0 20 10)'>
222
222
  <defs>
223
223
  <clipPath id='moonPhaseCutOffCircle'>
224
224
  <circle cx='20' cy='10' r='10' />
@@ -229,7 +229,7 @@
229
229
 
230
230
  <!-- Lunar Phase -->
231
231
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
232
- <g transform='rotate(-143.41058 20 10)'>
232
+ <g transform='rotate(0.0 20 10)'>
233
233
  <defs>
234
234
  <clipPath id='moonPhaseCutOffCircle'>
235
235
  <circle cx='20' cy='10' r='10' />
@@ -230,7 +230,7 @@
230
230
 
231
231
  <!-- Lunar Phase -->
232
232
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
233
- <g transform='rotate(-143.41058 20 10)'>
233
+ <g transform='rotate(0.0 20 10)'>
234
234
  <defs>
235
235
  <clipPath id='moonPhaseCutOffCircle'>
236
236
  <circle cx='20' cy='10' r='10' />
@@ -230,7 +230,7 @@
230
230
 
231
231
  <!-- Lunar Phase -->
232
232
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
233
- <g transform='rotate(-143.41058 20 10)'>
233
+ <g transform='rotate(0.0 20 10)'>
234
234
  <defs>
235
235
  <clipPath id='moonPhaseCutOffCircle'>
236
236
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-143.4 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-143.4 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-143.41058 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-143.41058 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -183,7 +183,7 @@
183
183
 
184
184
  <!-- Lunar Phase -->
185
185
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
186
- <g transform='rotate(-143.41058 20 10)'>
186
+ <g transform='rotate(0.0 20 10)'>
187
187
  <defs>
188
188
  <clipPath id='moonPhaseCutOffCircle'>
189
189
  <circle cx='20' cy='10' r='10' />
@@ -230,7 +230,7 @@
230
230
 
231
231
  <!-- Lunar Phase -->
232
232
  <g kr:node='Lunar_Phase' transform='translate(10,518)'>
233
- <g transform='rotate(-143.41058 20 10)'>
233
+ <g transform='rotate(0.0 20 10)'>
234
234
  <defs>
235
235
  <clipPath id='moonPhaseCutOffCircle'>
236
236
  <circle cx='20' cy='10' r='10' />