Ë
    }D™jáž  ã                  ó:  — d dl mZ d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ ddd	d
ddddddœ	ZddddœZeeeef   Ze	d   Z G d„ d«      Zedk(  �rªd dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' dZ(dZ)dZ*d Z+d!Z,d"Z- e!j\                  d#d$d%d&d'd(e(e)e*e+e,e-¬)«      Z/ e!j\                  d*d+d,d-d.d/d0d1d2d3d4e-¬)«      Z0 e!j\                  d5d6d7d8d9d:d;d<d=d>d?e-¬)«      Z1 e'e/e/jd                  e/jf                  e/jh                  e/jj                  e/jl                  d"¬@«      Z7e7jq                  e/jr                  dA«      Z: e%e/e0dB¬C«      jw                  «       Z< e#jz                  e/«      Z> e#j~                  e<«      Z@ e#j‚                  e:«      ZB e#j†                  e/e1«      ZD e#jŠ                  e/e0«      ZF e#jŽ                  e/e:«      ZH eIdD«        eIdE«        eIdF«        ee/d"¬G«      j•                  d"¬G«        eIdH«        eIdI«        eIdJ«        ee>«      j•                  «         eIdK«        eIdL«        eIdM«        ee@«      j•                  «         eIdN«        eIdO«        eIdP«        eeB«      j•                  «         eIdQ«        eIdR«        eIdS«        eeD«      j•                  «         eIdT«        eIdU«        eIdV«        eeF«      j•                  «         eIdQ«        eIdW«        eIdS«        eeH«      j•                  «        yXyX)Yé    )Úannotations)Údatetime)ÚListÚOptionalÚSequenceÚTupleÚUnionÚLiteral)Ú
AsciiTable)Ú&get_available_astrological_points_listÚget_houses_list)
ÚAstrologicalSubjectModelÚChartDataModelÚCompositeSubjectModelÚDualChartDataModelÚMoonPhaseOverviewModelÚPlanetReturnModelÚPointInHouseModelÚRelationshipScoreModelÚSingleChartDataModelÚKerykeionPointModelu   â˜Œu   â˜�u   â–³u   â–¡u   âš¹u   âš»u   âˆ u   âš¼ÚQ)	ÚconjunctionÚ
oppositionÚtrineÚsquareÚsextileÚquincunxÚ
semisquareÚsesquisquareÚquintileu   â†’u   â†�ú=)ÚApplyingÚ
SeparatingÚStatic)ÚsubjectÚsingle_chartÚ
dual_chartÚmoon_phase_overviewc                  ó@  — e Zd ZdZdddœ	 	 	 	 	 	 	 d d„Zdddœ	 	 	 	 	 d!d„Zdddœ	 	 	 	 	 d"d„Zd#d„Zd$d	„Zd$d
„Z	d%d„Z
d%d„Zd&d„Zd&d„Zd'd„Zd(d„Zd)d„Zd*d„Zd)d„Zd+d„Zd&d„Zd&d„Zd&d„Zd,d„Zd&d„Zd-d„Zd-d„Zd&d„Zed.d„«       Zed/d„«       Zed/d„«       Zy)0ÚReportGeneratoraÐ  
    Generate textual reports for astrological data models with a structure that mirrors the
    chart-specific dispatch logic used in :class:`~kerykeion.charts.chart_drawer.ChartDrawer`.

    The generator accepts any of the chart data models handled by ``ChartDrawer`` as well as
    raw ``AstrologicalSubjectModel`` instances. The ``print_report`` method automatically
    selects the appropriate layout and sections depending on the underlying chart type.
    TN©Úinclude_aspectsÚmax_aspectsc               ó¦   — || _         || _        || _        d | _        |  d | _        d | _        d | _        g | _        g | _        | j                  «        y ©N)
ÚmodelÚ_include_aspects_defaultÚ_max_aspects_defaultÚ
chart_typeÚ_chart_dataÚ_primary_subjectÚ_secondary_subjectÚ_active_pointsÚ_active_aspectsÚ_resolve_model)Úselfr1   r-   r.   s       ú\/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/kerykeion/report.pyÚ__init__zReportGenerator.__init__8   sY   € ð ˆŒ
Ø(7ˆÔ%Ø$/ˆÔ!à)-ˆŒÙØ59ˆÔØ7;ˆÔØ9=ˆÔØ)+ˆÔØ+-ˆÔà×ÑÕó    c               óÄ  — |€| j                   n|}|€| j                  n|}| j                  dk(  r| j                  «       }nV| j                  dk(  r| j	                  «       }n6| j                  dk(  r| j                  ||¬«      }n| j                  ||¬«      }| j                  «       j                  d«      }|g|D �cg c]  }|sŒ|‘Œ	 c}¢}dj                  |«      S c c}w )a  
        Build the report content without printing it.

        Args:
            include_aspects: Override the default setting for including the aspects section.
            max_aspects: Override the default limit for the number of aspects displayed.
        r)   r&   r'   r,   ú
ú

)
r2   r3   Ú_model_kindÚ!_build_moon_phase_overview_reportÚ_build_subject_reportÚ_build_single_chart_reportÚ_build_dual_chart_reportÚ_build_titleÚstripÚjoin)r;   r-   r.   ÚsectionsÚtitleÚsectionÚfull_sectionss          r<   Úgenerate_reportzReportGenerator.generate_reportQ   så   € ð <KÐ;R˜$×7Ò7ÐXgˆØ3>Ð3F�d×/Ò/ÈKˆà×ÑÐ4Ò4Ø×=Ñ=Ó?‰HØ×Ñ Ò*Ø×1Ñ1Ó3‰HØ×Ñ Ò/Ø×6Ñ6ÀÐdoÐ6Óp‰Hà×4Ñ4À_ÐbmÐ4ÓnˆHà×!Ñ!Ó#×)Ñ)¨$Ó/ˆØÐN¸Ö!M¨gÂW¢'Ò!MÐNˆØ�{‰{˜=Ó)Ð)ùò "Ns   Â<CÃCc               ó<   — t        | j                  ||¬«      «       y)z7
        Print the generated report to stdout.
        r,   N)ÚprintrN   )r;   r-   r.   s      r<   Úprint_reportzReportGenerator.print_reportn   s   € ô 	ˆd×"Ñ"°?ÐP[Ð"Ó\Õ]r>   c                óø  — t        | j                  t        «      r+d| _        d| _        d | _        d | _        g | _        g | _        y t        | j                  t        «      rRd| _        d| _        | j                  | _        d | _        t        | j                  j                  «      | _        g | _        y t        | j                  t        «      r¥d| _        | j                  j                  | _        | j                  | _        | j                  j                  | _        t        | j                  j                  «      | _        | j                  j                  D �cg c]  }t!        |«      ‘Œ c}| _        y t        | j                  t"        «      rÀd| _        | j                  j                  | _        | j                  | _        | j                  j$                  | _        | j                  j&                  | _        t        | j                  j                  «      | _        | j                  j                  D �cg c]  }t!        |«      ‘Œ c}| _        y d}t)        dt+        | j                  «      ›d	|› d
