2121
2222from immanuel .classes import wrap
2323from immanuel .classes .localize import _
24- from immanuel .const import chart , names
25- from immanuel .reports import aspect , pattern
24+ from immanuel .const import calc , chart , names
25+ from immanuel .reports import aspect , dignity , pattern , weighting
2626from immanuel .setup import settings
2727from immanuel .tools import calculate , convert , date , ephemeris , forecast , midpoint , position
2828
@@ -50,6 +50,19 @@ def __init__(self, type: int, aspects_to: 'Chart' = None) -> None:
5050 self .type = _ (names .CHART_TYPES [type ])
5151 self ._type = type
5252 self ._aspects_to = aspects_to
53+
54+ self ._native : Subject
55+ self ._obliquity : float
56+ self ._diurnal : bool
57+ self ._moon_phase : int
58+ self ._triad : dict = {
59+ chart .SUN : None ,
60+ chart .MOON : None ,
61+ chart .ASC : None ,
62+ }
63+ self ._objects : dict
64+ self ._houses : dict
65+
5366 self .generate ()
5467 self .wrap ()
5568
@@ -60,14 +73,9 @@ def house_for(self, object: wrap.Object) -> int:
6073 return position .house (object .longitude .raw , self ._houses )['index' ]
6174
6275 def generate (self ) -> None :
63- """ Generating the raw data is each descendant class's responsibility,
64- but placeholders for properties common to all charts are set here. """
65- self ._native : Subject = None
66- self ._obliquity : float = None
67- self ._diurnal : bool = None
68- self ._moon_phase : int = None
69- self ._objects : dict = {}
70- self ._houses : dict = {}
76+ """ Generating the raw data is each descendant class's
77+ responsibility. """
78+ pass
7179
7280 def wrap (self ) -> None :
7381 """ Loop through the required data and wrap each one with a custom
@@ -95,30 +103,54 @@ def set_wrapped_moon_phase(self) -> None:
95103
96104 def set_wrapped_objects (self ) -> None :
97105 self .objects = {}
106+
98107 for index , object in self ._objects .items ():
99- if 'jd' in object :
100- object ['date_time' ] = date .to_datetime (
101- dt = object ['jd' ],
102- lat = self ._native .latitude ,
103- lon = self ._native .longitude ,
104- )
105- self .objects [index ] = wrap .Object (
108+ house = position .house (
106109 object = object ,
107- objects = self ._objects ,
108110 houses = self ._houses ,
109- is_daytime = self ._diurnal ,
111+ )
112+ out_of_bounds = calculate .is_out_of_bounds (
113+ object = object ,
110114 obliquity = self ._obliquity ,
111115 )
116+ in_sect = calculate .is_in_sect (
117+ object = object ,
118+ is_daytime = self ._diurnal ,
119+ sun = self ._triad [chart .SUN ],
120+ ) if object ['index' ] in (chart .SUN , chart .MOON , chart .MERCURY , chart .VENUS , chart .MARS , chart .JUPITER , chart .SATURN ) else None
121+ dignity_state = dignity .all (
122+ object = object ,
123+ objects = self ._objects ,
124+ is_daytime = self ._diurnal ,
125+ ) if object ['type' ] == chart .PLANET and self ._diurnal and calc .PLANETS .issubset (self ._objects ) else None
126+ date_time = date .to_datetime (
127+ dt = object ['jd' ],
128+ lat = self ._native .latitude ,
129+ lon = self ._native .longitude ,
130+ ) if 'jd' in object else None
131+
132+ self .objects [index ] = wrap .Object (
133+ object = object ,
134+ date_time = date_time ,
135+ house = house ,
136+ out_of_bounds = out_of_bounds ,
137+ in_sect = in_sect ,
138+ dignity_state = dignity_state ,
139+ )
112140
113141 def set_wrapped_houses (self ) -> None :
114142 self .houses = {index : wrap .Object (object = house ) for index , house in self ._houses .items ()}
115143
116144 def set_wrapped_aspects (self ) -> None :
117145 aspects = aspect .all (self ._objects ) if self ._aspects_to is None else aspect .synastry (self ._objects , self ._aspects_to ._objects )
118- self .aspects = {index : {object_index : wrap .Aspect (aspect = object_aspect , objects = self ._objects ) for object_index , object_aspect in aspect_list .items ()} for index , aspect_list in aspects .items ()}
146+ self .aspects = {index : {object_index : wrap .Aspect (aspect = object_aspect , active_name = self ._objects [ object_aspect [ 'active' ]][ 'name' ], passive_name = self . _objects [ object_aspect [ 'passive' ]][ 'name' ] ) for object_index , object_aspect in aspect_list .items ()} for index , aspect_list in aspects .items ()}
119147
120148 def set_wrapped_weightings (self ) -> None :
121- self .weightings = wrap .Weightings (self ._objects , self ._houses )
149+ self .weightings = wrap .Weightings (
150+ elements = weighting .elements (self ._objects ),
151+ modalities = weighting .modalities (self ._objects ),
152+ quadrants = weighting .quadrants (self ._objects , self ._houses ),
153+ )
122154
123155
124156class Natal (Chart ):
@@ -131,18 +163,18 @@ def __init__(self, native: Subject, aspects_to: Chart = None) -> None:
131163 def generate (self ) -> None :
132164 self ._obliquity = ephemeris .obliquity (self ._native .julian_date )
133165
134- sun = ephemeris .planet (chart .SUN , self ._native .julian_date )
135- moon = ephemeris .planet (chart .MOON , self ._native .julian_date )
136- asc = ephemeris .angle (
166+ self . _triad [ chart . SUN ] = ephemeris .planet (chart .SUN , self ._native .julian_date )
167+ self . _triad [ chart . MOON ] = ephemeris .planet (chart .MOON , self ._native .julian_date )
168+ self . _triad [ chart . ASC ] = ephemeris .angle (
137169 index = chart .ASC ,
138170 jd = self ._native .julian_date ,
139171 lat = self ._native .latitude ,
140172 lon = self ._native .longitude ,
141173 house_system = settings .house_system ,
142174 )
143175
144- self ._diurnal = calculate .is_daytime (sun , asc )
145- self ._moon_phase = calculate .moon_phase (sun , moon )
176+ self ._diurnal = calculate .is_daytime (self . _triad [ chart . SUN ], self . _triad [ chart . ASC ] )
177+ self ._moon_phase = calculate .moon_phase (self . _triad [ chart . SUN ], self . _triad [ chart . MOON ] )
146178 self ._objects = ephemeris .objects (
147179 object_list = settings .objects ,
148180 jd = self ._native .julian_date ,
@@ -177,18 +209,18 @@ def generate(self) -> None:
177209 house_system = settings .house_system ,
178210 )
179211
180- sun = ephemeris .planet (chart .SUN , self ._solar_return_jd )
181- moon = ephemeris .planet (chart .MOON , self ._solar_return_jd )
182- asc = ephemeris .angle (
212+ self . _triad [ chart . SUN ] = ephemeris .planet (chart .SUN , self ._solar_return_jd )
213+ self . _triad [ chart . MOON ] = ephemeris .planet (chart .MOON , self ._solar_return_jd )
214+ self . _triad [ chart . ASC ] = ephemeris .angle (
183215 index = chart .ASC ,
184216 jd = self ._solar_return_jd ,
185217 lat = self ._native .latitude ,
186218 lon = self ._native .longitude ,
187219 house_system = settings .house_system ,
188220 )
189221
190- self ._diurnal = calculate .is_daytime (sun , asc )
191- self ._moon_phase = calculate .moon_phase (sun , moon )
222+ self ._diurnal = calculate .is_daytime (self . _triad [ chart . SUN ], self . _triad [ chart . ASC ] )
223+ self ._moon_phase = calculate .moon_phase (self . _triad [ chart . SUN ], self . _triad [ chart . MOON ] )
192224 self ._objects = ephemeris .objects (
193225 object_list = settings .objects ,
194226 jd = self ._solar_return_jd ,
@@ -250,18 +282,18 @@ def generate(self) -> None:
250282 )
251283 self ._obliquity = ephemeris .obliquity (self ._progressed_jd )
252284
253- sun = ephemeris .planet (chart .SUN , self ._progressed_jd )
254- moon = ephemeris .planet (chart .MOON , self ._progressed_jd )
255- asc = ephemeris .armc_angle (
285+ self . _triad [ chart . SUN ] = ephemeris .planet (chart .SUN , self ._progressed_jd )
286+ self . _triad [ chart . MOON ] = ephemeris .planet (chart .MOON , self ._progressed_jd )
287+ self . _triad [ chart . ASC ] = ephemeris .armc_angle (
256288 index = chart .ASC ,
257289 armc = self ._progressed_armc_longitude ,
258290 lat = self ._native .latitude ,
259291 obliquity = self ._obliquity ,
260292 house_system = settings .house_system ,
261293 )
262294
263- self ._diurnal = calculate .is_daytime (sun , asc )
264- self ._moon_phase = calculate .moon_phase (sun , moon )
295+ self ._diurnal = calculate .is_daytime (self . _triad [ chart . SUN ], self . _triad [ chart . ASC ] )
296+ self ._moon_phase = calculate .moon_phase (self . _triad [ chart . SUN ], self . _triad [ chart . MOON ] )
265297 self ._objects = ephemeris .armc_objects (
266298 object_list = settings .objects ,
267299 jd = self ._progressed_jd ,
@@ -373,7 +405,7 @@ def generate(self) -> None:
373405 )
374406
375407 if chart .ASC in self ._objects :
376- asc = self ._objects [chart .ASC ]
408+ self . _triad [ chart . ASC ] = self ._objects [chart .ASC ]
377409 else :
378410 native_asc = ephemeris .angle (
379411 index = chart .ASC ,
@@ -389,24 +421,24 @@ def generate(self) -> None:
389421 lon = self ._partner .longitude ,
390422 house_system = settings .house_system ,
391423 )
392- asc = midpoint .composite (native_asc , partner_asc , self ._obliquity )
424+ self . _triad [ chart . ASC ] = midpoint .composite (native_asc , partner_asc , self ._obliquity )
393425
394426 if chart .SUN in self ._objects :
395- sun = self ._objects [chart .SUN ]
427+ self . _triad [ chart . SUN ] = self ._objects [chart .SUN ]
396428 else :
397429 native_sun = ephemeris .planet (chart .SUN , self ._native .julian_date )
398430 partner_sun = ephemeris .planet (chart .SUN , self ._partner .julian_date )
399- sun = midpoint .composite (native_sun , partner_sun , self ._obliquity )
431+ self . _triad [ chart . SUN ] = midpoint .composite (native_sun , partner_sun , self ._obliquity )
400432
401433 if chart .MOON in self ._objects :
402- moon = self ._objects [chart .MOON ]
434+ self . _triad [ chart . MOON ] = self ._objects [chart .MOON ]
403435 else :
404436 native_moon = ephemeris .planet (chart .MOON , self ._native .julian_date )
405437 partner_moon = ephemeris .planet (chart .MOON , self ._partner .julian_date )
406- moon = midpoint .composite (native_moon , partner_moon , self ._obliquity )
438+ self . _triad [ chart . MOON ] = midpoint .composite (native_moon , partner_moon , self ._obliquity )
407439
408- self ._diurnal = calculate .is_daytime (sun , asc )
409- self ._moon_phase = calculate .moon_phase (sun , moon )
440+ self ._diurnal = calculate .is_daytime (self . _triad [ chart . SUN ], self . _triad [ chart . ASC ] )
441+ self ._moon_phase = calculate .moon_phase (self . _triad [ chart . SUN ], self . _triad [ chart . MOON ] )
410442
411443 def set_wrapped_partner (self ):
412444 self .partner = wrap .Subject (self ._partner )
@@ -425,18 +457,18 @@ def __init__(self, latitude: float | list | tuple | str = settings.default_latit
425457 def generate (self ) -> None :
426458 self ._obliquity = ephemeris .obliquity (self ._native .julian_date )
427459
428- sun = ephemeris .planet (chart .SUN , self ._native .julian_date )
429- moon = ephemeris .planet (chart .MOON , self ._native .julian_date )
430- asc = ephemeris .angle (
460+ self . _triad [ chart . SUN ] = ephemeris .planet (chart .SUN , self ._native .julian_date )
461+ self . _triad [ chart . MOON ] = ephemeris .planet (chart .MOON , self ._native .julian_date )
462+ self . _triad [ chart . ASC ] = ephemeris .angle (
431463 index = chart .ASC ,
432464 jd = self ._native .julian_date ,
433465 lat = self ._native .latitude ,
434466 lon = self ._native .longitude ,
435467 house_system = settings .house_system ,
436468 )
437469
438- self ._diurnal = calculate .is_daytime (sun , asc )
439- self ._moon_phase = calculate .moon_phase (sun , moon )
470+ self ._diurnal = calculate .is_daytime (self . _triad [ chart . SUN ], self . _triad [ chart . ASC ] )
471+ self ._moon_phase = calculate .moon_phase (self . _triad [ chart . SUN ], self . _triad [ chart . MOON ] )
440472 self ._objects = ephemeris .objects (
441473 object_list = settings .objects ,
442474 jd = self ._native .julian_date ,
0 commit comments