kerykeion 5.1.0__tar.gz → 5.1.1__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.
- {kerykeion-5.1.0 → kerykeion-5.1.1}/PKG-INFO +2 -2
- {kerykeion-5.1.0 → kerykeion-5.1.1}/README.md +1 -1
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/planetary_return.py +1 -1
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/chart_data_factory.py +9 -6
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/chart_drawer.py +6 -6
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/report.py +1 -2
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/kr_models.py +2 -2
- {kerykeion-5.1.0 → kerykeion-5.1.1}/pyproject.toml +1 -1
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/aspects.md +9 -9
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/chart_data_factory.md +18 -18
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_all_active_points.py +6 -2
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_chart_data_factory.py +9 -9
- {kerykeion-5.1.0 → kerykeion-5.1.1}/.coveragerc +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/.github/FUNDING.yml +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/.gitignore +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/CHANGELOG.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/DEVELOPMENT.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/LICENSE +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/MANIFEST.in +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/TODO.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/index.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/aspects/aspects_utils.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/aspects/natal_aspects.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/aspects/synastry_aspects.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/aspects/transits_time_range.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/aspects.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/astrological_subject.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/charts/charts_utils.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/charts/draw_planets.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/charts/kerykeion_chart_svg.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/charts.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/composite_subject_factory.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/enums.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/ephemeris_data.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/fetch_geonames.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types/chart_types.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types/kerykeion_exception.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types/kr_literals.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types/kr_models.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types/settings_models.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/kr_types.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/relationship_score/relationship_score.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/relationship_score/relationship_score_factory.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/relationship_score.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/report.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/settings/config_constants.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/settings/kerykeion_settings.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/settings.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/transits_time_range.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/utilities.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion.html +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/docs/search.js +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/aspects_synastry.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/composite_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/current_time_report.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/dual_return_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/natal_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/quickstart_natal_chart.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/solar_return_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/subject_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/synastry_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/transit_report_example.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/examples/transits_time_range.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/aspects/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/aspects/aspects_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/aspects/aspects_utils.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/astrological_subject_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/backword.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/charts_utils.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/draw_planets.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/templates/aspect_grid_only.xml +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/templates/chart.xml +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/templates/wheel_only.xml +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/black-and-white.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/classic.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/dark-high-contrast.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/dark.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/light.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/charts/themes/strawberry.css +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/composite_subject_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/ephemeris_data_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/fetch_geonames.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/house_comparison/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/house_comparison/house_comparison_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/house_comparison/house_comparison_utils.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/chart_template_model.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/kerykeion_exception.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/kr_literals.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/kr_models.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/kr_types/settings_models.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/planetary_return_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/relationship_score_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/chart_template_model.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/kerykeion_exception.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/kr_literals.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/schemas/settings_models.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/chart_defaults.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/config_constants.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/kerykeion_settings.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/translation_strings.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/settings/translations.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/README.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast136/s136108s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast136/s136199s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast136/s136472s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast28/se28978s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast50/se50000s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast90/se90377s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/ast90/se90482s.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/seas_18.se1 +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/sweph/sefstars.txt +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/transits_time_range_factory.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/kerykeion/utilities.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.14.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.16.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.17.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.19.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.21.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.22.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.23.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.24.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.25.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/V4.26.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/v5.0.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/v5.0.0a.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/v5.0.0b.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/release_notes/v5.1.0.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/README.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/quality_check.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/regenerate_expected_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/regenerate_synastry_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/regenerate_synastry_from_test.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/regenerate_test_charts.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/scripts/test_markdown_snippets.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/astrological_subject_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/charts.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/composite_subject_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/element_quality_distribution.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/ephemeris_data_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/house_comparison.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/planetary_return_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/relationship_score_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/report.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/transits_time_range_factory.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/site-docs/utilities.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/aspects/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/aspects/expected_natal_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/aspects/expected_synastry_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/aspects/test_natal_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/aspects/test_synastry_aspects.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/__init__.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/compare_svg_lines.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Albert Einstein - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Amitabh Bachchan - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Black and White Theme - Composite Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Angelina Jolie and Brad Pitt Composite Chart - Composite Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Antonio Banderas - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Cristiano Ronaldo - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Hua Chenyu - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Jeanne Moreau - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Natal Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Grid.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - List.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - All Active Points - Synastry Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Dark Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Dark Theme - Natal Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Light Theme - Natal Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Only - Natal Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Synastry - Synastry Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Aspect Grid Transit - Transit Chart - Aspect Grid Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Black and White Theme - DualReturnChart Chart - Solar Return.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Black and White Theme - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Black and White Theme - Synastry Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Black and White Theme - Transit Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - DTS - Synastry Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Dark High Contrast Theme - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Dark Theme - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Dark Theme External - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - DualReturnChart Chart - Lunar Return.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - DualReturnChart Chart - Solar Return.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - ExternalNatal - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Heliocentric - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - House System Morinus - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Light Theme - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Minified - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - SCTWL - Synastry Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - TCWTG - Transit Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Topocentric - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Transit Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Transparent Background - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - True Geocentric - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Wheel External Only - ExternalNatal Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Wheel Only - Natal Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Wheel Synastry Only - Synastry Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon - Wheel Transit Only - Transit Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon DeLuce - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Fagan-Bradley - Light Theme - Natal Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Fagan-Bradley - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon J2000 - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Lahiri - Dark Theme - Natal Chart - Wheel Only.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Lahiri - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Lunar Return - SingleReturnChart Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Solar Return - Black and White Theme - SingleReturnChart Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/John Lennon Solar Return - SingleReturnChart Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Kanye - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Mehmet Oz - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Mikhail Bulgakov - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/svg/Sophia Loren - Natal Chart.svg +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/test_charts.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/charts/test_draw_planets.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/settings/test_settings.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_astrological_subject.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_astrological_subject_jyotish.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_backward_compatibility.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_backword.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_chart_data_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_chart_drawer_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_composite_subject_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_ephemeris_data.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_ephemeris_data_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_fetch_geonames.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_json_dump.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_planetary_return_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_relationship_score.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_relationship_score_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_report.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_transits_time_range_factory_complete.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_utc.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/tests/test_utilities.py +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/uv.lock +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/workspace/README.md +0 -0
- {kerykeion-5.1.0 → kerykeion-5.1.1}/workspace/main.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kerykeion
|
|
3
|
-
Version: 5.1.
|
|
3
|
+
Version: 5.1.1
|
|
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
|
-
- **`
|
|
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
|
-
- **`
|
|
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
|
|
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
|
-
|
|
162
|
+
aspects_model: Union[SingleChartAspectsModel, DualChartAspectsModel]
|
|
163
163
|
if chart_type in ["Natal", "Composite", "SingleReturnChart"]:
|
|
164
164
|
# Single chart aspects
|
|
165
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
444
|
+
self.aspects_list = chart_data.aspects
|
|
445
445
|
|
|
446
446
|
# Screen size
|
|
447
447
|
self.height = self._DEFAULT_HEIGHT
|
|
@@ -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
|
-
|
|
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:
|
|
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:
|
|
585
|
+
aspects: List[AspectModel]
|
|
586
586
|
|
|
587
587
|
# House comparison analysis
|
|
588
588
|
house_comparison: Optional["HouseComparisonModel"] = None
|
|
@@ -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
|
-
|
|
915
|
-
|
|
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
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
496
|
-
"relevant": len(chart_data.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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
939
|
+
print(f"Quick analysis: {len(quick_synastry.aspects)} aspects")
|
|
940
940
|
```
|
|
941
941
|
|
|
942
942
|
## Error Handling
|
|
@@ -44,8 +44,12 @@ def test_all_active_points_used_in_chart():
|
|
|
44
44
|
assert set(chart_data.active_points).issubset(set(ALL_ACTIVE_POINTS))
|
|
45
45
|
assert len(chart_data.active_points) > 0
|
|
46
46
|
assert hasattr(chart_data, "aspects") and chart_data.aspects is not None
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
assert len(chart_data.aspects) > 0
|
|
48
|
+
aspect_points = {
|
|
49
|
+
aspect.p1_name for aspect in chart_data.aspects
|
|
50
|
+
}.union({aspect.p2_name for aspect in chart_data.aspects})
|
|
51
|
+
# Aspect point names should be limited to the active set
|
|
52
|
+
assert aspect_points.issubset(set(chart_data.active_points))
|
|
49
53
|
|
|
50
54
|
# ChartDrawer should reflect the same list and enable all of them
|
|
51
55
|
drawer = ChartDrawer(chart_data)
|
|
@@ -99,7 +99,7 @@ class TestSingleChartDataModel:
|
|
|
99
99
|
|
|
100
100
|
# Verify aspects are calculated
|
|
101
101
|
assert hasattr(chart_data, 'aspects')
|
|
102
|
-
assert len(chart_data.aspects
|
|
102
|
+
assert len(chart_data.aspects) > 0
|
|
103
103
|
|
|
104
104
|
# Verify element and quality distributions
|
|
105
105
|
assert isinstance(chart_data.element_distribution, ElementDistributionModel)
|
|
@@ -160,7 +160,7 @@ class TestDualChartDataModel:
|
|
|
160
160
|
|
|
161
161
|
# Verify inter-chart aspects
|
|
162
162
|
assert hasattr(chart_data, 'aspects')
|
|
163
|
-
assert len(chart_data.aspects
|
|
163
|
+
assert len(chart_data.aspects) > 0
|
|
164
164
|
|
|
165
165
|
# Verify synastry-specific features
|
|
166
166
|
assert chart_data.house_comparison is not None
|
|
@@ -409,11 +409,11 @@ class TestAspectCalculations:
|
|
|
409
409
|
chart_data = factory.create_chart_data("Natal", test_subject_1)
|
|
410
410
|
|
|
411
411
|
# Verify aspects exist
|
|
412
|
-
assert len(chart_data.aspects
|
|
412
|
+
assert len(chart_data.aspects) > 0
|
|
413
413
|
|
|
414
414
|
# For natal charts, all aspects should be internal
|
|
415
415
|
# (this test assumes aspect structure allows checking)
|
|
416
|
-
aspects = chart_data.aspects
|
|
416
|
+
aspects = chart_data.aspects
|
|
417
417
|
assert len(aspects) > 0
|
|
418
418
|
|
|
419
419
|
def test_synastry_aspects_are_inter_chart(self, factory, test_subject_1, test_subject_2):
|
|
@@ -421,10 +421,10 @@ class TestAspectCalculations:
|
|
|
421
421
|
chart_data = factory.create_chart_data("Synastry", test_subject_1, test_subject_2)
|
|
422
422
|
|
|
423
423
|
# Verify inter-chart aspects exist
|
|
424
|
-
assert len(chart_data.aspects
|
|
424
|
+
assert len(chart_data.aspects) > 0
|
|
425
425
|
|
|
426
426
|
# Synastry should have aspects between the two charts
|
|
427
|
-
aspects = chart_data.aspects
|
|
427
|
+
aspects = chart_data.aspects
|
|
428
428
|
assert len(aspects) > 0
|
|
429
429
|
|
|
430
430
|
|
|
@@ -444,7 +444,7 @@ class TestPerformanceAndOptimization:
|
|
|
444
444
|
)
|
|
445
445
|
|
|
446
446
|
# Limited chart should have fewer or equal aspects
|
|
447
|
-
assert len(limited_chart.aspects
|
|
447
|
+
assert len(limited_chart.aspects) <= len(full_chart.aspects)
|
|
448
448
|
assert len(limited_chart.active_points) <= len(full_chart.active_points)
|
|
449
449
|
|
|
450
450
|
def test_selective_synastry_features(self, factory, test_subject_1, test_subject_2):
|
|
@@ -529,7 +529,7 @@ class TestDataExportAndSerialization:
|
|
|
529
529
|
"name": chart_data.subject.name,
|
|
530
530
|
"fire_percentage": chart_data.element_distribution.fire_percentage,
|
|
531
531
|
"earth_percentage": chart_data.element_distribution.earth_percentage,
|
|
532
|
-
"aspect_count": len(chart_data.aspects
|
|
532
|
+
"aspect_count": len(chart_data.aspects)
|
|
533
533
|
}
|
|
534
534
|
results.append(result)
|
|
535
535
|
|
|
@@ -583,7 +583,7 @@ class TestEdgeCasesAndRobustness:
|
|
|
583
583
|
assert chart_data.first_subject.name == chart_data.second_subject.name
|
|
584
584
|
|
|
585
585
|
# Should have some aspects (likely many conjunctions)
|
|
586
|
-
assert len(chart_data.aspects
|
|
586
|
+
assert len(chart_data.aspects) > 0
|
|
587
587
|
|
|
588
588
|
|
|
589
589
|
if __name__ == "__main__":
|
|
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
|
|
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
|
{kerykeion-5.1.0 → kerykeion-5.1.1}/docs/kerykeion/relationship_score/relationship_score.html
RENAMED
|
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
|
|
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
|
|
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
|