�«      ‚c c}w c c}w )Nr)   ÚMoonPhaseOverviewr&   ÚSubjectr'   r(   zZAstrologicalSubjectModel, SingleChartDataModel, DualChartDataModel, MoonPhaseOverviewModelzUnsupported model type z. Supported models: ú.)Ú
isinstancer1   r   rB   r4   r6   r7   r8   r9   r   ÚlistÚactive_pointsr   r5   r&   Úactive_aspectsÚdictr   Úfirst_subjectÚsecond_subjectÚ	TypeErrorÚtype)r;   ÚaspectÚ	supporteds      r<   r:   zReportGenerator._resolve_model}   sÙ  € Ü�d—j‘jÔ"8Ô9Ø4ˆDÔØ1ˆDŒOØ$(ˆDÔ!Ø&*ˆDÔ#Ø"$ˆDÔØ#%ˆDÕ Ü˜Ÿ
™
Ô$<Ô=Ø(ˆDÔØ'ˆDŒOØ$(§J¡JˆDÔ!Ø&*ˆDÔ#Ü"& t§z¡z×'?Ñ'?Ó"@ˆDÔØ#%ˆDÕ Ü˜Ÿ
™
Ô$8Ô9Ø-ˆDÔØ"Ÿj™j×3Ñ3ˆDŒOØ#Ÿz™zˆDÔØ$(§J¡J×$6Ñ$6ˆDÔ!Ü"& t§z¡z×'?Ñ'?Ó"@ˆDÔØ?C¿z¹z×?XÑ?XÖ#Y°V¤D¨¥LÒ#YˆDÕ Ü˜Ÿ
™
Ô$6Ô7Ø+ˆDÔØ"Ÿj™j×3Ñ3ˆDŒOØ#Ÿz™zˆDÔØ$(§J¡J×$<Ñ$<ˆDÔ!Ø&*§j¡j×&?Ñ&?ˆDÔ#Ü"& t§z¡z×'?Ñ'?Ó"@ˆDÔØ?C¿z¹z×?XÑ?XÖ#Y°V¤D¨¥LÒ#YˆDÕ àtˆIÜÐ5´d¸4¿:¹:Ó6FÐ5IÐI]Ð^gÐ]hÐhiÐjÓkÐkùò $Zùò $Zs   ÅI2È0I7c                óü   — | j                   €J ‚| j                  | j                   d«      | j                  | j                   d«      | j                  | j                   d«      | j	                  | j                   «      g}|S )NzAstrological SubjectzCelestial PointsÚHouses)r6   Ú_subject_data_reportÚ_celestial_points_reportÚ_houses_reportÚ_lunar_phase_report)r;   rJ   s     r<   rD   z%ReportGenerator._build_subject_report£   sz   € Ø×$Ñ$Ð0Ð0Ð0à×%Ñ% d×&;Ñ&;Ð=SÓTØ×)Ñ)¨$×*?Ñ*?ÐASÓTØ×Ñ × 5Ñ 5°xÓ@Ø×$Ñ$ T×%:Ñ%:Ó;ð	
ˆð ˆr>   c                ób  — t        | j                  t        «      sJ ‚| j                  }g }|j                  }ddgg}|j                  �>|j                  d|j                  › d|j                  xs d› �j                  «       g«       |j                  �|j                  d|j                  g«       |j                  �+|j                  d|j                  j                  «       g«       |j                  �|j                  d|j                  g«       |j                  �&|j                  d	t        |j                  «      g«       |j                  �|j                  d
|j                  g«       |j                  �N|j                  d|j                  j                   g«       |j                  d|j                  j"                  g«       t%        |«      dkD  r&|j                  t'        |d¬«      j(                  «       |j*                  ré|j*                  j,                  rÓ|j*                  j,                  }ddgg}|j.                  � |j                  d|j.                  › d�g«       |j0                  �|j                  d|j0                  d›g«       |j2                  �!|j                  d|j2                  d›d�g«       t%        |«      dkD  r&|j                  t'        |d¬«      j(                  «       |j*                  �r/|j*                  j4                  �r|j*                  j4                  }g d¢g}d|j6                  fd|j8                  fd|j:                  fd|j<                  ffD ]�  \  }	}
|
€Œ	|
j>                  r,|
j>                  j@                  r|
j>                  j@                  nd}|
jB                  r,|
jB                  j@                  r|
jB                  j@                  nd}|j                  |	||g«       Œ’ t%        |«      dkD  r&|j                  t'        |d¬«      j(                  «       |jD                  r—|jD                  }ddgg}|j@                  r|j                  d|j@                  g«       |jF                  r|j                  d |jF                  g«       t%        |«      dkD  r&|j                  t'        |d!¬«      j(                  «       |jH                  }|��ddgg}|jJ                  �|j                  d"|jJ                  g«       |jL                  �|j                  d#|jL                  g«       |jN                  �|j                  d$|jN                  g«       |jP                  �|j                  d%|jP                  g«       |jR                  �‚|jR                  jT                  �+|j                  d&|jR                  jT                  d›d�g«       |jR                  jV                  �+|j                  d'|jR                  jV                  d›d�g«       t%        |«      dkD  r&|j                  t'        |d(¬«      j(                  «       |jX                  r—|jX                  }ddgg}|j@                  r|j                  d|j@                  g«       |jF                  r|j                  d |jF                  g«       t%        |«      dkD  r&|j                  t'        |d)¬«      j(                  «       |jZ                  }|�¸ddgg}|j\                  �|j                  d*|j\                  g«       |j^                  �|j                  d+|j^                  g«       |j`                  �!|j                  d,|j`                  rd-nd.g«       t%        |«      dkD  r&|j                  t'        |d/¬«      j(                  «       |S )0z6Build a detailed report from a MoonPhaseOverviewModel.ÚFieldÚValueú
Phase Nameú Ú zMajor PhaseÚStageÚIlluminationz
Age (days)zLunar CyclezSun Signz	Moon Signé   zMoon Summary©rK   Ú
Percentageú%zVisible Fractionú.4fzPhase Angleú.2fõ   Â°zIllumination Details)ÚPhaseÚLastÚNextzNew MoonzFirst Quarterz	Full MoonzLast QuarterúN/AzUpcoming PhasesÚDateÚTypezNext Lunar EclipseÚSunriseÚSunsetz
Solar Noonz
Day LengthzSun AltitudezSun AzimuthzSun InfozNext Solar EclipseÚLatitudeÚ	LongitudezDefault LocationÚYesÚNoÚLocation)1rV   r1   r   ÚmoonÚ
phase_nameÚappendÚemojirH   Úmajor_phaseÚstageÚ
capitalizeÚilluminationÚage_daysÚstrÚlunar_cycleÚzodiacÚsun_signÚ	moon_signÚlenr   ÚtableÚdetailedÚillumination_detailsÚ
percentageÚvisible_fractionÚphase_angleÚupcoming_phasesÚnew_moonÚfirst_quarterÚ	full_moonÚlast_quarterÚlastÚ	datestampÚnextÚnext_lunar_eclipser^   ÚsunÚsunrise_timestampÚsunset_timestampÚ
solar_noonÚ
day_lengthÚpositionÚaltitudeÚazimuthÚnext_solar_eclipseÚlocationÚlatitudeÚ	longitudeÚusing_default_location)r;   ÚoverviewrJ   rƒ   Ú	moon_dataÚillumÚ
illum_dataÚphasesÚphases_dataÚlabelÚwindowÚlast_strÚnext_strÚeclipseÚecl_datar¡   Úsun_dataÚseÚse_dataÚlocÚloc_datas                        r<   rC   z1ReportGenerator._build_moon_phase_overview_report­   s}  € ä˜$Ÿ*™*Ô&<Ô=Ð=Ð=Ø—:‘:ˆØ ˆð �}‰}ˆØ'.°Ð&8Ð%9ˆ	Ø�?‰?Ð&Ø×Ñ˜l¨t¯©Ð.?¸qÀÇÁÒAQÈrÐ@RÐ,S×,YÑ,YÓ,[Ð\Ô]Ø×ÑÐ'Ø×Ñ˜m¨T×-=Ñ-=Ð>Ô?Ø�:‰:Ð!Ø×Ñ˜g t§z¡z×'<Ñ'<Ó'>Ð?Ô@Ø×ÑÐ(Ø×Ñ˜n¨d×.?Ñ.?Ð@ÔAØ�=‰=Ð$Ø×Ñ˜l¬C°·±Ó,>Ð?Ô@Ø×ÑÐ'Ø×Ñ˜m¨T×-=Ñ-=Ð>Ô?Ø�;‰;Ð"Ø×Ñ˜j¨$¯+©+×*>Ñ*>Ð?Ô@Ø×Ñ˜k¨4¯;©;×+@Ñ+@ÐAÔBÜˆy‹>˜AÒØ�O‰OœJ y¸ÔG×MÑMÔNð �=Š=˜TŸ]™]×?Ò?Ø—M‘M×6Ñ6ˆEØ,3°WÐ+=Ð*>ˆJØ×ÑÐ+Ø×!Ñ! <°E×4DÑ4DÐ3EÀQÐ1GÐ"HÔIØ×%Ñ%Ð1Ø×!Ñ!Ð#5¸%×:PÑ:PÐQTÐ9UÐ"WÔXØ× Ñ Ð,Ø×!Ñ! =°U×5FÑ5FÀsÐ4KÈ2Ð2NÐ"OÔPÜ�:‹ Ò"Ø—‘¤
¨:Ð=SÔ T× ZÑ ZÔ[ð �=‹=˜TŸ]™]×:Ó:Ø—]‘]×2Ñ2ˆFÚ,EÐ+FˆKà˜VŸ_™_Ð-Ø  &×"6Ñ"6Ð7Ø˜f×.Ñ.Ð/Ø ×!4Ñ!4Ð5ð	"ò 	D‘��vð Ñ%Ø8>¿ºÈÏÉ×H]ÒH]˜vŸ{™{×4Ò4Ðch�HØ8>¿ºÈÏÉ×H]ÒH]˜vŸ{™{×4Ò4Ðch�HØ×&Ñ&¨¨x¸Ð'BÕCð	Dô �;Ó !Ò#Ø—‘¤
¨;Ð>OÔ P× VÑ VÔWð ×"Ò"Ø×-Ñ-ˆGØ*1°7Ð);Ð(<ˆHØ× Ò Ø—‘ ¨×):Ñ):Ð ;Ô<Ø�|Š|Ø—‘ ¨¯©Ð 6Ô7Ü�8‹}˜qÒ Ø—‘¤
¨8Ð;OÔ P× VÑ VÔWð �l‰lˆØ‰?Ø*1°7Ð);Ð(<ˆHØ×$Ñ$Ð0Ø—‘ ¨C×,AÑ,AÐ BÔCØ×#Ñ#Ð/Ø—‘ ¨3×+?Ñ+?Ð @ÔAØ�~‰~Ð)Ø—‘ ¨s¯~©~Ð >Ô?Ø�~‰~Ð)Ø—‘ ¨s¯~©~Ð >Ô?Ø�|‰|Ð'Ø—<‘<×(Ñ(Ð4Ø—O‘O ^¸¿¹×8MÑ8MÈcÐ7RÐRTÐ5UÐ$VÔWØ—<‘<×'Ñ'Ð3Ø—O‘O ]°s·|±|×7KÑ7KÈCÐ6PÐPRÐ4SÐ$TÔUÜ�8‹}˜qÒ Ø—‘¤
¨8¸:Ô F× LÑ LÔMð ×%Ò%Ø×+Ñ+�Ø-4°gÐ,>Ð+?�Ø—<’<Ø—N‘N F¨B¯L©LÐ#9Ô:Ø—7’7Ø—N‘N F¨B¯G©GÐ#4Ô5Ü�w“< !Ò#Ø—O‘O¤J¨wÐ>RÔ$S×$YÑ$YÔZð ×ÑˆØˆ?Ø*1°7Ð);Ð(<ˆHØ�|‰|Ð'Ø—‘ ¨S¯\©\Ð :Ô;Ø�}‰}Ð(Ø—‘ ¨c¯m©mÐ <Ô=Ø×)Ñ)Ð5Ø—‘Ð!3¸c×>XÒ>X±UÐ^bÐ cÔdÜ�8‹}˜qÒ Ø—‘¤
¨8¸:Ô F× LÑ LÔMàˆr>   c          	     óB  — | j                   €J ‚| j                  €J ‚| j                  | j                  | j                  «       «      g}t	        | j                  t
        «      rj|j                  | j                  | j                  j                  d«      «       |j                  | j                  | j                  j                  d«      «       |j                  | j                  | j                  | j                  «       › d�«      | j                  | j                  | j                  «       › d�«      | j                  | j                  «      | j                  «       | j                  «       | j                  «       g«       |r!|j                  | j!                  |¬«      «       |S )Nu   Composite â€“ First Subjectu   Composite â€“ Second Subjectú Celestial Pointsú Houses©r.   )r5   r6   rc   Ú_primary_subject_labelrV   r   r…   r[   r\   Úextendrd   re   rf   Ú_elements_reportÚ_qualities_reportÚ_active_configuration_reportÚ_aspects_report)r;   r-   r.   rJ   s       r<   rE   z*ReportGenerator._build_single_chart_report  s}  € Ø×ÑÐ+Ð+Ð+Ø×$Ñ$Ð0Ð0Ð0à×%Ñ% d×&;Ñ&;¸T×=XÑ=XÓ=ZÓ[ð
ˆô �d×+Ñ+Ô-BÔCØ�O‰OØ×)Ñ)Ø×)Ñ)×7Ñ7Ø1óôð �O‰OØ×)Ñ)Ø×)Ñ)×8Ñ8Ø2óôð 	�‰à×-Ñ-Ø×)Ñ)¨d×.IÑ.IÓ.KÐ-LÐL]Ð+^óð ×#Ñ# D×$9Ñ$9¸d×>YÑ>YÓ>[Ð=\Ð\cÐ;dÓeØ×(Ñ(¨×)>Ñ)>Ó?Ø×%Ñ%Ó'Ø×&Ñ&Ó(Ø×1Ñ1Ó3ð	ô	
ñ Ø�O‰O˜D×0Ñ0¸[Ð0ÓIÔJàˆr>   c          	     óà  — | j                   €J ‚| j                  €J ‚| j                  «       \  }}| j                  | j                  |«      g}| j                  �+|j                  | j                  | j                  |«      «       |j                  | j                  | j                  |› d�«      g«       | j                  �.|j                  | j                  | j                  |› d�«      «       |j                  | j                  | j                  |› d�«      «       | j                  �.|j                  | j                  | j                  |› d�«      «       |j                  | j                  | j                  «      | j                  «       | j                  «       | j                  «       | j                  «       | j                  «       g«       |r!|j                  | j                  |¬«      «       |S )NrÀ   rÁ   rÂ   )r5   r6   Ú_subject_role_labelsrc   r7   r…   rÄ   rd   re   rf   rÅ   rÆ   Ú_house_comparison_reportÚ_relationship_score_reportrÇ   rÈ   )r;   r-   r.   Úprimary_labelÚsecondary_labelrJ   s         r<   rF   z(ReportGenerator._build_dual_chart_reportF  sÏ  € Ø×ÑÐ+Ð+Ð+Ø×$Ñ$Ð0Ð0Ð0Ø)-×)BÑ)BÓ)DÑ&ˆ�ð ×%Ñ% d×&;Ñ&;¸]ÓKð
ˆð ×"Ñ"Ð.Ø�O‰O˜D×5Ñ5°d×6MÑ6MÈÓ_Ô`à�‰à×-Ñ-¨d×.CÑ.CÈÀÐVgÐEhÓiðô	
ð ×"Ñ"Ð.Ø�O‰OØ×-Ñ-¨d×.EÑ.EÈ/ÐIZÐZkÐGlÓmôð 	�‰˜×+Ñ+¨D×,AÑ,AÀmÀ_ÐT[ÐC\Ó]Ô^à×"Ñ"Ð.Ø�O‰O˜D×/Ñ/°×0GÑ0GÈOÐK\Ð\cÐIdÓeÔfà�‰à×(Ñ(¨×)>Ñ)>Ó?Ø×%Ñ%Ó'Ø×&Ñ&Ó(Ø×-Ñ-Ó/Ø×/Ñ/Ó1Ø×1Ñ1Ó3ðô		
ñ Ø�O‰O˜D×0Ñ0¸[Ð0ÓIÔJàˆr>   c                óª  — | j                   dk(  rOt        | j                  t        «      sJ ‚d| j                  j                  › �}dt        |«      z  }d|› d|› d|› d�S | j                  €J ‚| j                   dk(  r| j                  j                  › d�}�n$| j                  dk(  r| j                  j                  › d�}�nú| j                  d	k(  rt        | j                  t        «      rJ| j                  j                  j                  }| j                  j                  j                  }|› d
|› d�}�n‡| j                  j                  › d�}�nl| j                  dk(  r¶| j                  | j                  j                  «      }t        | j                  t        «      rH| j                  j                  dk(  r/| j                  j                  › d|xs d› �j!                  «       }�nÖ| j                  j                  › d|xs d› �j!                  «       }�n§| j                  dk(  r^| j#                  | j$                  r| j$                  j                  nd «      }| j                  j                  › d|› �j!                  «       }�n:| j                  dk(  rA| j$                  �| j$                  j                  nd}| j                  j                  › d
|› d�}nê| j                  dk(  rÂ| j                  | j$                  r| j$                  j                  nd «      }t        | j$                  t        «      rG| j$                  j                  dk(  r.| j                  j                  › d|xs d› �j!                  «       }nG| j                  j                  › d|xs d› �j!                  «       }n| j                  j                  › d�}dt        |«      z  }d|› d|› d|› d�S )Nr)   u   Moon Phase Overview â€” r"   r@   r&   u    â€” Subject ReportÚNatalu    â€” Natal Chart ReportÚ	Compositeú & u    â€” Composite ReportÚSingleReturnChartÚSolaru    â€” Solar Return rl   u    â€” Lunar Return ÚTransitu    â€” Transit ÚSynastryÚUnknownu    â€” Synastry ReportÚDualReturnChartu    â€” Solar Return Comparison u    â€” Lunar Return Comparison u    â€” Chart Report)rB   rV   r1   r   rž   r‘   r6   Únamer4   r   r[   r\   Ú_extract_yearÚiso_formatted_local_datetimer   Úreturn_typerH   Ú_format_date_isor7   )r;   Ú
base_titleÚ	separatorÚfirstÚsecondÚyearÚdate_strÚsecond_names           r<   rG   zReportGenerator._build_titlev  sŒ  € Ø×ÑÐ4Ò4Ü˜dŸj™jÔ*@ÔAÐAÐAØ3°D·J±J×4HÑ4HÐ3IÐJˆJØœc *›oÑ-ˆIØ˜	�{ " Z L°°9°+¸RÐ@Ð@à×$Ñ$Ð0Ð0Ð0à×Ñ˜yÒ(Ø ×1Ñ1×6Ñ6Ð7Ð7JÐKŠJØ�_‰_ Ò'Ø ×1Ñ1×6Ñ6Ð7Ð7NÐOŠJØ�_‰_ Ò+Ü˜$×/Ñ/Ô1FÔGØ×-Ñ-×;Ñ;×@Ñ@�Ø×.Ñ.×=Ñ=×BÑB�Ø %˜w c¨&¨Ð1FÐG’
à $× 5Ñ 5× :Ñ :Ð;Ð;PÐQ’
Ø�_‰_Ð 3Ò3Ø×%Ñ% d×&;Ñ&;×&XÑ&XÓYˆDÜ˜$×/Ñ/Ô1BÔCÈ×H]ÑH]×HiÑHiÐmtÒHtØ $× 5Ñ 5× :Ñ :Ð;Ð;MÈdÊjÐVXÈ\ÐZ×`Ñ`Ób’
à $× 5Ñ 5× :Ñ :Ð;Ð;MÈdÊjÐVXÈ\ÐZ×`Ñ`Ób’
Ø�_‰_ 	Ò)Ø×,Ñ,ØHL×H_ÒH_�×'Ñ'×DÒDÐeióˆHð !×1Ñ1×6Ñ6Ð7°}ÀXÀJÐO×UÑUÓWŠJØ�_‰_ 
Ò*Ø:>×:QÑ:QÐ:]˜$×1Ñ1×6Ò6ÐclˆKØ ×1Ñ1×6Ñ6Ð7°s¸;¸-ÐG[Ð\‰JØ�_‰_Ð 1Ò1Ø×%Ñ%ØHL×H_ÒH_�×'Ñ'×DÒDÐeióˆDô ˜4×2Ñ2Ô4EÔFØ×+Ñ+×7Ñ7¸7ÒBà $× 5Ñ 5× :Ñ :Ð;Ð;XÐY]ÒYcÐacÐXdÐe×kÑkÓm‘
à $× 5Ñ 5× :Ñ :Ð;Ð;XÐY]ÒYcÐacÐXdÐe×kÑkÓm‘
à ×1Ñ1×6Ñ6Ð7Ð7HÐIˆJàœ#˜j›/Ñ)ˆ	Ø�I�;˜b  ¨B¨y¨k¸Ð<Ð<r>   c                óÌ   — | j                   dk(  ry| j                   dk(  r5t        | j                  t        «      r| j                  j                  dk(  ryy| j                   xs d› S )NrÑ   zComposite ChartrÓ   rÔ   zSolar Return ChartzLunar Return ChartÚChart)r4   rV   r6   r   rÜ   ©r;   s    r<   rÃ   z&ReportGenerator._primary_subject_label©  s[   € Ø�?‰?˜kÒ)Ø$Ø�?‰?Ð1Ò1Ü˜$×/Ñ/Ô1BÔCÈ×H]ÑH]×HiÑHiÐmtÒHtØ+Ø'Ø—/‘/Ò, WÐ-Ð.r>   c                ód   — | j                   dk(  ry| j                   dk(  ry| j                   dk(  ryy)NrÕ   )úNatal SubjectzTransit SubjectrÖ   )zFirst SubjectzSecond SubjectrØ   )ré   zReturn Subject)zPrimary SubjectzSecondary Subject)r4   rç   s    r<   rÊ   z$ReportGenerator._subject_role_labels²  s3   € Ø�?‰?˜iÒ'Ø5Ø�?‰?˜jÒ(Ø4Ø�?‰?Ð/Ò/Ø4Ø5r>   c                óþ  — ddgd|j                   gg}t        |t        «      r_|j                  j                   › d|j                  j                   › �}|j                  d|g«       |j                  d|j                  g«       t        |t        «      r|j                  d|j                  g«       t        |t        «      ri|j                  d|j                  d	›d
|j                  d	›d
|j                  › �g«       |j                  d|j                  d	›d|j                  d	›�g«       t        |dd «      }|r|j                  dt!        |«      g«       t        |dd «      }|r|j                  dt!        |«      g«       t        |dd «      }|�|j                  d|d›d�g«       t        |dd «      }|�|j                  d|d›d�g«       t        |dd «      }	|	r|j                  dt!        |	«      g«       t        |dd «      }
|
r|j                  dt!        |
«      g«       t        |dd «      }|r|j                  d|g«       ddgg}|j                  dt!        |j"                  «      g«       t        |dd «      r&|j                  d t!        |j$                  «      g«       |j                  d!t!        |j&                  «      g«       |j                  d"t!        |j(                  «      g«       t        |d#d «      }|�|j                  d$|d%›g«       t        |d&d «      }|r%|j                  d't!        t+        |«      «      g«       t-        ||› d(�¬)«      j.                  }t-        ||› d*�¬)«      j.                  }|› d+|› �S ),Nrh   ri   ÚNamerÒ   zComposite MemberszComposite TypezReturn Typerz   Ú02dú/ÚTimeú:ÚcityÚCityÚnationÚNationÚlatr~   rs   ru   Úlngr   Útz_strÚTimezoneÚday_of_weekzDay of WeekrÛ   zISO Local DatetimeÚSettingzZodiac TypeÚsidereal_modezSidereal ModezHouses SystemzPerspective TypeÚ
julian_dayz
Julian Dayz.6frX   zActive Points Countu    â€” Birth Datarp   u    â€” SettingsrA   )rÙ   rV   r   r[   r\   r…   Úcomposite_chart_typer   rÜ   r   ÚdayÚmonthrâ   ÚhourÚminuteÚgetattrrŒ   Úzodiac_typerú   Úhouses_system_nameÚperspective_typer‘   r   r’   )r;   r&   r´   Ú
birth_dataÚcomposite_membersrð   rò   rô   rõ   rö   rø   Ú	iso_localÚsettings_datarû   rX   Úbirth_tableÚsettings_tables                    r<   rc   z$ReportGenerator._subject_data_report»  sg  € Ø Ð(¨6°7·<±<Ð*@ÐAˆ
ä�gÔ4Ô5Ø#*×#8Ñ#8×#=Ñ#=Ð">¸cÀ'×BXÑBX×B]ÑB]ÐA^Ð _ÐØ×ÑÐ2Ð4EÐFÔGØ×ÑÐ/°×1MÑ1MÐNÔOä�gÔ0Ô1Ø×Ñ˜}¨g×.AÑ.AÐBÔCä�gÔ7Ô8Ø×Ñ˜v¨'¯+©+°cÐ):¸!¸G¿M¹MÈ#Ð;NÈaÐPW×P\ÑP\È~Ð'^Ð_Ô`Ø×Ñ˜v¨'¯,©,°sÐ);¸1¸W¿^¹^ÈCÐ<PÐ'QÐRÔSä�w ¨Ó-ˆÙØ×Ñ˜v¤s¨4£yÐ1Ô2ä˜ (¨DÓ1ˆÙØ×Ñ˜x¬¨V«Ð5Ô6ä�g˜u dÓ+ˆØˆ?Ø×Ñ˜z¨c°#¨Y°b¨>Ð:Ô;ä�g˜u dÓ+ˆØˆ?Ø×Ñ˜{¨s°3¨i°r¨NÐ;Ô<ä˜ (¨DÓ1ˆÙØ×Ñ˜z¬3¨v«;Ð7Ô8ä˜g }°dÓ;ˆÙØ×Ñ˜}¬c°+Ó.>Ð?Ô@ä˜GÐ%CÀTÓJˆ	ÙØ×ÑÐ3°YÐ?Ô@à# WÐ-Ð.ˆØ×Ñ˜m¬S°×1DÑ1DÓ-EÐFÔGÜ�7˜O¨TÔ2Ø× Ñ  /´3°w×7LÑ7LÓ3MÐ!NÔOØ×Ñ˜o¬s°7×3MÑ3MÓ/NÐOÔPØ×ÑÐ0´#°g×6NÑ6NÓ2OÐPÔQä˜W l°DÓ9ˆ
ØÐ!Ø× Ñ  ,°:¸cÐ2BÐ!DÔEä ¨¸$Ó?ˆÙØ× Ñ Ð"7¼¼SÀÓ=OÓ9PÐ!QÔRä  °e°W¸OÐ3LÔM×SÑSˆÜ# M¸E¸7À-Ð9PÔQ×WÑWˆØ�˜d >Ð"2Ð3Ð3r>   c           
     ó4  — | j                  |«      }|syg d¢}ddg}g d¢}g }||z   |z   D ]1  }|j                  |D �	cg c]  }	|	j                  |k(  sŒ|	‘Œ c}	«       Œ3 t        ||z   |z   «      }
