kerykeion 5.0.1__tar.gz → 5.0.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 (249) hide show
  1. {kerykeion-5.0.1 → kerykeion-5.0.2}/PKG-INFO +106 -4
  2. {kerykeion-5.0.1 → kerykeion-5.0.2}/README.md +105 -3
  3. {kerykeion-5.0.1 → kerykeion-5.0.2}/TODO.md +2 -1
  4. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/chart_drawer.py +8 -4
  5. {kerykeion-5.0.1 → kerykeion-5.0.2}/pyproject.toml +1 -1
  6. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/regenerate_test_charts.py +16 -0
  7. kerykeion-5.0.2/tests/charts/svg/John Lennon - DualReturnChart Chart - Lunar Return.svg +863 -0
  8. kerykeion-5.0.2/tests/charts/svg/John Lennon Lunar Return - SingleReturnChart Chart.svg +863 -0
  9. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/test_charts.py +46 -0
  10. kerykeion-5.0.1/.uv-cache/.gitignore +0 -1
  11. kerykeion-5.0.1/.uv-cache/.lock +0 -0
  12. kerykeion-5.0.1/.uv-cache/CACHEDIR.TAG +0 -1
  13. kerykeion-5.0.1/.uv-cache/interpreter-v4/7e11d242fb84b9e8/66d9843502616e2c.msgpack +0 -0
  14. kerykeion-5.0.1/.uv-cache/sdists-v9/.git +0 -0
  15. kerykeion-5.0.1/.uv-cache/sdists-v9/.gitignore +0 -0
  16. {kerykeion-5.0.1 → kerykeion-5.0.2}/.coveragerc +0 -0
  17. {kerykeion-5.0.1 → kerykeion-5.0.2}/.github/FUNDING.yml +0 -0
  18. {kerykeion-5.0.1 → kerykeion-5.0.2}/.gitignore +0 -0
  19. {kerykeion-5.0.1 → kerykeion-5.0.2}/CHANGELOG.md +0 -0
  20. {kerykeion-5.0.1 → kerykeion-5.0.2}/DEVELOPMENT.md +0 -0
  21. {kerykeion-5.0.1 → kerykeion-5.0.2}/LICENSE +0 -0
  22. {kerykeion-5.0.1 → kerykeion-5.0.2}/MANIFEST.in +0 -0
  23. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/index.html +0 -0
  24. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/aspects/aspects_utils.html +0 -0
  25. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/aspects/natal_aspects.html +0 -0
  26. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/aspects/synastry_aspects.html +0 -0
  27. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/aspects/transits_time_range.html +0 -0
  28. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/aspects.html +0 -0
  29. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/astrological_subject.html +0 -0
  30. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/charts/charts_utils.html +0 -0
  31. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/charts/draw_planets.html +0 -0
  32. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/charts/kerykeion_chart_svg.html +0 -0
  33. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/charts.html +0 -0
  34. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/composite_subject_factory.html +0 -0
  35. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/enums.html +0 -0
  36. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/ephemeris_data.html +0 -0
  37. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/fetch_geonames.html +0 -0
  38. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types/chart_types.html +0 -0
  39. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types/kerykeion_exception.html +0 -0
  40. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types/kr_literals.html +0 -0
  41. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types/kr_models.html +0 -0
  42. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types/settings_models.html +0 -0
  43. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/kr_types.html +0 -0
  44. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/relationship_score/relationship_score.html +0 -0
  45. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/relationship_score/relationship_score_factory.html +0 -0
  46. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/relationship_score.html +0 -0
  47. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/report.html +0 -0
  48. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/settings/config_constants.html +0 -0
  49. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/settings/kerykeion_settings.html +0 -0
  50. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/settings.html +0 -0
  51. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/transits_time_range.html +0 -0
  52. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion/utilities.html +0 -0
  53. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/kerykeion.html +0 -0
  54. {kerykeion-5.0.1 → kerykeion-5.0.2}/docs/search.js +0 -0
  55. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/aspects_synastry.py +0 -0
  56. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/composite_report_example.py +0 -0
  57. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/current_time_report.py +0 -0
  58. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/dual_return_report_example.py +0 -0
  59. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/natal_report_example.py +0 -0
  60. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/planetary_return.py +0 -0
  61. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/quickstart_natal_chart.py +0 -0
  62. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/solar_return_report_example.py +0 -0
  63. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/subject_report_example.py +0 -0
  64. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/synastry_report_example.py +0 -0
  65. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/transit_report_example.py +0 -0
  66. {kerykeion-5.0.1 → kerykeion-5.0.2}/examples/transits_time_range.py +0 -0
  67. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/__init__.py +0 -0
  68. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/aspects/__init__.py +0 -0
  69. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/aspects/aspects_factory.py +0 -0
  70. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/aspects/aspects_utils.py +0 -0
  71. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/astrological_subject_factory.py +0 -0
  72. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/backword.py +0 -0
  73. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/chart_data_factory.py +0 -0
  74. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/__init__.py +0 -0
  75. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/charts_utils.py +0 -0
  76. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/draw_planets.py +0 -0
  77. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/templates/aspect_grid_only.xml +0 -0
  78. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/templates/chart.xml +0 -0
  79. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/templates/wheel_only.xml +0 -0
  80. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/black-and-white.css +0 -0
  81. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/classic.css +0 -0
  82. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/dark-high-contrast.css +0 -0
  83. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/dark.css +0 -0
  84. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/light.css +0 -0
  85. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/charts/themes/strawberry.css +0 -0
  86. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/composite_subject_factory.py +0 -0
  87. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/ephemeris_data_factory.py +0 -0
  88. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/fetch_geonames.py +0 -0
  89. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/house_comparison/__init__.py +0 -0
  90. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/house_comparison/house_comparison_factory.py +0 -0
  91. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/house_comparison/house_comparison_utils.py +0 -0
  92. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/__init__.py +0 -0
  93. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/chart_template_model.py +0 -0
  94. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/kerykeion_exception.py +0 -0
  95. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/kr_literals.py +0 -0
  96. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/kr_models.py +0 -0
  97. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/kr_types/settings_models.py +0 -0
  98. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/planetary_return_factory.py +0 -0
  99. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/relationship_score_factory.py +0 -0
  100. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/report.py +0 -0
  101. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/__init__.py +0 -0
  102. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/chart_template_model.py +0 -0
  103. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/kerykeion_exception.py +0 -0
  104. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/kr_literals.py +0 -0
  105. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/kr_models.py +0 -0
  106. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/schemas/settings_models.py +0 -0
  107. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/__init__.py +0 -0
  108. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/chart_defaults.py +0 -0
  109. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/config_constants.py +0 -0
  110. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/kerykeion_settings.py +0 -0
  111. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/translation_strings.py +0 -0
  112. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/settings/translations.py +0 -0
  113. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/README.md +0 -0
  114. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast136/s136108s.se1 +0 -0
  115. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast136/s136199s.se1 +0 -0
  116. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast136/s136472s.se1 +0 -0
  117. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast28/se28978s.se1 +0 -0
  118. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast50/se50000s.se1 +0 -0
  119. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast90/se90377s.se1 +0 -0
  120. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/ast90/se90482s.se1 +0 -0
  121. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/seas_18.se1 +0 -0
  122. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/sweph/sefstars.txt +0 -0
  123. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/transits_time_range_factory.py +0 -0
  124. {kerykeion-5.0.1 → kerykeion-5.0.2}/kerykeion/utilities.py +0 -0
  125. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.14.0.md +0 -0
  126. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.16.0.md +0 -0
  127. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.17.0.md +0 -0
  128. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.19.0.md +0 -0
  129. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.21.0.md +0 -0
  130. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.22.0.md +0 -0
  131. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.23.0.md +0 -0
  132. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.24.0.md +0 -0
  133. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.25.0.md +0 -0
  134. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/V4.26.0.md +0 -0
  135. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/v5.0.0.md +0 -0
  136. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/v5.0.0a.md +0 -0
  137. {kerykeion-5.0.1 → kerykeion-5.0.2}/release_notes/v5.0.0b.md +0 -0
  138. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/README.md +0 -0
  139. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/__init__.py +0 -0
  140. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/quality_check.py +0 -0
  141. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/regenerate_expected_aspects.py +0 -0
  142. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/regenerate_synastry_aspects.py +0 -0
  143. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/regenerate_synastry_from_test.py +0 -0
  144. {kerykeion-5.0.1 → kerykeion-5.0.2}/scripts/test_markdown_snippets.py +0 -0
  145. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/aspects.md +0 -0
  146. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/astrological_subject_factory.md +0 -0
  147. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/chart_data_factory.md +0 -0
  148. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/charts.md +0 -0
  149. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/composite_subject_factory.md +0 -0
  150. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/element_quality_distribution.md +0 -0
  151. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/ephemeris_data_factory.md +0 -0
  152. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/house_comparison.md +0 -0
  153. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/planetary_return_factory.md +0 -0
  154. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/relationship_score_factory.md +0 -0
  155. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/report.md +0 -0
  156. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/transits_time_range_factory.md +0 -0
  157. {kerykeion-5.0.1 → kerykeion-5.0.2}/site-docs/utilities.md +0 -0
  158. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/__init__.py +0 -0
  159. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/aspects/__init__.py +0 -0
  160. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/aspects/expected_natal_aspects.py +0 -0
  161. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/aspects/expected_synastry_aspects.py +0 -0
  162. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/aspects/test_natal_aspects.py +0 -0
  163. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/aspects/test_synastry_aspects.py +0 -0
  164. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/__init__.py +0 -0
  165. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/compare_svg_lines.py +0 -0
  166. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Albert Einstein - Natal Chart.svg +0 -0
  167. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Amitabh Bachchan - Natal Chart.svg +0 -0
  168. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Black and White Theme - Composite Chart.svg +0 -0
  169. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Composite Chart.svg +0 -0
  170. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Antonio Banderas - Natal Chart.svg +0 -0
  171. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Cristiano Ronaldo - Natal Chart.svg +0 -0
  172. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Hua Chenyu - Natal Chart.svg +0 -0
  173. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Jeanne Moreau - Natal Chart.svg +0 -0
  174. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Aspect Grid Only.svg +0 -0
  175. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Wheel Only.svg +0 -0
  176. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Natal Chart.svg +0 -0
  177. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Aspect Grid Only.svg +0 -0
  178. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Grid.svg +0 -0
  179. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - List.svg +0 -0
  180. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Wheel Only.svg +0 -0
  181. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Dark Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  182. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Dark Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  183. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Light Theme - Natal Chart - Aspect Grid Only.svg +0 -0
  184. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Only - Natal Chart - Aspect Grid Only.svg +0 -0
  185. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
  186. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Aspect Grid Transit - Transit Chart - Aspect Grid Only.svg +0 -0
  187. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Black and White Theme - DualReturnChart Chart - Solar Return.svg +0 -0
  188. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Black and White Theme - Natal Chart.svg +0 -0
  189. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Black and White Theme - Synastry Chart.svg +0 -0
  190. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Black and White Theme - Transit Chart.svg +0 -0
  191. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - DTS - Synastry Chart.svg +0 -0
  192. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Dark High Contrast Theme - Natal Chart.svg +0 -0
  193. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Dark Theme - Natal Chart.svg +0 -0
  194. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Dark Theme External - Natal Chart.svg +0 -0
  195. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - DualReturnChart Chart - Solar Return.svg +0 -0
  196. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - ExternalNatal - Natal Chart.svg +0 -0
  197. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Heliocentric - Natal Chart.svg +0 -0
  198. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - House System Morinus - Natal Chart.svg +0 -0
  199. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Light Theme - Natal Chart.svg +0 -0
  200. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Minified - Natal Chart.svg +0 -0
  201. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Natal Chart.svg +0 -0
  202. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - SCTWL - Synastry Chart.svg +0 -0
  203. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Synastry Chart.svg +0 -0
  204. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - TCWTG - Transit Chart.svg +0 -0
  205. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Topocentric - Natal Chart.svg +0 -0
  206. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Transit Chart.svg +0 -0
  207. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Transparent Background - Natal Chart.svg +0 -0
  208. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - True Geocentric - Natal Chart.svg +0 -0
  209. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Wheel External Only - ExternalNatal Chart - Wheel Only.svg +0 -0
  210. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Wheel Only - Natal Chart - Wheel Only.svg +0 -0
  211. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Wheel Synastry Only - Synastry Chart - Wheel Only.svg +0 -0
  212. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon - Wheel Transit Only - Transit Chart - Wheel Only.svg +0 -0
  213. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon DeLuce - Natal Chart.svg +0 -0
  214. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Fagan-Bradley - Light Theme - Natal Chart - Wheel Only.svg +0 -0
  215. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Fagan-Bradley - Natal Chart.svg +0 -0
  216. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon J2000 - Natal Chart.svg +0 -0
  217. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Lahiri - Dark Theme - Natal Chart - Wheel Only.svg +0 -0
  218. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Lahiri - Natal Chart.svg +0 -0
  219. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Solar Return - Black and White Theme - SingleReturnChart Chart.svg +0 -0
  220. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/John Lennon Solar Return - SingleReturnChart Chart.svg +0 -0
  221. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Kanye - Natal Chart.svg +0 -0
  222. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Mehmet Oz - Natal Chart.svg +0 -0
  223. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Mikhail Bulgakov - Natal Chart.svg +0 -0
  224. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/svg/Sophia Loren - Natal Chart.svg +0 -0
  225. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/charts/test_draw_planets.py +0 -0
  226. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/settings/test_settings.py +0 -0
  227. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_all_active_points.py +0 -0
  228. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_astrological_subject.py +0 -0
  229. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_astrological_subject_jyotish.py +0 -0
  230. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_backward_compatibility.py +0 -0
  231. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_backword.py +0 -0
  232. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_chart_data_factory.py +0 -0
  233. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_chart_data_factory_complete.py +0 -0
  234. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_chart_drawer_complete.py +0 -0
  235. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_composite_subject_factory_complete.py +0 -0
  236. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_ephemeris_data.py +0 -0
  237. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_ephemeris_data_factory_complete.py +0 -0
  238. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_fetch_geonames.py +0 -0
  239. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_json_dump.py +0 -0
  240. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_planetary_return_factory_complete.py +0 -0
  241. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_relationship_score.py +0 -0
  242. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_relationship_score_factory_complete.py +0 -0
  243. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_report.py +0 -0
  244. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_transits_time_range_factory_complete.py +0 -0
  245. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_utc.py +0 -0
  246. {kerykeion-5.0.1 → kerykeion-5.0.2}/tests/test_utilities.py +0 -0
  247. {kerykeion-5.0.1 → kerykeion-5.0.2}/uv.lock +0 -0
  248. {kerykeion-5.0.1 → kerykeion-5.0.2}/workspace/README.md +0 -0
  249. {kerykeion-5.0.1 → kerykeion-5.0.2}/workspace/main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kerykeion
