kerykeion 5.1.5__tar.gz → 5.1.6__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 (245) hide show
  1. {kerykeion-5.1.5 → kerykeion-5.1.6}/PKG-INFO +1 -1
  2. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/chart_drawer.py +3 -3
  3. {kerykeion-5.1.5 → kerykeion-5.1.6}/pyproject.toml +1 -1
  4. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/regenerate_test_charts.py +34 -0
  5. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Black and White Theme - Transit Chart.svg +2 -2
  6. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - TCWTG - Transit Chart.svg +2 -2
  7. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Transit Chart.svg +2 -2
  8. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Moon Phases.svg +15 -15
  9. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_chart_drawer_complete.py +28 -0
  10. {kerykeion-5.1.5 → kerykeion-5.1.6}/.coveragerc +0 -0
  11. {kerykeion-5.1.5 → kerykeion-5.1.6}/.github/FUNDING.yml +0 -0
  12. {kerykeion-5.1.5 → kerykeion-5.1.6}/.gitignore +0 -0
  13. {kerykeion-5.1.5 → kerykeion-5.1.6}/CHANGELOG.md +0 -0
  14. {kerykeion-5.1.5 → kerykeion-5.1.6}/DEVELOPMENT.md +0 -0
  15. {kerykeion-5.1.5 → kerykeion-5.1.6}/LICENSE +0 -0
  16. {kerykeion-5.1.5 → kerykeion-5.1.6}/MANIFEST.in +0 -0
  17. {kerykeion-5.1.5 → kerykeion-5.1.6}/README.md +0 -0
  18. {kerykeion-5.1.5 → kerykeion-5.1.6}/TODO.md +0 -0
  19. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/index.html +0 -0
  20. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/aspects/aspects_utils.html +0 -0
  21. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/aspects/natal_aspects.html +0 -0
  22. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/aspects/synastry_aspects.html +0 -0
  23. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/aspects/transits_time_range.html +0 -0
  24. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/aspects.html +0 -0
  25. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/astrological_subject.html +0 -0
  26. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/charts/charts_utils.html +0 -0
  27. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/charts/draw_planets.html +0 -0
  28. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/charts/kerykeion_chart_svg.html +0 -0
  29. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/charts.html +0 -0
  30. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/composite_subject_factory.html +0 -0
  31. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/enums.html +0 -0
  32. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/ephemeris_data.html +0 -0
  33. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/fetch_geonames.html +0 -0
  34. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types/chart_types.html +0 -0
  35. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types/kerykeion_exception.html +0 -0
  36. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types/kr_literals.html +0 -0
  37. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types/kr_models.html +0 -0
  38. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types/settings_models.html +0 -0
  39. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/kr_types.html +0 -0
  40. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/relationship_score/relationship_score.html +0 -0
  41. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/relationship_score/relationship_score_factory.html +0 -0
  42. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/relationship_score.html +0 -0
  43. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/report.html +0 -0
  44. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/settings/config_constants.html +0 -0
  45. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/settings/kerykeion_settings.html +0 -0
  46. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/settings.html +0 -0
  47. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/transits_time_range.html +0 -0
  48. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion/utilities.html +0 -0
  49. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/kerykeion.html +0 -0
  50. {kerykeion-5.1.5 → kerykeion-5.1.6}/docs/search.js +0 -0
  51. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/aspects_synastry.py +0 -0
  52. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/composite_report_example.py +0 -0
  53. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/current_time_report.py +0 -0
  54. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/dual_return_report_example.py +0 -0
  55. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/natal_report_example.py +0 -0
  56. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/planetary_return.py +0 -0
  57. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/quickstart_natal_chart.py +0 -0
  58. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/solar_return_report_example.py +0 -0
  59. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/subject_report_example.py +0 -0
  60. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/synastry_report_example.py +0 -0
  61. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/transit_report_example.py +0 -0
  62. {kerykeion-5.1.5 → kerykeion-5.1.6}/examples/transits_time_range.py +0 -0
  63. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/__init__.py +0 -0
  64. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/aspects/__init__.py +0 -0
  65. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/aspects/aspects_factory.py +0 -0
  66. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/aspects/aspects_utils.py +0 -0
  67. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/astrological_subject_factory.py +0 -0
  68. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/backword.py +0 -0
  69. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/chart_data_factory.py +0 -0
  70. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/__init__.py +0 -0
  71. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/charts_utils.py +0 -0
  72. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/draw_planets.py +0 -0
  73. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/templates/aspect_grid_only.xml +0 -0
  74. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/templates/chart.xml +0 -0
  75. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/templates/wheel_only.xml +0 -0
  76. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/black-and-white.css +0 -0
  77. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/classic.css +0 -0
  78. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/dark-high-contrast.css +0 -0
  79. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/dark.css +0 -0
  80. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/light.css +0 -0
  81. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/charts/themes/strawberry.css +0 -0
  82. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/composite_subject_factory.py +0 -0
  83. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/ephemeris_data_factory.py +0 -0
  84. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/fetch_geonames.py +0 -0
  85. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/house_comparison/__init__.py +0 -0
  86. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/house_comparison/house_comparison_factory.py +0 -0
  87. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/house_comparison/house_comparison_utils.py +0 -0
  88. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/__init__.py +0 -0
  89. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/chart_template_model.py +0 -0
  90. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/kerykeion_exception.py +0 -0
  91. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/kr_literals.py +0 -0
  92. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/kr_models.py +0 -0
  93. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/kr_types/settings_models.py +0 -0
  94. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/planetary_return_factory.py +0 -0
  95. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/relationship_score_factory.py +0 -0
  96. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/report.py +0 -0
  97. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/__init__.py +0 -0
  98. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/chart_template_model.py +0 -0
  99. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/kerykeion_exception.py +0 -0
  100. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/kr_literals.py +0 -0
  101. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/kr_models.py +0 -0
  102. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/schemas/settings_models.py +0 -0
  103. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/__init__.py +0 -0
  104. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/chart_defaults.py +0 -0
  105. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/config_constants.py +0 -0
  106. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/kerykeion_settings.py +0 -0
  107. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/translation_strings.py +0 -0
  108. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/settings/translations.py +0 -0
  109. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/README.md +0 -0
  110. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast136/s136108s.se1 +0 -0
  111. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast136/s136199s.se1 +0 -0
  112. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast136/s136472s.se1 +0 -0
  113. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast28/se28978s.se1 +0 -0
  114. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast50/se50000s.se1 +0 -0
  115. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast90/se90377s.se1 +0 -0
  116. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/ast90/se90482s.se1 +0 -0
  117. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/seas_18.se1 +0 -0
  118. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/sweph/sefstars.txt +0 -0
  119. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/transits_time_range_factory.py +0 -0
  120. {kerykeion-5.1.5 → kerykeion-5.1.6}/kerykeion/utilities.py +0 -0
  121. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.14.0.md +0 -0
  122. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.16.0.md +0 -0
  123. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.17.0.md +0 -0
  124. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.19.0.md +0 -0
  125. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.21.0.md +0 -0
  126. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.22.0.md +0 -0
  127. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.23.0.md +0 -0
  128. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.24.0.md +0 -0
  129. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.25.0.md +0 -0
  130. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/V4.26.0.md +0 -0
  131. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/v5.0.0.md +0 -0
  132. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/v5.0.0a.md +0 -0
  133. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/v5.0.0b.md +0 -0
  134. {kerykeion-5.1.5 → kerykeion-5.1.6}/release_notes/v5.1.0.md +0 -0
  135. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/README.md +0 -0
  136. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/__init__.py +0 -0
  137. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/quality_check.py +0 -0
  138. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/regenerate_expected_aspects.py +0 -0
  139. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/regenerate_synastry_aspects.py +0 -0
  140. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/regenerate_synastry_from_test.py +0 -0
  141. {kerykeion-5.1.5 → kerykeion-5.1.6}/scripts/test_markdown_snippets.py +0 -0
  142. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/aspects.md +0 -0
  143. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/astrological_subject_factory.md +0 -0
  144. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/chart_data_factory.md +0 -0
  145. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/charts.md +0 -0
  146. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/composite_subject_factory.md +0 -0
  147. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/element_quality_distribution.md +0 -0
  148. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/ephemeris_data_factory.md +0 -0
  149. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/house_comparison.md +0 -0
  150. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/planetary_return_factory.md +0 -0
  151. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/relationship_score_factory.md +0 -0
  152. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/report.md +0 -0
  153. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/transits_time_range_factory.md +0 -0
  154. {kerykeion-5.1.5 → kerykeion-5.1.6}/site-docs/utilities.md +0 -0
  155. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/__init__.py +0 -0
  156. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/aspects/__init__.py +0 -0
  157. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/aspects/expected_natal_aspects.py +0 -0
  158. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/aspects/expected_synastry_aspects.py +0 -0
  159. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/aspects/test_natal_aspects.py +0 -0
  160. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/aspects/test_synastry_aspects.py +0 -0
  161. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/__init__.py +0 -0
  162. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/compare_svg_lines.py +0 -0
  163. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Albert Einstein - Natal Chart.svg +0 -0
  164. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Amitabh Bachchan - Natal Chart.svg +0 -0
  165. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Black and White Theme - Composite Chart.svg +0 -0
  166. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Composite Chart.svg +0 -0
  167. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Antonio Banderas - Natal Chart.svg +0 -0
  168. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Cristiano Ronaldo - Natal Chart.svg +0 -0
  169. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Hua Chenyu - Natal Chart.svg +0 -0
  170. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Jeanne Moreau - Natal Chart.svg +0 -0
  171. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Aspect Grid Only.svg +0 -0
  172. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Wheel Only.svg +0 -0
  173. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Natal Chart.svg +0 -0
  174. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Aspect Grid Only.svg +0 -0
  175. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Grid.svg +0 -0
  176. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - List.svg +0 -0
  177. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Wheel Only.svg +0 -0
  178. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Dark Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  179. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Dark Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  180. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Light Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  181. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Only - Natal Chart - Aspect Grid Only.svg +0 -0
  182. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  183. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Aspect Grid Transit - Transit Chart - Aspect Grid Only.svg +0 -0
  184. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Black and White Theme - DualReturnChart Chart - Solar Return.svg +0 -0
  185. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Black and White Theme - Natal Chart.svg +0 -0
  186. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Black and White Theme - Synastry Chart.svg +0 -0
  187. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - DTS - Synastry Chart.svg +0 -0
  188. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Dark High Contrast Theme - Natal Chart.svg +0 -0
  189. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Dark Theme - Natal Chart.svg +0 -0
  190. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Dark Theme External - Natal Chart.svg +0 -0
  191. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - DualReturnChart Chart - Lunar Return.svg +0 -0
  192. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - DualReturnChart Chart - Solar Return.svg +0 -0
  193. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - ExternalNatal - Natal Chart.svg +0 -0
  194. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Heliocentric - Natal Chart.svg +0 -0
  195. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - House System Morinus - Natal Chart.svg +0 -0
  196. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Light Theme - Natal Chart.svg +0 -0
  197. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Minified - Natal Chart.svg +0 -0
  198. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Natal Chart.svg +0 -0
  199. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - SCTWL - Synastry Chart.svg +0 -0
  200. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Topocentric - Natal Chart.svg +0 -0
  201. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Transparent Background - Natal Chart.svg +0 -0
  202. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - True Geocentric - Natal Chart.svg +0 -0
  203. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Wheel External Only - ExternalNatal Chart - Wheel Only.svg +0 -0
  204. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Wheel Only - Natal Chart - Wheel Only.svg +0 -0
  205. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Wheel Synastry Only - Synastry Chart - Wheel Only.svg +0 -0
  206. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon - Wheel Transit Only - Transit Chart - Wheel Only.svg +0 -0
  207. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon DeLuce - Natal Chart.svg +0 -0
  208. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Fagan-Bradley - Light Theme - Natal Chart - Wheel Only.svg +0 -0
  209. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Fagan-Bradley - Natal Chart.svg +0 -0
  210. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon J2000 - Natal Chart.svg +0 -0
  211. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Lahiri - Dark Theme - Natal Chart - Wheel Only.svg +0 -0
  212. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Lahiri - Natal Chart.svg +0 -0
  213. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Lunar Return - SingleReturnChart Chart.svg +0 -0
  214. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Solar Return - Black and White Theme - SingleReturnChart Chart.svg +0 -0
  215. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/John Lennon Solar Return - SingleReturnChart Chart.svg +0 -0
  216. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Kanye - Natal Chart.svg +0 -0
  217. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Mehmet Oz - Natal Chart.svg +0 -0
  218. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Mikhail Bulgakov - Natal Chart.svg +0 -0
  219. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/svg/Sophia Loren - Natal Chart.svg +0 -0
  220. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/test_charts.py +0 -0
  221. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/test_draw_planets.py +0 -0
  222. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/charts/test_lunar_phase_svg.py +0 -0
  223. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/settings/test_settings.py +0 -0
  224. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_all_active_points.py +0 -0
  225. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_astrological_subject.py +0 -0
  226. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_astrological_subject_jyotish.py +0 -0
  227. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_backward_compatibility.py +0 -0
  228. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_backword.py +0 -0
  229. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_chart_data_factory.py +0 -0
  230. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_chart_data_factory_complete.py +0 -0
  231. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_composite_subject_factory_complete.py +0 -0
  232. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_ephemeris_data.py +0 -0
  233. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_ephemeris_data_factory_complete.py +0 -0
  234. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_fetch_geonames.py +0 -0
  235. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_json_dump.py +0 -0
  236. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_planetary_return_factory_complete.py +0 -0
  237. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_relationship_score.py +0 -0
  238. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_relationship_score_factory_complete.py +0 -0
  239. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_report.py +0 -0
  240. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_transits_time_range_factory_complete.py +0 -0
  241. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_utc.py +0 -0
  242. {kerykeion-5.1.5 → kerykeion-5.1.6}/tests/test_utilities.py +0 -0
  243. {kerykeion-5.1.5 → kerykeion-5.1.6}/uv.lock +0 -0
  244. {kerykeion-5.1.5 → kerykeion-5.1.6}/workspace/README.md +0 -0
  245. {kerykeion-5.1.5 → kerykeion-5.1.6}/workspace/main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kerykeion