|j                  |D �	cg c]  }	|	j                  |
vsŒ|	‘Œ c}	«       g d¢g}|D ]Ñ  }|j                  �|j                  d›d�nd	}|j
                  �|j
                  d
›d�nd	}|j                  rdnd}|j                  r|j                  j                  dd«      nd}|j                  |j                  j                  dd«      |j                  › d|j                  › �|j                  d›d�||||g«       ŒÓ t        ||¬«      j                  S c c}	w c c}	w )Nz#No celestial points data available.)
ÚSunÚMoonÚMercuryÚVenusÚMarsÚJupiterÚSaturnÚUranusÚNeptuneÚPlutoÚMean_North_Lunar_NodeÚTrue_North_Lunar_Node)Ú	AscendantÚMedium_CoeliÚ
DescendantÚ
Imum_Coeli)ÚPointÚSignÚPositionÚSpeedzDecl.zRet.ÚHousez+.4fu   Â°/dry   z+.2fru   ÚRú-Ú_rk   rt   rp   )Ú_collect_celestial_pointsrÄ   rÙ   ÚsetÚspeedÚdeclinationÚ
retrogradeÚhouseÚreplacer…   Úsignr†   r¦   r   r’   )r;   r&   rK   ÚpointsÚmain_planetsÚnodesÚanglesÚsorted_pointsrÙ   ÚpÚ
used_namesÚcelestial_dataÚpointÚ	speed_strÚdecl_strÚret_strÚ	house_strs                    r<   rd   z(ReportGenerator._celestial_points_reportù  s«  € Ø×/Ñ/°Ó8ˆÙØ8âuˆØ(Ð*AÐBˆÚJˆàˆØ˜\Ñ)¨EÑ1ò 	HˆDØ× Ñ ¨VÖ!F¨°q·v±vÀ³~¢!Ò!FÕGð	Hô ˜ ,Ñ.°Ñ6Ó7ˆ
Ø×Ñ¨ÖL A°1·6±6ÀÒ3KšaÒLÔMâ+kÐ*lˆØ"ò 	ˆEØ5:·[±[Ð5L˜5Ÿ;™; tÐ,¨DÑ1ÐRWˆIØ8=×8IÑ8IÐ8U˜%×+Ñ+¨DÐ1°Ñ4Ð[`ˆHØ"×-Ò-‘c°3ˆGØ9>¿º˜Ÿ™×+Ñ+¨C°Ô5È#ˆIØ×!Ñ!à—J‘J×&Ñ& s¨CÓ0Ø—z‘z�l ! E§K¡K =Ð1Ø—~‘~ cÐ*¨"Ð-ØØØØðõ
ð	ô" ˜.°Ô6×<Ñ<Ð<ùò/ "Gùò Ms   ½F
ÁF
Á?FÂFc                óä   — t        |t        «      rt        |«      S g }t        |dd «      }|s|S |D ]<  }t	        |«      j                  «       }t        ||d «      }|€Œ,|j                  |«       Œ> |S )NrX   )rV   r   r   r  rŒ   Úlowerr…   )r;   r&   r,  rX   Ú
point_nameÚ	attr_nameÚattrs          r<   r$  z)ReportGenerator._collect_celestial_points  s|   € Ü�gÔ7Ô8Ü9¸'ÓBÐBà,.ˆÜ18¸À/ÐSWÓ1XˆÙØˆMà'ò 	$ˆJÜ˜J›×-Ñ-Ó/ˆIÜ˜7 I¨tÓ4ˆDØÑØ—‘˜dÕ#ð		$ð ˆr>   c                ó~  — 	 t        |«      }|syg d¢g}|D ]f  }|j                  |j                  j	                  dd«      |j
                  › d|j                  › �|j                  d›d�|j                  d›d�g«       Œh t        |dd«      }|r|› d	|› d
