kerykeion.transits_time_range
1from typing import Optional, Union, List 2from datetime import datetime, timedelta 3from kerykeion import AstrologicalSubject, SynastryAspects 4from kerykeion.ephemeris_data import EphemerisDataFactory 5from kerykeion.kr_types.kr_literals import AxialCusps, Planet 6from kerykeion.kr_types.kr_models import ActiveAspect, TransitMomentModel, TransitsTimeRangeModel 7from kerykeion.settings.config_constants import DEFAULT_ACTIVE_POINTS, DEFAULT_ACTIVE_ASPECTS 8 9 10class TransitsTimeRangeFactory: 11 """ 12 Factory class for generating astrological transit data over a period of time. 13 14 This class compares the positions of celestial bodies at different points in time 15 with the natal chart of an astrological subject to identify significant aspects 16 and produces structured models containing the transit data. 17 18 Attributes: 19 natal_chart: The natal chart of the subject for whom transits are calculated. 20 ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. 21 active_points: List of celestial points to consider when calculating aspects. 22 active_aspects: List of aspect types to consider when analyzing planetary relationships. 23 settings_file: Path to custom settings file for aspect calculations (optional). 24 """ 25 26 def __init__( 27 self, 28 natal_chart: AstrologicalSubject, 29 ephemeris_data_points: List[AstrologicalSubject], 30 active_points: List[Union[AxialCusps, Planet]] = DEFAULT_ACTIVE_POINTS, 31 active_aspects: List[ActiveAspect] = DEFAULT_ACTIVE_ASPECTS, 32 settings_file: Optional[str] = None 33 ): 34 """ 35 Initialize the TransitMomentsFactory with the necessary data. 36 37 Args: 38 natal_chart: The natal chart of the subject for whom transits are calculated. 39 ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. 40 active_points: List of celestial points to consider when calculating aspects. 41 active_aspects: List of aspect types to consider when analyzing planetary relationships. 42 settings_file: Path to custom settings file for aspect calculations (optional). 43 """ 44 self.natal_chart = natal_chart 45 self.ephemeris_data_points = ephemeris_data_points 46 self.active_points = active_points 47 self.active_aspects = active_aspects 48 self.settings_file = settings_file 49 50 def get_transit_moments(self) -> TransitsTimeRangeModel: 51 """ 52 Generate a model of transit moments for the given subject across all ephemeris data points. 53 54 This method compares the positions of celestial bodies at different points in time 55 with the natal chart of the subject to identify significant aspects and 56 compiles them into a structured model for analysis. 57 58 Returns: 59 TransitMomentsListModel: A model containing all transit data, including aspects, 60 dates, and subject information. 61 """ 62 transit_moments = [] 63 64 for ephemeris_point in self.ephemeris_data_points: 65 # Calculate aspects between transit positions and natal chart 66 aspects = SynastryAspects( 67 ephemeris_point, 68 self.natal_chart, 69 active_points=self.active_points, 70 active_aspects=self.active_aspects, 71 new_settings_file=self.settings_file, 72 ).relevant_aspects 73 74 # Create a transit moment for this point in time 75 transit_moments.append( 76 TransitMomentModel( 77 date=ephemeris_point.iso_formatted_utc_datetime, 78 aspects=aspects, 79 ) 80 ) 81 82 # Create and return the complete transits model 83 return TransitsTimeRangeModel( 84 dates=[point.iso_formatted_utc_datetime for point in self.ephemeris_data_points], 85 subject=self.natal_chart.model(), 86 transits=transit_moments 87 ) 88 89 90if __name__ == "__main__": 91 # Create a natal chart for the subject 92 person = AstrologicalSubject( 93 "Johnny Depp", 1963, 6, 9, 20, 15, "Owensboro", "US" 94 ) 95 96 # Define the time period for transit calculation 97 start_date = datetime.now() 98 end_date = datetime.now() + timedelta(days=30) 99 100 # Create ephemeris data for the specified time period 101 ephemeris_factory = EphemerisDataFactory( 102 start_datetime=start_date, 103 end_datetime=end_date, 104 step_type="days", 105 step=1, 106 lat=person.lat, 107 lng=person.lng, 108 tz_str=person.tz_str, 109 ) 110 111 ephemeris_data_points = ephemeris_factory.get_ephemeris_data_as_astrological_subjects() 112 113 # Calculate transits for the subject 114 transit_factory = TransitsTimeRangeFactory( 115 natal_chart=person, 116 ephemeris_data_points=ephemeris_data_points, 117 ) 118 119 transit_results = transit_factory.get_transit_moments() 120 121 # Print example data 122 print(transit_results.model_dump()["dates"][2]) 123 print(transit_results.model_dump()["transits"][2]['date']) 124 print(transit_results.model_dump()["transits"][2]['aspects'][0])
11class TransitsTimeRangeFactory: 12 """ 13 Factory class for generating astrological transit data over a period of time. 14 15 This class compares the positions of celestial bodies at different points in time 16 with the natal chart of an astrological subject to identify significant aspects 17 and produces structured models containing the transit data. 18 19 Attributes: 20 natal_chart: The natal chart of the subject for whom transits are calculated. 21 ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. 22 active_points: List of celestial points to consider when calculating aspects. 23 active_aspects: List of aspect types to consider when analyzing planetary relationships. 24 settings_file: Path to custom settings file for aspect calculations (optional). 25 """ 26 27 def __init__( 28 self, 29 natal_chart: AstrologicalSubject, 30 ephemeris_data_points: List[AstrologicalSubject], 31 active_points: List[Union[AxialCusps, Planet]] = DEFAULT_ACTIVE_POINTS, 32 active_aspects: List[ActiveAspect] = DEFAULT_ACTIVE_ASPECTS, 33 settings_file: Optional[str] = None 34 ): 35 """ 36 Initialize the TransitMomentsFactory with the necessary data. 37 38 Args: 39 natal_chart: The natal chart of the subject for whom transits are calculated. 40 ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. 41 active_points: List of celestial points to consider when calculating aspects. 42 active_aspects: List of aspect types to consider when analyzing planetary relationships. 43 settings_file: Path to custom settings file for aspect calculations (optional). 44 """ 45 self.natal_chart = natal_chart 46 self.ephemeris_data_points = ephemeris_data_points 47 self.active_points = active_points 48 self.active_aspects = active_aspects 49 self.settings_file = settings_file 50 51 def get_transit_moments(self) -> TransitsTimeRangeModel: 52 """ 53 Generate a model of transit moments for the given subject across all ephemeris data points. 54 55 This method compares the positions of celestial bodies at different points in time 56 with the natal chart of the subject to identify significant aspects and 57 compiles them into a structured model for analysis. 58 59 Returns: 60 TransitMomentsListModel: A model containing all transit data, including aspects, 61 dates, and subject information. 62 """ 63 transit_moments = [] 64 65 for ephemeris_point in self.ephemeris_data_points: 66 # Calculate aspects between transit positions and natal chart 67 aspects = SynastryAspects( 68 ephemeris_point, 69 self.natal_chart, 70 active_points=self.active_points, 71 active_aspects=self.active_aspects, 72 new_settings_file=self.settings_file, 73 ).relevant_aspects 74 75 # Create a transit moment for this point in time 76 transit_moments.append( 77 TransitMomentModel( 78 date=ephemeris_point.iso_formatted_utc_datetime, 79 aspects=aspects, 80 ) 81 ) 82 83 # Create and return the complete transits model 84 return TransitsTimeRangeModel( 85 dates=[point.iso_formatted_utc_datetime for point in self.ephemeris_data_points], 86 subject=self.natal_chart.model(), 87 transits=transit_moments 88 )
Factory class for generating astrological transit data over a period of time.
This class compares the positions of celestial bodies at different points in time with the natal chart of an astrological subject to identify significant aspects and produces structured models containing the transit data.
Attributes: natal_chart: The natal chart of the subject for whom transits are calculated. ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. active_points: List of celestial points to consider when calculating aspects. active_aspects: List of aspect types to consider when analyzing planetary relationships. settings_file: Path to custom settings file for aspect calculations (optional).
27 def __init__( 28 self, 29 natal_chart: AstrologicalSubject, 30 ephemeris_data_points: List[AstrologicalSubject], 31 active_points: List[Union[AxialCusps, Planet]] = DEFAULT_ACTIVE_POINTS, 32 active_aspects: List[ActiveAspect] = DEFAULT_ACTIVE_ASPECTS, 33 settings_file: Optional[str] = None 34 ): 35 """ 36 Initialize the TransitMomentsFactory with the necessary data. 37 38 Args: 39 natal_chart: The natal chart of the subject for whom transits are calculated. 40 ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. 41 active_points: List of celestial points to consider when calculating aspects. 42 active_aspects: List of aspect types to consider when analyzing planetary relationships. 43 settings_file: Path to custom settings file for aspect calculations (optional). 44 """ 45 self.natal_chart = natal_chart 46 self.ephemeris_data_points = ephemeris_data_points 47 self.active_points = active_points 48 self.active_aspects = active_aspects 49 self.settings_file = settings_file
Initialize the TransitMomentsFactory with the necessary data.
Args: natal_chart: The natal chart of the subject for whom transits are calculated. ephemeris_data_points: List of ephemeris data points representing planetary positions at different times. active_points: List of celestial points to consider when calculating aspects. active_aspects: List of aspect types to consider when analyzing planetary relationships. settings_file: Path to custom settings file for aspect calculations (optional).
51 def get_transit_moments(self) -> TransitsTimeRangeModel: 52 """ 53 Generate a model of transit moments for the given subject across all ephemeris data points. 54 55 This method compares the positions of celestial bodies at different points in time 56 with the natal chart of the subject to identify significant aspects and 57 compiles them into a structured model for analysis. 58 59 Returns: 60 TransitMomentsListModel: A model containing all transit data, including aspects, 61 dates, and subject information. 62 """ 63 transit_moments = [] 64 65 for ephemeris_point in self.ephemeris_data_points: 66 # Calculate aspects between transit positions and natal chart 67 aspects = SynastryAspects( 68 ephemeris_point, 69 self.natal_chart, 70 active_points=self.active_points, 71 active_aspects=self.active_aspects, 72 new_settings_file=self.settings_file, 73 ).relevant_aspects 74 75 # Create a transit moment for this point in time 76 transit_moments.append( 77 TransitMomentModel( 78 date=ephemeris_point.iso_formatted_utc_datetime, 79 aspects=aspects, 80 ) 81 ) 82 83 # Create and return the complete transits model 84 return TransitsTimeRangeModel( 85 dates=[point.iso_formatted_utc_datetime for point in self.ephemeris_data_points], 86 subject=self.natal_chart.model(), 87 transits=transit_moments 88 )
Generate a model of transit moments for the given subject across all ephemeris data points.
This method compares the positions of celestial bodies at different points in time with the natal chart of the subject to identify significant aspects and compiles them into a structured model for analysis.
Returns: TransitMomentsListModel: A model containing all transit data, including aspects, dates, and subject information.