3
- Version: 5.1.5
3
+ Version: 5.1.6
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
@@ -1609,9 +1609,9 @@ class ChartDrawer:
1609
1609
 
1610
1610
  template_dict["bottom_left_4"] = f'{self._translate("perspective_type", "Perspective")}: {self._translate(self.second_obj.perspective_type.lower().replace(" ", "_"), self.second_obj.perspective_type)}' # type: ignore
1611
1611
 
1612
- # Moon phase section calculations - use first_obj for visualization
1613
- if self.first_obj.lunar_phase is not None:
1614
- template_dict["makeLunarPhase"] = makeLunarPhase(self.first_obj.lunar_phase["degrees_between_s_m"], self.geolat)
1612
+ # Moon phase section calculations - use transit subject data only
1613
+ if self.second_obj is not None and getattr(self.second_obj, "lunar_phase", None):
1614
+ template_dict["makeLunarPhase"] = makeLunarPhase(self.second_obj.lunar_phase["degrees_between_s_m"], self.geolat)
1615
1615
  else:
1616
1616
  template_dict["makeLunarPhase"] = ""
1617
1617
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kerykeion"
3
- version = "5.1.5"
3
+ version = "5.1.6"
4
4
  authors = [
5
5
  { name = "Giacomo Battaglia", email = "kerykeion.astrology@gmail.com" }
6
6
  ]