�n|}t        ||¬«      j                  S # t        $ r Y yw xY w)NzNo houses data available.)r   r  r  zAbsolute Positionr#  rk   rt   ru   r  rl   ú (ú)rp   )r   Ú	Exceptionr…   rÙ   r*  r+  r†   r¦   Úabs_posr  r   r’   )r;   r&   rK   ÚhousesÚhouses_datar)  Úsystem_nameÚtable_titles           r<   re   zReportGenerator._houses_report.  sÝ   € ð	/Ü$ WÓ-ˆFñ Ø.â(ZÐ'[ˆØò 	ˆEØ×Ñà—J‘J×&Ñ& s¨CÓ0Ø—z‘z�l ! E§K¡K =Ð1Ø—~‘~ cÐ*¨"Ð-Ø—}‘} SÐ)¨Ð,ð	õð	ô ˜gÐ';¸RÓ@ˆÙ4?˜˜˜r + ¨aÑ0ÀUˆÜ˜+¨[Ô9×?Ñ?Ð?øô' ò 	/Ù.ð	/ús   ‚B0 Â0	B<Â;B<c                óà   — t        |dd «      }|syddgd|j                  › d|j                  › �gd|j                  d›d	�gd
t	        |j
                  «      gg}t        |d¬«      j                  S )NÚlunar_phaserl   zLunar Phase Informationri   rj   rk   zSun-Moon Anglert   ru   zLunation DayzLunar Phaserp   )r  Úmoon_phase_nameÚ