3
- Version: 5.0.1
3
+ Version: 5.0.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
@@ -92,6 +92,9 @@ Maintaining this project requires substantial time and effort. The Astrologer AP
92
92
  - [External Birth Chart](#external-birth-chart)
93
93
  - [Synastry Chart](#synastry-chart)
94
94
  - [Transit Chart](#transit-chart)
95
+ - [Solar Return Chart (Dual Wheel)](#solar-return-chart-dual-wheel)
96
+ - [Solar Return Chart (Single Wheel)](#solar-return-chart-single-wheel)
97
+ - [Lunar Return Chart](#lunar-return-chart)
95
98
  - [Composite Chart](#composite-chart)
96
99
  - [Wheel Only Charts](#wheel-only-charts)
97
100
  - [Birth Chart](#birth-chart-1)
@@ -99,6 +102,7 @@ Maintaining this project requires substantial time and effort. The Astrologer AP
99
102
  - [Synastry Chart](#synastry-chart-1)
100
103
  - [Change the Output Directory](#change-the-output-directory)
101
104
  - [Change Language](#change-language)
105
+ - [Minified SVG](#minified-svg)
102
106
  - [SVG without CSS Variables](#svg-without-css-variables)
103
107
  - [Grid Only SVG](#grid-only-svg)
104
108
  - [Report Generator](#report-generator)
@@ -224,7 +228,7 @@ from kerykeion.charts.chart_drawer import ChartDrawer
224
228
  birth_chart = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
225
229
 
226
230
  # Step 2: Pre-compute chart data for external natal chart
227
- chart_data = ChartDataFactory.create_external_natal_chart_data(birth_chart)
231
+ chart_data = ChartDataFactory.create_natal_chart_data(birth_chart)
228
232
 
229
233
  # Step 3: Create visualization
230
234
  birth_chart_svg = ChartDrawer(chart_data=chart_data)
@@ -275,6 +279,104 @@ transit_chart.save_svg()
275
279
 
276
280
  ![John Lennon Transit Chart](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20Transit%20Chart.svg)
277
281
 
282
+ ### Solar Return Chart (Dual Wheel)
283
+
284
+ ```python
285
+ from kerykeion import AstrologicalSubjectFactory
286
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
287
+ from kerykeion.chart_data_factory import ChartDataFactory
288
+ from kerykeion.charts.chart_drawer import ChartDrawer
289
+
290
+ # Step 1: Create natal subject
291
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
292
+
293
+ # Step 2: Calculate Solar Return subject (offline example with manual coordinates)
294
+ return_factory = PlanetaryReturnFactory(
295
+ john,
296
+ lng=-2.9833,
297
+ lat=53.4000,
298
+ tz_str="Europe/London",
299
+ online=False
300
+ )
301
+ solar_return_subject = return_factory.next_return_from_year(1964, "Solar")
302
+
303
+ # Step 3: Pre-compute return chart data (dual wheel: natal + solar return)
304
+ chart_data = ChartDataFactory.create_return_chart_data(john, solar_return_subject)
305
+
306
+ # Step 4: Create visualization
307
+ solar_return_chart = ChartDrawer(chart_data=chart_data)
308
+ solar_return_chart.save_svg()
309
+ ```
310
+
311
+ ![John Lennon Solar Return Chart (Dual Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20DualReturnChart%20Chart%20-%20Solar%20Return.svg)
312
+
313
+ ### Solar Return Chart (Single Wheel)
314
+
315
+ ```python
316
+ from kerykeion import AstrologicalSubjectFactory
317
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
318
+ from kerykeion.chart_data_factory import ChartDataFactory
319
+ from kerykeion.charts.chart_drawer import ChartDrawer
320
+
321
+ # Step 1: Create natal subject
322
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
323
+
324
+ # Step 2: Calculate Solar Return subject (offline example with manual coordinates)
325
+ return_factory = PlanetaryReturnFactory(
326
+ john,
327
+ lng=-2.9833,
328
+ lat=53.4000,
329
+ tz_str="Europe/London",
330
+ online=False
331
+ )
332
+ solar_return_subject = return_factory.next_return_from_year(1964, "Solar")
333
+
334
+ # Step 3: Build a single-wheel return chart
335
+ chart_data = ChartDataFactory.create_single_wheel_return_chart_data(solar_return_subject)
336
+
337
+ # Step 4: Create visualization
338
+ single_wheel_chart = ChartDrawer(chart_data=chart_data)
339
+ single_wheel_chart.save_svg()
340
+ ```
341
+
342
+ ![John Lennon Solar Return Chart (Single Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20Solar%20Return%20-%20SingleReturnChart%20Chart.svg)
343
+
344
+ ### Lunar Return Chart
345
+
346
+ ```python
347
+ from kerykeion import AstrologicalSubjectFactory
348
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
349
+ from kerykeion.chart_data_factory import ChartDataFactory
350
+ from kerykeion.charts.chart_drawer import ChartDrawer
351
+
352
+ # Step 1: Create natal subject
353
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
354
+
355
+ # Step 2: Calculate Lunar Return subject
356
+ return_factory = PlanetaryReturnFactory(
357
+ john,
358
+ lng=-2.9833,
359
+ lat=53.4000,
360
+ tz_str="Europe/London",
361
+ online=False
362
+ )
363
+ lunar_return_subject = return_factory.next_return_from_year(1964, "Lunar")
364
+
365
+ # Step 3: Build a dual wheel (natal + lunar return)
366
+ lunar_return_chart_data = ChartDataFactory.create_return_chart_data(john, lunar_return_subject)
367
+ dual_wheel_chart = ChartDrawer(chart_data=lunar_return_chart_data)
368
+ dual_wheel_chart.save_svg()
369
+
370
+ # Optional: create a single-wheel lunar return
371
+ single_wheel_data = ChartDataFactory.create_single_wheel_return_chart_data(lunar_return_subject)
372
+ single_wheel_chart = ChartDrawer(chart_data=single_wheel_data)
373
+ single_wheel_chart.save_svg()
374
+ ```
375
+
376
+ ![John Lennon Lunar Return Chart (Dual Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20DualReturnChart%20Chart%20-%20Lunar%20Return.svg)
377
+
378
+ ![John Lennon Lunar Return Chart (Single Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20Lunar%20Return%20-%20SingleReturnChart%20Chart.svg)
379
+
278
380
  ### Composite Chart
279
381
 
280
382
  ```python
@@ -336,7 +438,7 @@ from kerykeion.charts.chart_drawer import ChartDrawer
336
438
  birth_chart = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
337
439
 
338
440
  # Step 2: Pre-compute external natal chart data
339
- chart_data = ChartDataFactory.create_external_natal_chart_data(birth_chart)
441
+ chart_data = ChartDataFactory.create_natal_chart_data(birth_chart)
340
442
 
341
443
  # Step 3: Create visualization
342
444
  birth_chart_svg = ChartDrawer(chart_data=chart_data)
@@ -411,6 +513,7 @@ birth_chart_svg = ChartDrawer(
411
513
  chart_language="IT" # Change to Italian
412
514
  )
413
515
  birth_chart_svg.save_svg()
516
+ ```
414
517
 
415
518
  You can also provide custom labels (or introduce a brand-new language) by passing
416
519
  a dictionary to `language_pack`. Only the keys you supply are merged on top of the
@@ -430,7 +533,6 @@ birth_chart_svg = ChartDrawer(
430
533
  language_pack=custom_labels["PT"],
431
534
  )
432
535
  ```
433
- ```
434
536
 
435
537
  More details [here](https://www.kerykeion.net/docs/chart-language).
436
538
 
@@ -52,6 +52,9 @@ Maintaining this project requires substantial time and effort. The Astrologer AP
52
52
  - [External Birth Chart](#external-birth-chart)
53
53
  - [Synastry Chart](#synastry-chart)
54
54
  - [Transit Chart](#transit-chart)
55
+ - [Solar Return Chart (Dual Wheel)](#solar-return-chart-dual-wheel)
56
+ - [Solar Return Chart (Single Wheel)](#solar-return-chart-single-wheel)
57
+ - [Lunar Return Chart](#lunar-return-chart)
55
58
  - [Composite Chart](#composite-chart)
56
59
  - [Wheel Only Charts](#wheel-only-charts)
57
60
  - [Birth Chart](#birth-chart-1)
@@ -59,6 +62,7 @@ Maintaining this project requires substantial time and effort. The Astrologer AP
59
62
  - [Synastry Chart](#synastry-chart-1)
60
63
  - [Change the Output Directory](#change-the-output-directory)
61
64
  - [Change Language](#change-language)
65
+ - [Minified SVG](#minified-svg)
62
66
  - [SVG without CSS Variables](#svg-without-css-variables)
63
67
  - [Grid Only SVG](#grid-only-svg)
64
68
  - [Report Generator](#report-generator)
@@ -184,7 +188,7 @@ from kerykeion.charts.chart_drawer import ChartDrawer
184
188
  birth_chart = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
185
189
 
186
190
  # Step 2: Pre-compute chart data for external natal chart
187
- chart_data = ChartDataFactory.create_external_natal_chart_data(birth_chart)
191
+ chart_data = ChartDataFactory.create_natal_chart_data(birth_chart)
188
192
 
189
193
  # Step 3: Create visualization
190
194
  birth_chart_svg = ChartDrawer(chart_data=chart_data)
@@ -235,6 +239,104 @@ transit_chart.save_svg()
235
239
 
236
240
  ![John Lennon Transit Chart](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20Transit%20Chart.svg)
237
241
 
242
+ ### Solar Return Chart (Dual Wheel)
243
+
244
+ ```python
245
+ from kerykeion import AstrologicalSubjectFactory
246
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
247
+ from kerykeion.chart_data_factory import ChartDataFactory
248
+ from kerykeion.charts.chart_drawer import ChartDrawer
249
+
250
+ # Step 1: Create natal subject
251
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
252
+
253
+ # Step 2: Calculate Solar Return subject (offline example with manual coordinates)
254
+ return_factory = PlanetaryReturnFactory(
255
+ john,
256
+ lng=-2.9833,
257
+ lat=53.4000,
258
+ tz_str="Europe/London",
259
+ online=False
260
+ )
261
+ solar_return_subject = return_factory.next_return_from_year(1964, "Solar")
262
+
263
+ # Step 3: Pre-compute return chart data (dual wheel: natal + solar return)
264
+ chart_data = ChartDataFactory.create_return_chart_data(john, solar_return_subject)
265
+
266
+ # Step 4: Create visualization
267
+ solar_return_chart = ChartDrawer(chart_data=chart_data)
268
+ solar_return_chart.save_svg()
269
+ ```
270
+
271
+ ![John Lennon Solar Return Chart (Dual Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20DualReturnChart%20Chart%20-%20Solar%20Return.svg)
272
+
273
+ ### Solar Return Chart (Single Wheel)
274
+
275
+ ```python
276
+ from kerykeion import AstrologicalSubjectFactory
277
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
278
+ from kerykeion.chart_data_factory import ChartDataFactory
279
+ from kerykeion.charts.chart_drawer import ChartDrawer
280
+
281
+ # Step 1: Create natal subject
282
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
283
+
284
+ # Step 2: Calculate Solar Return subject (offline example with manual coordinates)
285
+ return_factory = PlanetaryReturnFactory(
286
+ john,
287
+ lng=-2.9833,
288
+ lat=53.4000,
289
+ tz_str="Europe/London",
290
+ online=False
291
+ )
292
+ solar_return_subject = return_factory.next_return_from_year(1964, "Solar")
293
+
294
+ # Step 3: Build a single-wheel return chart
295
+ chart_data = ChartDataFactory.create_single_wheel_return_chart_data(solar_return_subject)
296
+
297
+ # Step 4: Create visualization
298
+ single_wheel_chart = ChartDrawer(chart_data=chart_data)
299
+ single_wheel_chart.save_svg()
300
+ ```
301
+
302
+ ![John Lennon Solar Return Chart (Single Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20Solar%20Return%20-%20SingleReturnChart%20Chart.svg)
303
+
304
+ ### Lunar Return Chart
305
+
306
+ ```python
307
+ from kerykeion import AstrologicalSubjectFactory
308
+ from kerykeion.planetary_return_factory import PlanetaryReturnFactory
309
+ from kerykeion.chart_data_factory import ChartDataFactory
310
+ from kerykeion.charts.chart_drawer import ChartDrawer
311
+
312
+ # Step 1: Create natal subject
313
+ john = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
314
+
315
+ # Step 2: Calculate Lunar Return subject
316
+ return_factory = PlanetaryReturnFactory(
317
+ john,
318
+ lng=-2.9833,
319
+ lat=53.4000,
320
+ tz_str="Europe/London",
321
+ online=False
322
+ )
323
+ lunar_return_subject = return_factory.next_return_from_year(1964, "Lunar")
324
+
325
+ # Step 3: Build a dual wheel (natal + lunar return)
326
+ lunar_return_chart_data = ChartDataFactory.create_return_chart_data(john, lunar_return_subject)
327
+ dual_wheel_chart = ChartDrawer(chart_data=lunar_return_chart_data)
328
+ dual_wheel_chart.save_svg()
329
+
330
+ # Optional: create a single-wheel lunar return
331
+ single_wheel_data = ChartDataFactory.create_single_wheel_return_chart_data(lunar_return_subject)
332
+ single_wheel_chart = ChartDrawer(chart_data=single_wheel_data)
333
+ single_wheel_chart.save_svg()
334
+ ```
335
+
336
+ ![John Lennon Lunar Return Chart (Dual Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20-%20DualReturnChart%20Chart%20-%20Lunar%20Return.svg)
337
+
338
+ ![John Lennon Lunar Return Chart (Single Wheel)](https://raw.githubusercontent.com/g-battaglia/kerykeion/refs/heads/main/tests/charts/svg/John%20Lennon%20Lunar%20Return%20-%20SingleReturnChart%20Chart.svg)
339
+
238
340
  ### Composite Chart
239
341
 
240
342
  ```python
@@ -296,7 +398,7 @@ from kerykeion.charts.chart_drawer import ChartDrawer
296
398
  birth_chart = AstrologicalSubjectFactory.from_birth_data("John Lennon", 1940, 10, 9, 18, 30, "Liverpool", "GB")
297
399
 
298
400
  # Step 2: Pre-compute external natal chart data
299
- chart_data = ChartDataFactory.create_external_natal_chart_data(birth_chart)
401
+ chart_data = ChartDataFactory.create_natal_chart_data(birth_chart)
300
402
 
301
403
  # Step 3: Create visualization
302
404
  birth_chart_svg = ChartDrawer(chart_data=chart_data)
@@ -371,6 +473,7 @@ birth_chart_svg = ChartDrawer(
371
473
  chart_language="IT" # Change to Italian
372
474
  )
373
475
  birth_chart_svg.save_svg()
476
+ ```
374
477
 
375
478
  You can also provide custom labels (or introduce a brand-new language) by passing
376
479
  a dictionary to `language_pack`. Only the keys you supply are merged on top of the
@@ -390,7 +493,6 @@ birth_chart_svg = ChartDrawer(
390
493
  language_pack=custom_labels["PT"],
391
494
  )
392
495
  ```
393
- ```
394
496
 
395
497
  More details [here](https://www.kerykeion.net/docs/chart-language).
396
498
 
@@ -39,7 +39,8 @@
39
39
  - [~] Full documentation for the library
40
40
  - [ ] Fix: Spica glif
41
41
  - [ ] Fix: Dual charts
42
- - [ ] Doc snippets
42
+ - [ ] Doc snippets check and fix
43
+ - [ ] docs: Return charts
43
44
 
44
45
  ### 🟧 Medium Priority
45
46
 
@@ -1071,24 +1071,28 @@ class ChartDrawer:
1071
1071
  return f"{synastry_label}: {name1} {and_word} {name2}"
1072
1072
 
1073
1073
  elif self.chart_type == "DualReturnChart":
1074
- year = datetime.fromisoformat(self.second_obj.iso_formatted_local_datetime).year # type: ignore
1074
+ return_datetime = datetime.fromisoformat(self.second_obj.iso_formatted_local_datetime) # type: ignore
1075
+ year = return_datetime.year
1076
+ month_year = return_datetime.strftime("%m/%Y")
1075
1077
  truncated_name = self._truncate_name(self.first_obj.name)
1076
1078
  if self.second_obj is not None and isinstance(self.second_obj, PlanetReturnModel) and self.second_obj.return_type == "Solar":
1077
1079
  solar_label = self._translate("solar_return", "Solar")
1078
1080
  return f"{truncated_name} - {solar_label} {year}"
1079
1081
  else:
1080
1082
  lunar_label = self._translate("lunar_return", "Lunar")
1081
- return f"{truncated_name} - {lunar_label} {year}"
1083
+ return f"{truncated_name} - {lunar_label} {month_year}"
1082
1084
 
1083
1085
  elif self.chart_type == "SingleReturnChart":
1084
- year = datetime.fromisoformat(self.first_obj.iso_formatted_local_datetime).year # type: ignore
1086
+ return_datetime = datetime.fromisoformat(self.first_obj.iso_formatted_local_datetime) # type: ignore
1087
+ year = return_datetime.year
1088
+ month_year = return_datetime.strftime("%m/%Y")
1085
1089
  truncated_name = self._truncate_name(self.first_obj.name)
1086
1090
  if isinstance(self.first_obj, PlanetReturnModel) and self.first_obj.return_type == "Solar":
1087
1091
  solar_label = self._translate("solar_return", "Solar")
1088
1092
  return f"{truncated_name} - {solar_label} {year}"
1089
1093
  else:
1090
1094
  lunar_label = self._translate("lunar_return", "Lunar")
1091
- return f"{truncated_name} - {lunar_label} {year}"
1095
+ return f"{truncated_name} - {lunar_label} {month_year}"
1092
1096
 
1093
1097
  # Fallback for unknown chart types
1094
1098
  return self._truncate_name(self.first_obj.name)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kerykeion"
3
- version = "5.0.1"
3
+ version = "5.0.2"
4
4
  authors = [
5
5
  { name = "Giacomo Battaglia", email = "kerykeion.astrology@gmail.com" }
6
6
  ]
@@ -373,6 +373,22 @@ black_and_white_single_return_chart.save_svg(
373
373
  filename="John Lennon Solar Return - Black and White Theme - SingleReturnChart Chart",
374
374
  )
375
375
 
376
+ # Lunar Return Charts
377
+ lunar_return = return_factory.next_return_from_iso_formatted_time(
378
+ "2025-01-09T18:30:00+01:00",
379
+ return_type="Lunar",
380
+ )
381
+
382
+ # Dual Return (Natal + Lunar Return)
383
+ lunar_dual_return_chart_data = ChartDataFactory.create_return_chart_data(first, lunar_return)
384
+ lunar_dual_return_chart = ChartDrawer(lunar_dual_return_chart_data)
385
+ lunar_dual_return_chart.save_svg(output_path=OUTPUT_DIR_STR)
386
+
387
+ # Single Wheel Lunar Return
388
+ lunar_single_return_chart_data = ChartDataFactory.create_single_wheel_return_chart_data(lunar_return)
389
+ lunar_single_return_chart = ChartDrawer(lunar_single_return_chart_data)
390
+ lunar_single_return_chart.save_svg(output_path=OUTPUT_DIR_STR)
391
+
376
392
  ## Transparent Background
377
393
  transparent_background_subject = AstrologicalSubjectFactory.from_birth_data("John Lennon - Transparent Background", 1940, 10, 9, 18, 30, "Liverpool", "GB", suppress_geonames_warning=True)
378
394
  transparent_background_chart_data = ChartDataFactory.create_natal_chart_data(transparent_background_subject)