@@ -20,6 +20,7 @@ from pathlib import Path
20
20
  from kerykeion.composite_subject_factory import CompositeSubjectFactory
21
21
  from kerykeion.chart_data_factory import ChartDataFactory
22
22
  from kerykeion.charts.chart_drawer import ChartDrawer
23
+ from kerykeion.charts.charts_utils import makeLunarPhase
23
24
  from kerykeion.astrological_subject_factory import AstrologicalSubjectFactory
24
25
  from kerykeion.planetary_return_factory import PlanetaryReturnFactory
25
26
  from kerykeion.settings.config_constants import ALL_ACTIVE_POINTS
@@ -29,9 +30,42 @@ OUTPUT_DIR = Path(__file__).parent.parent / "tests" / "charts" / "svg"
29
30
  OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
30
31
  OUTPUT_DIR_STR = str(OUTPUT_DIR)
31
32
 
33
+
34
+ def regenerate_lunar_phase_reference_sheet() -> None:
35
+ """Regenerate the reference SVG used by TestLunarPhaseSVG."""
36
+ phase_angles = (0, 45, 90, 135, 180, 225, 270, 315)
37
+ icon_groups: list[str] = []
38
+
39
+ for index, angle in enumerate(phase_angles):
40
+ icon_svg = makeLunarPhase(angle, 0.0)
41
+ unique_clip_id = f"moonPhaseCutOffCircle{index}"
42
+ icon_svg = icon_svg.replace("moonPhaseCutOffCircle", unique_clip_id)
43
+
44
+ icon_lines = icon_svg.splitlines()
45
+ translated_block = [f' <g transform="translate({index * 40},0)">']
46
+ translated_block.extend(f" {line}" for line in icon_lines)
47
+ translated_block.append(" </g>")
48
+ icon_groups.extend(translated_block)
49
+
50
+ svg_lines = [
51
+ '<svg xmlns="http://www.w3.org/2000/svg" width="320" height="40" viewBox="0 0 320 40">',
52
+ " <style>",
53
+ " :root {",
54
+ " --kerykeion-chart-color-lunar-phase-0: #000000;",
55
+ " --kerykeion-chart-color-lunar-phase-1: #ffffff;",
56
+ " }",
57
+ " </style>",
58
+ ]
59
+ svg_lines.extend(icon_groups)
60
+ svg_lines.append("</svg>")
61
+
62
+ (OUTPUT_DIR / "Moon Phases.svg").write_text("\n".join(svg_lines), encoding="utf-8")
63
+
32
64
  first = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB", suppress_geonames_warning=True)