moon_emojiÚdegrees_between_s_mrŒ   Ú
moon_phaser   r’   )r;   r&   ÚlunarÚ
lunar_datas       r<   rf   z#ReportGenerator._lunar_phase_reportF  sˆ   € Ü˜ °Ó5ˆÙØð '¨Ð0Ø˜e×3Ñ3Ð4°A°e×6FÑ6FÐ5GÐHÐIØ %×";Ñ";¸CÐ!@ÀÐCÐDØœS ×!1Ñ!1Ó2Ð3ð	
ˆ
ô ˜*¨MÔ:×@Ñ@Ð@r>   c                ó8  — | j                   rt        | j                   dd «      sy| j                   j                  }|j                  |j                  z   |j
                  z   |j                  z   }|dk(  ryg d¢d|j                  |j                  |z  dz  d›d�gd	|j                  |j                  |z  dz  d›d�gd
|j
                  |j
                  |z  dz  d›d�gd|j                  |j                  |z  dz  d›d�gd|dgg}t        |d¬«      j                  S )NÚelement_distributionrl   r   )ÚElementÚCountrq   u	   Fire ðŸ”¥éd   ú.1frr   u
   Earth ðŸŒ�u   Air ðŸ’¨u
   Water ðŸ’§ÚTotalú100%zElement Distributionrp   )	r5   r  rP  ÚfireÚearthÚairÚwaterr   r’   )r;   ÚelemÚtotalÚelement_datas       r<   rÅ   z ReportGenerator._elements_reportS  s$  € Ø×Ò¤w¨t×/?Ñ/?ÐAWÐY]Ô'^Øà×Ñ×4Ñ4ˆØ—	‘	˜DŸJ™JÑ&¨¯©Ñ1°D·J±JÑ>ˆØ�AŠ:Øò /Ø˜$Ÿ)™)¨¯©°UÑ):¸SÑ)@À#Ð'FÀaÐ%HÐIØ˜4Ÿ:™:¨4¯:©:¸Ñ+=ÀÑ+CÀSÐ)IÈÐ'KÐLØ˜Ÿ™ t§x¡x°%Ñ'7¸#Ñ'=¸sÐ%CÀ1Ð#EÐFØ˜4Ÿ:™:¨4¯:©:¸Ñ+=ÀÑ+CÀSÐ)IÈÐ'KÐLØ�e˜VÐ$ð
ˆô ˜,Ð.DÔE×KÑKÐKr>   c                óÚ  — | j                   rt        | j                   dd «      sy| j                   j                  }|j                  |j                  z   |j
                  z   }|dk(  ryg d¢d|j                  |j                  |z  dz  d›d�gd	|j                  |j                  |z  dz  d›d�gd
|j
                  |j
                  |z  dz  d›d�gd|dgg}t        |d¬«      j                  S )NÚquality_distributionrl   r   )ÚQualityrR  rq   ÚCardinalrS  rT  rr   ÚFixedÚMutablerU  rV  zQuality Distributionrp   )r5   r  r_  ÚcardinalÚfixedÚmutabler   r’   )r;   Úqualr\  Úquality_datas       r<   rÆ   z!ReportGenerator._qualities_reportf  sõ   € Ø×Ò¤w¨t×/?Ñ/?ÐAWÐY]Ô'^Øà×Ñ×4Ñ4ˆØ—‘ §
¡
Ñ*¨T¯\©\Ñ9ˆØ�AŠ:Øò /Ø˜Ÿ™¨D¯M©M¸EÑ,AÀCÑ,GÈÐ*MÈQÐ(OÐPØ�d—j‘j d§j¡j°5Ñ&8¸3Ñ&>ÀÐ$DÀAÐ"FÐGØ˜Ÿ™¨$¯,©,¸Ñ*>ÀÑ*DÀcÐ(JÈ!Ð&LÐMØ�e˜VÐ$ð
ˆô ˜,Ð.DÔE×KÑKÐKr>   c                ól  — | j                   s| j                  syg }| j                   roddgg}t        | j                   d¬«      D ]*  \  }}|j                  t	        |«      t	        |«      g«       Œ, |j                  t        |d¬«      j                  «       | j                  r‚dd	gg}| j                  D ]H  }t	        |j                  d
d«      «      }|j                  d«      }|�|› nd}	|j                  ||	g«       ŒJ |j                  t        |d¬«      j                  «       dj                  |«      S )Nrl   ú#zActive Pointro   )ÚstartzActive Celestial Pointsrp   ÚAspectu   Orb (Â°)rÙ   Úorbr"  zActive Aspects ConfigurationrA   )	r8   r9   Ú	enumerater…   rŒ   r   r’   ÚgetrI   )
r;   rJ   Úpoints_tableÚidxr4  Úaspects_tabler_   rÙ   rm  Ú	orbit_strs
             r<   rÇ   z,ReportGenerator._active_configuration_reportx  s  € Ø×"Ò"¨4×+?Ò+?Øà ˆà×ÒØ  .Ð1Ð2ˆLÜ'¨×(;Ñ(;À1ÔEò <‘
��UØ×#Ñ#¤S¨£X¬s°5«zÐ$:Õ;ð<à�O‰OœJ |Ð;TÔU×[Ñ[Ô\à×ÒØ&¨
Ð3Ð4ˆMØ×.Ñ.ò 8�Ü˜6Ÿ:™: f¨bÓ1Ó2�Ø—j‘j Ó'�Ø(+¨˜s™e¸S�	Ø×$Ñ$ d¨IÐ%6Õ7ð	8ð
 �O‰OœJ }Ð<ZÔ[×aÑaÔbà�{‰{˜8Ó$Ð$r>   c          
     ó6  — | j                   rt        | j                   dd «      syt        | j                   j                  «      }|syt	        |«      }|�|d | }t        | j                   t        «      }|rg d¢}ng d¢}|g}|D �]b  }t        |j                  «      }t        j                  |j                  «       |«      }	t        j                  |j                  d«      }
|j                  › d|
› �j                  «       }|r~|j                  |j                   j#                  dd«      |j$                  |j                  › d|	› �|j&                  j#                  dd«      |j(                  |j*                  d›d	�|g«       Œü|j                  |j                   j#                  dd«      |j                  › d|	› �|j&                  j#                  dd«      |j*                  d›d	�|g«       �Œe |�d
t	        |«      › d|› d�nd}d|› �}t-        ||¬«      j.                  S )NÚaspectsrl   zNo aspects data available.)úPoint 1zOwner 1rl  úPoint 2zOwner 2ÚOrbÚMovement)rv  rl  rw  rx  ry  rk   r#  rt   ru   z
 (showing z of r@  ÚAspectsrp   )r5   r  rW   ru  r‘   rV   r   rŒ   r_   ÚASPECT_SYMBOLSro  r:  ÚMOVEMENT_SYMBOLSÚaspect_movementrH   r…   Úp1_namer*  Úp1_ownerÚp2_nameÚp2_ownerÚorbitr   r’   )r;   r.   Úaspects_listÚtotal_aspectsÚis_dualÚtable_headerrr  r_   Úaspect_nameÚsymbolÚmovement_symbolÚmovementÚsuffixrK   s                 r<   rÈ   zReportGenerator._aspects_report�  s	  € Ø×Ò¤w¨t×/?Ñ/?ÀÈDÔ'QØä˜D×,Ñ,×4Ñ4Ó5ˆáØ/ä˜LÓ)ˆØÐ"Ø'¨¨Ð5ˆLä˜T×-Ñ-Ô/AÓBˆÙÚ&o‰LâNˆLà*6¨ˆØ"ó 	ˆFÜ˜fŸm™mÓ,ˆKÜ#×'Ñ'¨×(9Ñ(9Ó(;¸[ÓIˆFÜ.×2Ñ2°6×3IÑ3IÈ2ÓNˆOØ ×0Ñ0Ð1°°?Ð2CÐD×JÑJÓLˆHáØ×$Ñ$àŸ™×.Ñ.¨s°CÓ8ØŸ™Ø!Ÿ=™=˜/¨¨6¨(Ð3ØŸ™×.Ñ.¨s°CÓ8ØŸ™Ø!Ÿ<™<¨Ð,¨BÐ/Ø ðõ
ð ×$Ñ$àŸ™×.Ñ.¨s°CÓ8Ø!Ÿ=™=˜/¨¨6¨(Ð3ØŸ™×.Ñ.¨s°CÓ8Ø!Ÿ<™<¨Ð,¨BÐ/Ø ðöð'	ð: JUÐI`�:œc ,Ó/Ð0°°]°OÀ1ÑEÐfhˆØ˜&˜Ð"ˆÜ˜-¨uÔ5×;Ñ;Ð;r>   c           	     ó  — t        | j                  t        «      r| j                  j                  sy| j                  j                  }g }|j	                  | j                  |j                  |j                  › d|j                  › d�«      «       |j	                  | j                  |j                  |j                  › d|j                  › d�«      «       |j                  rE|j	                  | j                  |j                  |j                  › d|j                  › d�«      «       |j                  rE|j	                  | j                  |j                  |j                  › d|j                  › d�«      «       dj                  d„ |D «       «      S )Nrl   z points in z housesz
 cusps in rA   c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­wr0   © )Ú.0rL   s     r<   ú	<genexpr>z;ReportGenerator._house_comparison_report.<locals>.<genexpr>é  s   è ø€ ÒF wºgœ7ÑFùs   ‚Š)rV   r5   r   Úhouse_comparisonr…   Ú_render_point_in_house_tableÚfirst_points_in_second_housesÚfirst_subject_nameÚsecond_subject_nameÚsecond_points_in_first_housesÚfirst_cusps_in_second_housesÚ_render_cusp_in_house_tableÚsecond_cusps_in_first_housesrI   )r;   Ú
comparisonrJ   s      r<   rË   z(ReportGenerator._house_comparison_reportÄ  sq  € Ü˜$×*Ñ*Ô,>Ô?Àt×GWÑGW×GhÒGhØà×%Ñ%×6Ñ6ˆ
Øˆà�‰Ø×-Ñ-Ø×8Ñ8Ø×0Ñ0Ð1°¸Z×=[Ñ=[Ð<\Ð\cÐdóô	
ð 	�‰Ø×-Ñ-Ø×8Ñ8Ø×1Ñ1Ð2°+¸j×>[Ñ>[Ð=\Ð\cÐdóô	
ð ×2Ò2Ø�O‰OØ×0Ñ0Ø×;Ñ;Ø!×4Ñ4Ð5°ZÀ
×@^Ñ@^Ð?_Ð_fÐgóôð ×2Ò2Ø�O‰OØ×0Ñ0Ø×;Ñ;Ø!×5Ñ5Ð6°jÀ×A^ÑA^Ð@_Ð_fÐgóôð �{‰{ÑF°(ÔFÓFÐFr>   c           	     ó°  — |syg d¢g}|D ]³  }d}|j                   €|j                  r$|j                   xs d› d|j                  xs d› d�}|j                  › d|j                  › d�}|j	                  |j
                  › d|j                  j                  dd«      › �|||j                  |j                  d	›d
�g«       Œµ t        ||¬«      j                  S )Nrl   )r  zOwner HouseúProjected Houser  ÚDegreer"  r?  r@  õ    â€“ r#  rk   rt   ru   rp   )Úpoint_owner_house_numberÚpoint_owner_house_nameÚprojected_house_numberÚprojected_house_namer…   Úpoint_owner_namer;  r*  Ú
point_signÚpoint_degreer   r’   )r;   r,  rK   Ú
table_datar4  Úowner_houseÚprojected_houses          r<   r’  z,ReportGenerator._render_point_in_house_tableë  sù   € ÙØâ'dÐ&eˆ
Øò 	ˆEØˆKØ×-Ñ-Ð9¸U×=YÒ=YØ!&×!?Ñ!?Ò!FÀ3Ð GÀrÈ%×JfÑJfÒJmÐjmÐInÐnoÐp�à!&×!=Ñ!=Ð >¸bÀ×A[ÑA[Ð@\Ð\]Ð^ˆOØ×Ñà×-Ñ-Ð.¨e°E×4DÑ4D×4LÑ4LÈSÐRUÓ4VÐ3WÐXØØ#Ø×$Ñ$Ø×)Ñ)¨#Ð.¨bÐ1ðõð	ô  ˜*¨EÔ2×8Ñ8Ð8r>   c           	     ó2  — |syg d¢g}|D ]t  }|j                   › d|j                  › d�}|j                  |j                  › d|j                  j                  dd«      › �||j                  |j                  d›d	�g«       Œv t        ||¬
«      j                  S )Nrl   )r  rœ  r  r�  r?  r@  rž  r#  rk   rt   ru   rp   )
r¡  r¢  r…   r£  r;  r*  r¤  r¥  r   r’   )r;   r,  rK   r¦  r4  r¨  s         r<   r˜  z+ReportGenerator._render_cusp_in_house_table  s±   € ÙØâ'UÐ&Vˆ
Øò 		ˆEØ!&×!=Ñ!=Ð >¸bÀ×A[ÑA[Ð@\Ð\]Ð^ˆOØ×Ñà×-Ñ-Ð.¨e°E×4DÑ4D×4LÑ4LÈSÐRUÓ4VÐ3WÐXØ#Ø×$Ñ$Ø×)Ñ)¨#Ð.¨bÐ1ð	õð		ô ˜*¨EÔ2×8Ñ8Ð8r>   c           	     ó”  — t        | j                  t        «      syt        | j                  dd «      }|syddgdt	        |j
                  «      gdt	        |j                  «      gd|j                  rdnd	gg}t        |d
¬«      j                  g}|j                  r�g d¢g}|j                  D ]c  }|j                  |j                  j                  dd«      |j                  |j                  j                  dd«      |j                   d›d�g«       Œe |j                  t        |d¬«      j                  «       dj#                  |«      S )Nrl   Úrelationship_scoreÚMetricri   ÚScoreÚDescriptionzDestiny Signaturer€   r�   zRelationship Score Summaryrp   )rv  rl  rw  rx  r#  rk   rt   ru   zScore Supporting AspectsrA   )rV   r5   r   r  rŒ   Úscore_valueÚscore_descriptionÚis_destiny_signr   r’   ru  r…   r~  r*  r_   r€  r‚  rI   )r;   ÚscoreÚsummary_tablerJ   rr  r_   s         r<   rÌ   z*ReportGenerator._relationship_score_report  s3  € Ü˜$×*Ñ*Ô,>Ô?Øä29¸$×:JÑ:JÐL`ÐbfÓ2gˆÙØð �wÐØ”c˜%×+Ñ+Ó,Ð-ØœC × 7Ñ 7Ó8Ð9Ø ¨5×+@Ò+@¡%ÀdÐKð	
ˆô ˜}Ð4PÔQ×WÑWÐXˆà�=Š=Ú.UÐ-VˆMØŸ-™-ò �Ø×$Ñ$àŸ™×.Ñ.¨s°CÓ8ØŸ™ØŸ™×.Ñ.¨s°CÓ8Ø!Ÿ<™<¨Ð,¨BÐ/ð	õðð �O‰OœJ }Ð<VÔW×]Ñ]Ô^à�{‰{˜8Ó$Ð$r>   c                óp   — | sy 	 t        j                  | «      j                  d«      S # t        $ r Y y w xY w)Nz%Y©r   ÚfromisoformatÚstrftimeÚ
ValueError©Úiso_datetimes    r<   rÚ   zReportGenerator._extract_year8  s;   € áØð	Ü×)Ñ)¨,Ó7×@Ñ@ÀÓFÐFøÜò 	Ùð	ús   …#) ©	5´5c                ót   — | sy	 t        j                  | «      j                  d«      S # t        $ r | cY S w xY w)z¤
        Format datetime in dd/mm/yyyy format.

        .. deprecated::
            Use _format_date_iso() for internationally unambiguous date formatting.
        rl   z%d/%m/%Yrµ  r¹  s    r<   Ú_format_datezReportGenerator._format_dateA  s@   € ñ Øð	 Ü×)Ñ)¨,Ó7×@Ñ@ÀÓLÐLøÜò 	 ØÒð	 úó   …#) ©7¶7c                ót   — | sy	 t        j                  | «      j                  d«      S # t        $ r | cY S w xY w)z™
        Format datetime in ISO 8601 format (YYYY-MM-DD).

        This format is internationally unambiguous and follows the ISO 8601 standard.
        rl   z%Y-%m-%drµ  r¹  s    r<   rÝ   z ReportGenerator._format_date_isoP  s@   € ñ Øð	 Ü×)Ñ)¨,Ó7×@Ñ@ÀÓLÐLøÜò 	 ØÒð	 úr½  )r1   zGUnion[ChartDataModel, AstrologicalSubjectModel, MoonPhaseOverviewModel]r-   Úboolr.   úOptional[int]ÚreturnÚNone)r-   úOptional[bool]r.   rÀ  rÁ  rŒ   )r-   rÃ  r.   rÀ  rÁ  rÂ  )rÁ  rÂ  )rÁ  ú	List[str])r-   r¿  r.   rÀ  rÁ  rÄ  )rÁ  rŒ   )rÁ  zTuple[str, str])r&   ÚSubjectLiker´   rŒ   rÁ  rŒ   )r&   rÅ  rK   rŒ   rÁ  rŒ   )r&   rÅ  rÁ  zList[KerykeionPointModel])r&   rÅ  rÁ  rŒ   )r.   rÀ  rÁ  rŒ   )r,  zSequence[PointInHouseModel]rK   rŒ   rÁ  rŒ   )rº  úOptional[str]rÁ  rÆ  )rº  rÆ  rÁ  rŒ   ) Ú__name__Ú
__module__Ú__qualname__Ú__doc__r=   rN   rQ   r:   rD   rC   rE   rF   rG   rÃ   rÊ   rc   rd   r$  re   rf   rÅ   rÆ   rÇ   rÈ   rË   r’  r˜  rÌ   ÚstaticmethodrÚ   r¼  rÝ   rŽ  r>   r<   r+   r+   .   sK  „ ñð !%Ø%)ñàVðð ð	ð
 #ðð 
óð8 +/Ø%)ñ	*ð (ð*ð #ð	*ð
 
ó*ð@ +/Ø%)ñ		^ð (ð	^ð #ð		^ð
 
ó	^ó lóLópód%óN*ó`1=óf/ó6ó<4ó|"=óHó"@ó0AóLó&Ló$%ó.3<ój%GóN9ó.9ó$%ðH òó ðð ò ó ð ð ò ó ñ r>   r+   Ú__main__)ÚAstrologicalSubjectFactory)ÚChartDataFactory)ÚCompositeSubjectFactory)ÚPlanetaryReturnFactoryÚ	LiverpoolÚGBgÜ×�sF´J@gtµûËîÀzEurope/LondonFzSample Natal SubjectiÆ  é   é   é   é-   )rÙ   râ   rþ   rý   rÿ   r   rð   rò   rô   rõ   rö   ÚonlinezYoko Onoi�  é   é   é   é   ÚTokyoÚJPgÇº¸�ÖA@g×òAÏta@z
Asia/Tokyoz1980 Transiti¼  é   é   é   é2   zNew YorkÚUSg^KÈ=[D@gªñÒMb€RÀzAmerica/New_York)rð   rò   rô   rõ   rö   r×  rÔ   zJohn & Yoko Composite Chart)Ú
chart_namez7
======================================================u/   AstrologicalSubjectModel Report â€” John Lennonz6======================================================)r-   z:
=========================================================u3   SingleChartDataModel Report (Natal) â€” John Lennonz9=========================================================zB
=================================================================u7   SingleChartDataModel Report (Composite) â€” John & YokozA=================================================================z@
===============================================================u;   SingleChartDataModel Report (Single Return) â€” John Lennonz?===============================================================z;
==========================================================u3   DualChartDataModel Report (Transit) â€” John Lennonz:==========================================================z=
============================================================u4   DualChartDataModel Report (Synastry) â€” John & Yokoz<============================================================u7   DualChartDataModel Report (Dual Return) â€” John LennonN)KÚ
__future__r   r   Útypingr   r   r   r   r	   r
   Úsimple_ascii_tablesr   Úkerykeion.utilitiesr   r   Úkerykeion.schemas.kr_modelsr   r   r   r   r   r   r   r   r   r   r{  r|  rÅ  ÚLiteralReportKindr+   rÇ  Ú&kerykeion.astrological_subject_factoryrÍ  Úkerykeion.chart_data_factoryrÎ  Ú#kerykeion.composite_subject_factoryrÏ  Ú"kerykeion.planetary_return_factoryrÐ  Ú	john_cityÚjohn_nationÚjohn_latÚjohn_lngÚjohn_tzÚoffline_onlineÚfrom_birth_dataÚnatal_subjectÚpartner_subjectÚtransit_subjectrð   rò   rô   rõ   rö   Úreturn_factoryÚ#next_return_from_iso_formatted_timerÛ   Úsolar_return_subjectÚ$get_midpoint_composite_subject_modelÚcomposite_subjectÚcreate_natal_chart_dataÚnatal_chart_dataÚcreate_composite_chart_dataÚcomposite_chart_dataÚ%create_single_wheel_return_chart_dataÚsingle_return_chart_dataÚcreate_transit_chart_dataÚtransit_chart_dataÚcreate_synastry_chart_dataÚsynastry_chart_dataÚcreate_return_chart_dataÚdual_return_chart_datarP   rQ   rŽ  r>   r<   ú<module>r	     s«  ðÝ "å ß B× Bå *ç W÷÷ ÷ ð ØØØØØØØØñ
€ð ØØñÐ ð Ð,Ð.CÐEVÐVÑW€ØÐZÑ[Ð ÷n ñ n ðb ˆzÓÝQÝ=ÝKÝIð €IØ€KØ€HØ€HØ€GØ€Nð ?Ð.×>Ñ>Ø#ØØØØØØØØØØØô€Mð  AÐ0×@Ñ@ØØØØØØØØØØØØô€Oð  AÐ0×@Ñ@ØØØØØØØØØØØ!Øô€Oñ  ,ØØ×ÑØ×#Ñ#Ø×ÑØ×ÑØ×#Ñ#Øô€Nð *×MÑMØ×2Ñ2ØóÐñ
 0ØØØ0ô÷ +Ñ*Ó,ð	 ð @Ð'×?Ñ?ÀÓNÐØGÐ+×GÑGÐHYÓZÐØUÐ/×UÑUÐVjÓkÐØCÐ)×CÑCÀMÐSbÓcÐØEÐ*×EÑEÀmÐUdÓeÐØFÐ-×FÑFÀ}ÐVjÓkÐñ 
ˆ/ÔÙ	Ð
;Ô<Ù	ˆ(„OÙ�M°5Ô9×FÑFÐW\ÐFÔ]á	ˆ/ÔÙ	Ð
?Ô@Ù	ˆ(„OÙÐ$Ó%×2Ñ2Ô4á	ˆ/ÔÙ	Ð
CÔDÙ	ˆ(„OÙÐ(Ó)×6Ñ6Ô8á	ˆ/ÔÙ	Ð
GÔHÙ	ˆ(„OÙÐ,Ó-×:Ñ:Ô<á	ˆ/ÔÙ	Ð
?Ô@Ù	ˆ(„OÙÐ&Ó'×4Ñ4Ô6á	ˆ/ÔÙ	Ð
@ÔAÙ	ˆ(„OÙÐ'Ó(×5Ñ5Ô7á	ˆ/ÔÙ	Ð
CÔDÙ	ˆ(„OÙÐ*Ó+×8Ñ8Õ:ð{ r>   