33
65
  second = AstrologicalSubjectFactory.from_birth_data("Paul McCartney", 1942, 6, 18, 15, 30, "Liverpool", "GB", suppress_geonames_warning=True)
34
66
 
67
+ regenerate_lunar_phase_reference_sheet()
68
+
35
69
  # Internal Natal Chart
36
70
  natal_chart_data = ChartDataFactory.create_natal_chart_data(first)
37
71
  internal_natal_chart = ChartDrawer(natal_chart_data)
@@ -224,8 +224,8 @@
224
224
  <circle cx='20' cy='10' r='10' />
225
225
  </clipPath>
226
226
  </defs>
227
- <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' />
228
- <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 2.9702 10.0000 0 0 1 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' clip-path='url(#moonPhaseCutOffCircle)' />
227
+ <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' />
228
+ <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 6.2208 10.0000 0 0 0 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' clip-path='url(#moonPhaseCutOffCircle)' />
229
229
  <circle cx='20' cy='10' r='10' style='fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5' />
230
230
  </g>
231
231
  </g>
@@ -236,8 +236,8 @@
236
236
  <circle cx='20' cy='10' r='10' />
237
237
  </clipPath>
238
238
  </defs>
239
- <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' />
240
- <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 2.9702 10.0000 0 0 1 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' clip-path='url(#moonPhaseCutOffCircle)' />
239
+ <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' />
240
+ <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 6.2208 10.0000 0 0 0 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' clip-path='url(#moonPhaseCutOffCircle)' />
241
241
  <circle cx='20' cy='10' r='10' style='fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5' />
242
242
  </g>
243
243
  </g>
@@ -189,8 +189,8 @@
189
189
  <circle cx='20' cy='10' r='10' />
190
190
  </clipPath>
191
191
  </defs>
192
- <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' />
193
- <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 2.9702 10.0000 0 0 1 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' clip-path='url(#moonPhaseCutOffCircle)' />
192
+ <circle cx='20' cy='10' r='10' style='fill: var(--kerykeion-chart-color-lunar-phase-1)' />
193
+ <path d='M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 6.2208 10.0000 0 0 0 20.0000 0.0000 Z' style='fill: var(--kerykeion-chart-color-lunar-phase-0)' clip-path='url(#moonPhaseCutOffCircle)' />
194
194
  <circle cx='20' cy='10' r='10' style='fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5' />
195
195
  </g>
196
196
  </g>
@@ -12,7 +12,7 @@
12
12
  <circle cx="20" cy="10" r="10" />
13
13
  </clipPath>
14
14
  </defs>
15
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
15
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
16
16
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
17
17
  </g>
18
18
  </g>
@@ -23,8 +23,8 @@
23
23
  <circle cx="20" cy="10" r="10" />
24
24
  </clipPath>
25
25
  </defs>
26
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
27
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 7.0711 10.0000 0 0 1 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle1)" />
26
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
27
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 7.0711 10.0000 0 0 0 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle1)" />
28
28
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
29
29
  </g>
30
30
  </g>
@@ -35,8 +35,8 @@
35
35
  <circle cx="20" cy="10" r="10" />
36
36
  </clipPath>
37
37
  </defs>
38
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
39
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 L 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle2)" />
38
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
39
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 L 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle2)" />
40
40
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
41
41
  </g>
42
42
  </g>
@@ -47,8 +47,8 @@
47
47
  <circle cx="20" cy="10" r="10" />
48
48
  </clipPath>
49
49
  </defs>
50
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
51
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 7.0711 10.0000 0 0 0 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle3)" />
50
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
51
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 7.0711 10.0000 0 0 1 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle3)" />
52
52
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
53
53
  </g>
54
54
  </g>
@@ -59,7 +59,7 @@
59
59
  <circle cx="20" cy="10" r="10" />
60
60
  </clipPath>
61
61
  </defs>
62
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
62
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
63
63
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
64
64
  </g>
65
65
  </g>
@@ -70,8 +70,8 @@
70
70
  <circle cx="20" cy="10" r="10" />
71
71
  </clipPath>
72
72
  </defs>
73
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
74
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 7.0711 10.0000 0 0 1 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle5)" />
73
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
74
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 7.0711 10.0000 0 0 0 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle5)" />
75
75
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
76
76
  </g>
77
77
  </g>
@@ -82,8 +82,8 @@
82
82
  <circle cx="20" cy="10" r="10" />
83
83
  </clipPath>
84
84
  </defs>
85
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
86
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 L 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle6)" />
85
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
86
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 L 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle6)" />
87
87
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
88
88
  </g>
89
89
  </g>
@@ -94,9 +94,9 @@
94
94
  <circle cx="20" cy="10" r="10" />
95
95
  </clipPath>
96
96
  </defs>
97
- <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" />
98
- <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 0 20.0000 20.0000 A 7.0711 10.0000 0 0 0 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" clip-path="url(#moonPhaseCutOffCircle7)" />
97
+ <circle cx="20" cy="10" r="10" style="fill: var(--kerykeion-chart-color-lunar-phase-1)" />
98
+ <path d="M 20.0000 0.0000 A 10.0000 10.0000 0 0 1 20.0000 20.0000 A 7.0711 10.0000 0 0 1 20.0000 0.0000 Z" style="fill: var(--kerykeion-chart-color-lunar-phase-0)" clip-path="url(#moonPhaseCutOffCircle7)" />
99
99
  <circle cx="20" cy="10" r="10" style="fill: none; stroke: var(--kerykeion-chart-color-lunar-phase-0); stroke-width: 0.5px; stroke-opacity: 0.5" />
100
100
  </g>
101
101
  </g>
102
- </svg>
102
+ </svg>
@@ -10,6 +10,7 @@ from kerykeion.charts.chart_drawer import ChartDrawer
10
10
  from kerykeion.astrological_subject_factory import AstrologicalSubjectFactory
11
11
  from kerykeion.chart_data_factory import ChartDataFactory
12
12
  from kerykeion.composite_subject_factory import CompositeSubjectFactory
13
+ from kerykeion.charts.charts_utils import makeLunarPhase
13
14
 
14
15
 
15
16
  class TestChartDrawer:
@@ -304,6 +305,33 @@ class TestChartDrawer:
304
305
  assert chart.chart_data is not None
305
306
  assert hasattr(chart, 'second_obj')
306
307
 
308
+ def test_transit_chart_uses_transit_lunar_phase(self):
309
+ """Transit charts should render the lunar phase of the transiting subject."""
310
+ transit_data = ChartDataFactory.create_transit_chart_data(self.subject, self.subject2)
311
+ chart = ChartDrawer(transit_data)
312
+ template_dict = chart._create_template_dictionary()
313
+
314
+ assert chart.second_obj is not None
315
+ transit_phase = chart.second_obj.lunar_phase
316
+ expected_svg = makeLunarPhase(transit_phase["degrees_between_s_m"], chart.geolat)
317
+
318
+ assert template_dict["makeLunarPhase"] == expected_svg
319
+
320
+ natal_phase = chart.first_obj.lunar_phase
321
+ if natal_phase is not None and natal_phase["degrees_between_s_m"] != transit_phase["degrees_between_s_m"]:
322
+ unexpected_svg = makeLunarPhase(natal_phase["degrees_between_s_m"], chart.geolat)
323
+ assert template_dict["makeLunarPhase"] != unexpected_svg
324
+
325
+ def test_transit_chart_without_transit_phase_shows_blank(self):
326
+ """If transit subject lacks lunar phase, the lunar phase icon is hidden."""
327
+ transit_data = ChartDataFactory.create_transit_chart_data(self.subject, self.subject2)
328
+ chart = ChartDrawer(transit_data)
329
+ assert chart.second_obj is not None
330
+ chart.second_obj.lunar_phase = None # type: ignore[attr-defined]
331
+
332
+ template_dict = chart._create_template_dictionary()
333
+ assert template_dict["makeLunarPhase"] == ""
334
+
307
335
  def test_synastry_chart_drawer(self):
308
336
  """Test chart drawer with synastry chart data."""
309
337
  synastry_data = ChartDataFactory.create_synastry_chart_data(self.subject, self.subject2)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes