kerykeion 5.0.0b1__py3-none-any.whl → 5.0.0b2__py3-none-any.whl

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.

@@ -161,6 +161,21 @@ class ChartDrawer:
161
161
  _DEFAULT_FULL_WIDTH_WITH_TABLE = 1250
162
162
  _DEFAULT_ULTRA_WIDE_WIDTH = 1320
163
163
 
164
+ _BASE_VERTICAL_OFFSETS = {
165
+ "wheel": 50,
166
+ "grid": 0,
167
+ "aspect_grid": 50,
168
+ "aspect_list": 50,
169
+ "title": 0,
170
+ "elements": 0,
171
+ "qualities": 0,
172
+ "lunar_phase": 518,
173
+ "bottom_left": 0,
174
+ }
175
+ _MAX_TOP_SHIFT = 80
176
+ _TOP_SHIFT_FACTOR = 2
177
+ _ROW_HEIGHT = 8
178
+
164
179
  _BASIC_CHART_VIEWBOX = f"0 0 {_DEFAULT_NATAL_WIDTH} {_DEFAULT_HEIGHT}"
165
180
  _WIDE_CHART_VIEWBOX = f"0 0 {_DEFAULT_FULL_WIDTH} 546.0"
166
181
  _ULTRA_WIDE_CHART_VIEWBOX = f"0 0 {_DEFAULT_ULTRA_WIDE_WIDTH} 546.0"
@@ -253,6 +268,7 @@ class ChartDrawer:
253
268
  self.custom_title = custom_title
254
269
  self.auto_size = auto_size
255
270
  self._padding = padding
271
+ self._vertical_offsets: dict[str, int] = self._BASE_VERTICAL_OFFSETS.copy()
256
272
 
257
273
  # Extract data from ChartDataModel
258
274
  self.chart_data = chart_data
@@ -265,6 +281,7 @@ class ChartDrawer:
265
281
  # SingleChartDataModel
266
282
  self.first_obj = getattr(chart_data, 'subject')
267
283
  self.second_obj = None
284
+
268
285
  else: # DualChartDataModel for Transit, Synastry, DualReturnChart
269
286
  self.first_obj = getattr(chart_data, 'first_subject')
270
287
  self.second_obj = getattr(chart_data, 'second_subject')
@@ -282,6 +299,13 @@ class ChartDrawer:
282
299
  body["is_active"] = True
283
300
  self.available_planets_setting.append(body) # type: ignore[arg-type]
284
301
 
302
+ active_points_count = len(self.available_planets_setting)
303
+ if active_points_count > 24:
304
+ logging.warning(
305
+ "ChartDrawer detected %s active celestial points; rendering may look crowded beyond 24.",
306
+ active_points_count,
307
+ )
308
+
285
309
  # Set available celestial points
286
310
  available_celestial_points_names = [body["name"].lower() for body in self.available_planets_setting]
287
311
  self.available_kerykeion_celestial_points = []
@@ -448,10 +472,49 @@ class ChartDrawer:
448
472
  # Keep default on any unexpected issue; do not break rendering
449
473
  logging.debug(f"Auto-size width calculation failed: {e}")
450
474
 
475
+ self._apply_dynamic_height_adjustment()
476
+
451
477
  def _count_active_planets(self) -> int:
452
478
  """Return number of active celestial points in the current chart."""
453
479
  return len([p for p in self.available_planets_setting if p.get("is_active")])
454
480
 
481
+ def _apply_dynamic_height_adjustment(self) -> None:
482
+ """Adjust chart height and vertical offsets based on active points."""
483
+ active_points_count = self._count_active_planets()
484
+
485
+ offsets = self._BASE_VERTICAL_OFFSETS.copy()
486
+
487
+ minimum_height = self._DEFAULT_HEIGHT
488
+ if active_points_count <= 20:
489
+ self.height = max(self.height, minimum_height)
490
+ self._vertical_offsets = offsets
491
+ return
492
+
493
+ extra_points = active_points_count - 20
494
+ extra_height = extra_points * self._ROW_HEIGHT
495
+
496
+ self.height = max(self.height, minimum_height + extra_height)
497
+
498
+ delta_height = max(self.height - minimum_height, 0)
499
+
500
+ # Anchor wheel, aspect grid/list, and lunar phase to the bottom
501
+ offsets["wheel"] += delta_height
502
+ offsets["aspect_grid"] += delta_height
503
+ offsets["aspect_list"] += delta_height
504
+ offsets["lunar_phase"] += delta_height
505
+ offsets["bottom_left"] += delta_height
506
+
507
+ # Smooth top offsets to keep breathing room near the title and grids
508
+ shift = min(extra_points * self._TOP_SHIFT_FACTOR, self._MAX_TOP_SHIFT)
509
+ top_shift = shift // 2
510
+
511
+ offsets["grid"] += shift
512
+ offsets["title"] += top_shift
513
+ offsets["elements"] += top_shift
514
+ offsets["qualities"] += top_shift
515
+
516
+ self._vertical_offsets = offsets
517
+
455
518
  def _dynamic_viewbox(self) -> str:
456
519
  """Return the viewBox string based on current width/height."""
457
520
  return f"0 0 {int(self.width)} {int(self.height)}"
@@ -476,7 +539,7 @@ class ChartDrawer:
476
539
  uses `x_indent=50`, `y_indent=250`, `box_size=14` and draws:
477
540
  • a header row to the right of `x_indent`
478
541
  • a left header column at `x_indent - box_size`
479
- • an N×N grid of cells above `y_indent`
542
+ • an NxN grid of cells above `y_indent`
480
543
 
481
544
  - For Natal/Composite/SingleReturn charts, `draw_aspect_grid` uses
482
545
  `x_start=50`, `y_start=250`, `box_size=14` and draws a triangular grid
@@ -534,8 +597,8 @@ class ChartDrawer:
534
597
  extents.extend([main_planet_grid_right, main_houses_grid_right])
535
598
 
536
599
  if self.chart_type in ("Natal", "Composite", "SingleReturnChart"):
537
- # Triangular aspect grid at x_start=510, width ~ 14 * n_active
538
- aspect_grid_right = 510 + 14 * n_active
600
+ # Triangular aspect grid at x_start=540, width ~ 14 * n_active
601
+ aspect_grid_right = 560 + 14 * n_active
539
602
  extents.append(aspect_grid_right)
540
603
 
541
604
  if self.chart_type in ("Transit", "Synastry", "DualReturnChart"):
@@ -815,6 +878,17 @@ class ChartDrawer:
815
878
  template_dict["chart_height"] = self.height
816
879
  template_dict["chart_width"] = self.width
817
880
 
881
+ offsets = self._vertical_offsets
882
+ template_dict["full_wheel_translate_y"] = offsets["wheel"]
883
+ template_dict["houses_and_planets_translate_y"] = offsets["grid"]
884
+ template_dict["aspect_grid_translate_y"] = offsets["aspect_grid"]
885
+ template_dict["aspect_list_translate_y"] = offsets["aspect_list"]
886
+ template_dict["title_translate_y"] = offsets["title"]
887
+ template_dict["elements_translate_y"] = offsets["elements"]
888
+ template_dict["qualities_translate_y"] = offsets["qualities"]
889
+ template_dict["lunar_phase_translate_y"] = offsets["lunar_phase"]
890
+ template_dict["bottom_left_translate_y"] = offsets["bottom_left"]
891
+
818
892
  # Set paper colors
819
893
  template_dict["paper_color_0"] = self.chart_colors_settings["paper_0"]
820
894
 
@@ -1223,8 +1297,8 @@ class ChartDrawer:
1223
1297
  self.chart_colors_settings["paper_0"],
1224
1298
  self.available_planets_setting,
1225
1299
  self.aspects_list,
1226
- 550,
1227
- 450,
1300
+ 600,
1301
+ 520,
1228
1302
  )
1229
1303
 
1230
1304
  template_dict["makeAspects"] = self._draw_all_transit_aspects_lines(self.main_radius, self.main_radius - 160)
@@ -7,6 +7,31 @@ from kerykeion.schemas.kr_models import AspectModel, KerykeionPointModel, Compos
7
7
  from kerykeion.schemas.settings_models import KerykeionLanguageCelestialPointModel, KerykeionSettingsCelestialPointModel
8
8
 
9
9
 
10
+ _SECOND_COLUMN_THRESHOLD = 20
11
+ _THIRD_COLUMN_THRESHOLD = 28
12
+ _FOURTH_COLUMN_THRESHOLD = 36
13
+ _GRID_COLUMN_WIDTH = 125
14
+
15
+
16
+ def _planet_grid_layout_position(index: int) -> tuple[int, int]:
17
+ """Return horizontal offset and row index for planet grids."""
18
+ if index < _SECOND_COLUMN_THRESHOLD:
19
+ column = 0
20
+ row = index
21
+ elif index < _THIRD_COLUMN_THRESHOLD:
22
+ column = 1
23
+ row = index - _SECOND_COLUMN_THRESHOLD
24
+ elif index < _FOURTH_COLUMN_THRESHOLD:
25
+ column = 2
26
+ row = index - _THIRD_COLUMN_THRESHOLD
27
+ else:
28
+ column = 3
29
+ row = index - _FOURTH_COLUMN_THRESHOLD
30
+
31
+ offset = -(_GRID_COLUMN_WIDTH * column)
32
+ return offset, row
33
+
34
+
10
35
 
11
36
  def get_decoded_kerykeion_celestial_point_name(input_planet_name: str, celestial_point_language: KerykeionLanguageCelestialPointModel) -> str:
12
37
  """
@@ -960,16 +985,11 @@ def draw_main_planet_grid(
960
985
  f'</g>'
961
986
  )
962
987
 
963
- line_height = LINE_START
964
- offset = 0
965
-
966
988
  end_of_line = "</g>"
967
989
 
968
990
  for i, planet in enumerate(available_kerykeion_celestial_points):
969
- # Start a second column at item 23 (index 22)
970
- if i == 20:
971
- line_height = LINE_START
972
- offset = -125
991
+ offset, row_index = _planet_grid_layout_position(i)
992
+ line_height = LINE_START + (row_index * LINE_STEP)
973
993
 
974
994
  decoded_name = get_decoded_kerykeion_celestial_point_name(
975
995
  planet["name"],
@@ -988,7 +1008,6 @@ def draw_main_planet_grid(
988
1008
  svg_output += '<g transform="translate(74,-6)"><use transform="scale(.5)" xlink:href="#retrograde" /></g>'
989
1009
 
990
1010
  svg_output += end_of_line
991
- line_height += LINE_STEP
992
1011
 
993
1012
  # Close the wrapper group
994
1013
  svg_output += "</g>"
@@ -1051,13 +1070,16 @@ def draw_secondary_planet_grid(
1051
1070
  line_height = LINE_START
1052
1071
  end_of_line = "</g>"
1053
1072
 
1054
- for t_planet in second_subject_available_kerykeion_celestial_points:
1073
+ for i, t_planet in enumerate(second_subject_available_kerykeion_celestial_points):
1074
+ offset, row_index = _planet_grid_layout_position(i)
1075
+ line_height = LINE_START + (row_index * LINE_STEP)
1076
+
1055
1077
  second_decoded_name = get_decoded_kerykeion_celestial_point_name(
1056
1078
  t_planet["name"],
1057
1079
  celestial_point_language,
1058
1080
  )
1059
1081
  svg_output += (
1060
- f'<g transform="translate(0,{BASE_Y + line_height})">'
1082
+ f'<g transform="translate({offset},{BASE_Y + line_height})">'
1061
1083
  f'<text text-anchor="end" style="fill:{text_color}; font-size: 10px;">{second_decoded_name}</text>'
1062
1084
  f'<g transform="translate(5,-8)"><use transform="scale(0.4)" xlink:href="#{t_planet["name"]}" /></g>'
1063
1085
  f'<text text-anchor="start" x="19" style="fill:{text_color}; font-size: 10px;">{convert_decimal_to_degree_string(t_planet["position"])}</text>'
@@ -1068,7 +1090,7 @@ def draw_secondary_planet_grid(
1068
1090
  svg_output += '<g transform="translate(74,-6)"><use transform="scale(.5)" xlink:href="#retrograde" /></g>'
1069
1091
 
1070
1092
  svg_output += end_of_line
1071
- line_height += LINE_STEP
1093
+
1072
1094
 
1073
1095
  # Close wrapper group
1074
1096
  svg_output += "</g>"
@@ -18,7 +18,7 @@
18
18
 
19
19
  <!--- Main Chart -->
20
20
  <g kr:node="Main_Chart">
21
- <g kr:node="Top_Left_Text">
21
+ <g kr:node="Top_Left_Text" transform="translate(0,$title_translate_y)">
22
22
  <text x="20" y="22" style="fill: $paper_color_0; font-size: 24px">$stringTitle</text>
23
23
  <text x="20" y="50" style="fill: $paper_color_0; font-size: 10px">$top_left_0</text>
24
24
  <text x="20" y="62" style="fill: $paper_color_0; font-size: 10px">$top_left_1</text>
@@ -29,7 +29,7 @@
29
29
  </g>
30
30
 
31
31
  <!-- Elements -->
32
- <g kr:node="Elements_Percentages">
32
+ <g kr:node="Elements_Percentages" transform="translate(0,$elements_translate_y)">
33
33
  <text x="20" y="130" style="fill: $paper_color_0; font-size: 10px;">$elements_string</text>
34
34
  <text x="20" y="144" style="fill: var(--kerykeion-chart-color-fire-percentage); font-size: 10px;">$fire_string</text>
35
35
  <text x="20" y="156" style="fill: var(--kerykeion-chart-color-earth-percentage); font-size: 10px;">$earth_string</text>
@@ -38,14 +38,14 @@
38
38
  </g>
39
39
 
40
40
  <!-- Qualities -->
41
- <g kr:node="Qualities_Percentages">
41
+ <g kr:node="Qualities_Percentages" transform="translate(0,$qualities_translate_y)">
42
42
  <text x="20" y="200" style="fill: $paper_color_0; font-size: 10px;">$qualities_string</text>
43
43
  <text x="20" y="214" style="fill: var(--kerykeion-chart-color-cardinal-percentage); font-size: 10px;">$cardinal_string</text>
44
44
  <text x="20" y="226" style="fill: var(--kerykeion-chart-color-fixed-percentage); font-size: 10px;">$fixed_string</text>
45
45
  <text x="20" y="238" style="fill: var(--kerykeion-chart-color-mutable-percentage); font-size: 10px;">$mutable_string</text>
46
46
  </g>
47
47
 
48
- <g kr:node="Bottom_Left_Text">
48
+ <g kr:node="Bottom_Left_Text" transform="translate(0,$bottom_left_translate_y)">
49
49
  <text x="20" y="452" style="fill: $paper_color_0; font-size: 10px">$bottom_left_0</text>
50
50
  <text x="20" y="466" style="fill: $paper_color_0; font-size: 10px">$bottom_left_1</text>
51
51
  <text x="20" y="480" style="fill: $paper_color_0; font-size: 10px">$bottom_left_2</text>
@@ -54,12 +54,12 @@
54
54
  </g>
55
55
 
56
56
  <!-- Lunar Phase -->
57
- <g kr:node="Lunar_Phase" transform="translate(10,518)">
57
+ <g kr:node="Lunar_Phase" transform="translate(10,$lunar_phase_translate_y)">
58
58
  $makeLunarPhase
59
59
  </g>
60
60
 
61
61
  <!-- Full Wheel -->
62
- <g kr:node="Full_Wheel" transform="translate(100,50)">
62
+ <g kr:node="Full_Wheel" transform="translate(100,$full_wheel_translate_y)">
63
63
 
64
64
  <!-- Background Circle -->
65
65
  <g kr:node='Background_Circle'>
@@ -113,7 +113,7 @@
113
113
  </g>
114
114
 
115
115
  <!-- Houses_And_Planets_Grid -->
116
- <g kr:node="Houses_And_Planets_Grid">
116
+ <g kr:node="Houses_And_Planets_Grid" transform="translate(20,$houses_and_planets_translate_y)">
117
117
  <!-- Main Subject Grid -->
118
118
  <g kr:node="Main_Planet_Grid">
119
119
  $makeMainPlanetGrid
@@ -138,12 +138,12 @@
138
138
  </g>
139
139
 
140
140
  <!-- Single Chart Aspect -->
141
- <g kr:node="Aspect_Grid" transform="translate(0,50)">
141
+ <g kr:node="Aspect_Grid" transform="translate(35,$aspect_grid_translate_y)">
142
142
  $makeAspectGrid
143
143
  </g>
144
144
 
145
145
  <!-- Double Chart Chart Aspects -->
146
- <g kr:node="Aspect_List" transform="translate(50,50)">
146
+ <g kr:node="Aspect_List" transform="translate(50,$aspect_list_translate_y)">
147
147
  $makeDoubleChartAspectList
148
148
  </g>
149
149
  </g>
@@ -158,82 +158,6 @@
158
158
  <circle cx="10" cy="10" r="2" style="fill: $planets_color_0" />
159
159
  </g>
160
160
  </symbol>
161
- <!-- OTHER POINTS -->
162
- <symbol id="Earth">
163
- <g transform="translate(2,2)">
164
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_21; stroke-width: 2px; fill: none;" />
165
- <line x1="10" y1="1" x2="10" y2="19" style="stroke: $planets_color_21; stroke-width: 2px;" />
166
- <line x1="1" y1="10" x2="19" y2="10" style="stroke: $planets_color_21; stroke-width: 2px;" />
167
- </g>
168
- </symbol>
169
- <symbol id="Pholus">
170
- <g transform="translate(2,2)">
171
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_22; stroke-width: 2px; fill: none;" />
172
- <path d="M 6,8 Q 10,4 14,8 Q 10,12 6,8" style="stroke: $planets_color_22; stroke-width: 2px; fill: none;" />
173
- <path d="M 10,8 L 10,16" style="stroke: $planets_color_22; stroke-width: 2px;" />
174
- </g>
175
- </symbol>
176
- <symbol id="Sedna">
177
- <g transform="translate(2,2)">
178
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_28; stroke-width: 2px; fill: none;" />
179
- <path d="M 5,10 Q 10,5 15,10 Q 10,15 5,10" style="stroke: $planets_color_28; stroke-width: 2px; fill: none;" />
180
- <circle cx="10" cy="10" r="2" style="fill: $planets_color_28;" />
181
- </g>
182
- </symbol>
183
- <symbol id="Haumea">
184
- <g transform="translate(2,2)">
185
- <ellipse cx="10" cy="10" rx="9" ry="6" style="stroke: $planets_color_29; stroke-width: 2px; fill: none;" />
186
- <path d="M 4,10 L 7,7 M 13,7 L 16,10 M 16,10 L 13,13 M 7,13 L 4,10" style="stroke: $planets_color_29; stroke-width: 2px;" />
187
- </g>
188
- </symbol>
189
- <symbol id="Makemake">
190
- <g transform="translate(2,2)">
191
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_30; stroke-width: 2px; fill: none;" />
192
- <path d="M 6,6 L 10,10 L 14,6" style="stroke: $planets_color_30; stroke-width: 2px; fill: none;" />
193
- <path d="M 6,14 L 10,10 L 14,14" style="stroke: $planets_color_30; stroke-width: 2px; fill: none;" />
194
- <circle cx="10" cy="10" r="1.5" style="fill: $planets_color_30;" />
195
- </g>
196
- </symbol>
197
- <symbol id="Ixion">
198
- <g transform="translate(2,2)">
199
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_31; stroke-width: 2px; fill: none;" />
200
- <path d="M 3,3 L 17,17 M 17,3 L 3,17" style="stroke: $planets_color_31; stroke-width: 2px;" />
201
- <circle cx="10" cy="10" r="3" style="stroke: $planets_color_31; stroke-width: 2px; fill: none;" />
202
- </g>
203
- </symbol>
204
- <symbol id="Orcus">
205
- <g transform="translate(2,2)">
206
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_32; stroke-width: 2px; fill: none;" />
207
- <path d="M 6,6 L 14,14 M 14,6 L 6,14" style="stroke: $planets_color_32; stroke-width: 2px;" />
208
- <path d="M 10,3 L 10,17 M 3,10 L 17,10" style="stroke: $planets_color_32; stroke-width: 2px;" />
209
- </g>
210
- </symbol>
211
- <symbol id="Quaoar">
212
- <g transform="translate(2,2)">
213
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_33; stroke-width: 2px; fill: none;" />
214
- <path d="M 7,7 Q 10,4 13,7 Q 16,10 13,13 Q 10,16 7,13 Q 4,10 7,7" style="stroke: $planets_color_33; stroke-width: 2px; fill: none;" />
215
- </g>
216
- </symbol>
217
- <symbol id="Regulus">
218
- <g transform="translate(2,2)">
219
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_34; stroke-width: 2px; fill: none;" />
220
- <path d="M 10,3 L 7,7 L 13,7 Z" style="stroke: $planets_color_34; stroke-width: 2px; fill: $planets_color_34;" />
221
- <circle cx="10" cy="12" r="3" style="stroke: $planets_color_34; stroke-width: 2px; fill: none;" />
222
- </g>
223
- </symbol>
224
- <symbol id="Spica">
225
- <g transform="translate(2,2)">
226
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_35; stroke-width: 2px; fill: none;" />
227
- <path d="M 10,4 L 8,8 L 4,8 L 7,11 L 6,15 L 10,13 L 14,15 L 13,11 L 16,8 L 12,8 Z" style="stroke: $planets_color_35; stroke-width: 2px; fill: $planets_color_35;" />
228
- </g>
229
- </symbol>
230
- <symbol id="Anti_Vertex">
231
- <g transform="translate(2,2)">
232
- <circle cx="10" cy="10" r="9" style="stroke: $planets_color_41; stroke-width: 2px; fill: none;" />
233
- <path d="M 6,6 L 14,14 M 14,6 L 6,14" style="stroke: $planets_color_41; stroke-width: 2px;" />
234
- <circle cx="10" cy="10" r="3" style="fill: $planets_color_41;" />
235
- </g>
236
- </symbol>
237
161
  <symbol id="Moon">
238
162
  <g transform="translate(4,3)">
239
163
  <g transform="scale(.8)">
@@ -391,43 +315,149 @@
391
315
  <text y="20" style="font-size: 22px; fill: $planets_color_16">Ic</text>
392
316
  </symbol>
393
317
 
318
+ <!-- OTHER POINTS -->
319
+ <symbol id="Earth">
320
+ <g transform="translate(2,2)">
321
+ <circle cx="10" cy="10" r="8" style="stroke: $planets_color_21; stroke-width: 1.8px; fill: none;" />
322
+ <line x1="10" y1="2" x2="10" y2="18" style="stroke: $planets_color_21; stroke-width: 1.8px;" />
323
+ <line x1="2" y1="10" x2="18" y2="10" style="stroke: $planets_color_21; stroke-width: 1.8px;" />
324
+ </g>
325
+ </symbol>
326
+ <symbol id="Pholus">
327
+ <g transform="translate(2,2)">
328
+ <circle cx="10" cy="6" r="4" style="fill: none; stroke: $planets_color_22; stroke-width: 1.8px;" />
329
+ <line x1="10" y1="10" x2="10" y2="18" style="stroke: $planets_color_22; stroke-width: 1.8px;" />
330
+ <line x1="7" y1="18" x2="13" y2="18" style="stroke: $planets_color_22; stroke-width: 1.8px;" />
331
+ <line x1="13" y1="3" x2="16" y2="3" style="stroke: $planets_color_22; stroke-width: 1.8px;" />
332
+ <line x1="13" y1="3" x2="13" y2="6" style="stroke: $planets_color_22; stroke-width: 1.8px;" />
333
+ </g>
334
+ </symbol>
335
+ <symbol id="Sedna">
336
+ <g transform="translate(2,2)">
337
+ <line x1="10" y1="2" x2="10" y2="18" style="stroke: $planets_color_28; stroke-width: 1.8px;" />
338
+ <line x1="5" y1="2" x2="10" y2="7" style="stroke: $planets_color_28; stroke-width: 1.8px;" />
339
+ <line x1="15" y1="2" x2="10" y2="7" style="stroke: $planets_color_28; stroke-width: 1.8px;" />
340
+ <line x1="10" y1="2" x2="10" y2="7" style="stroke: $planets_color_28; stroke-width: 1.8px;" />
341
+ <path d="M 7,18 Q 10,16 13,18" style="stroke: $planets_color_28; stroke-width: 1.8px; fill: none;" />
342
+ </g>
343
+ </symbol>
344
+ <symbol id="Haumea">
345
+ <g transform="translate(2,2)">
346
+ <ellipse cx="10" cy="10" rx="6" ry="8" style="fill: none; stroke: $planets_color_29; stroke-width: 1.8px;" />
347
+ <line x1="10" y1="2" x2="10" y2="18" style="stroke: $planets_color_29; stroke-width: 1.8px;" />
348
+ <line x1="6" y1="10" x2="14" y2="10" style="stroke: $planets_color_29; stroke-width: 1.8px;" />
349
+ <circle cx="10" cy="6" r="1.5" style="fill: $planets_color_29;" />
350
+ <circle cx="10" cy="14" r="1.5" style="fill: $planets_color_29;" />
351
+ </g>
352
+ </symbol>
353
+ <symbol id="Makemake">
354
+ <g transform="translate(2,2)">
355
+ <circle cx="10" cy="6" r="4" style="fill: none; stroke: $planets_color_30; stroke-width: 1.8px;" />
356
+ <line x1="10" y1="10" x2="10" y2="18" style="stroke: $planets_color_30; stroke-width: 1.8px;" />
357
+ <line x1="6" y1="14" x2="14" y2="14" style="stroke: $planets_color_30; stroke-width: 1.8px;" />
358
+ <path d="M 6,18 L 10,15 L 14,18" style="stroke: $planets_color_30; stroke-width: 1.8px; fill: none;" />
359
+ </g>
360
+ </symbol>
361
+ <symbol id="Ixion">
362
+ <g transform="translate(2,2)">
363
+ <line x1="10" y1="2" x2="10" y2="18" style="stroke: $planets_color_31; stroke-width: 1.8px;" />
364
+ <line x1="3" y1="10" x2="17" y2="10" style="stroke: $planets_color_31; stroke-width: 1.8px;" />
365
+ <line x1="10" y1="2" x2="7" y2="5" style="stroke: $planets_color_31; stroke-width: 1.8px;" />
366
+ <line x1="10" y1="2" x2="13" y2="5" style="stroke: $planets_color_31; stroke-width: 1.8px;" />
367
+ <circle cx="10" cy="14" r="2" style="fill: none; stroke: $planets_color_31; stroke-width: 1.8px;" />
368
+ </g>
369
+ </symbol>
370
+ <symbol id="Orcus">
371
+ <g transform="translate(2,2)">
372
+ <line x1="10" y1="2" x2="10" y2="8" style="stroke: $planets_color_32; stroke-width: 1.8px;" />
373
+ <line x1="6" y1="5" x2="14" y2="5" style="stroke: $planets_color_32; stroke-width: 1.8px;" />
374
+ <path d="M 5,11 A 5,5 0 0,0 15,11" style="stroke: $planets_color_32; stroke-width: 1.8px; fill: none;" />
375
+ <line x1="5" y1="11" x2="15" y2="11" style="stroke: $planets_color_32; stroke-width: 1.8px;" />
376
+ </g>
377
+ </symbol>
378
+ <symbol id="Quaoar">
379
+ <g transform="translate(2,2)">
380
+ <circle cx="10" cy="7" r="4" style="fill: none; stroke: $planets_color_33; stroke-width: 1.8px;" />
381
+ <line x1="10" y1="11" x2="10" y2="17" style="stroke: $planets_color_33; stroke-width: 1.8px;" />
382
+ <path d="M 6,17 L 10,14 L 14,17" style="stroke: $planets_color_33; stroke-width: 1.8px; fill: none;" />
383
+ <line x1="7" y1="7" x2="4" y2="7" style="stroke: $planets_color_33; stroke-width: 1.8px;" />
384
+ </g>
385
+ </symbol>
386
+ <symbol id="Regulus">
387
+ <g transform="translate(2,2)">
388
+ <path d="M 10,2 L 11.5,6.5 L 16,7 L 12.5,10 L 13.5,14.5 L 10,12 L 6.5,14.5 L 7.5,10 L 4,7 L 8.5,6.5 Z" style="stroke: $planets_color_34; stroke-width: 1.5px; fill: none;" />
389
+ <line x1="10" y1="14.5" x2="10" y2="18" style="stroke: $planets_color_34; stroke-width: 1.8px;" />
390
+ </g>
391
+ </symbol>
392
+ <symbol id="Spica">
393
+ <g transform="translate(2,2)">
394
+ <path d="M 10,2 L 11.5,7 L 16.5,7.5 L 12.5,11 L 13.8,16 L 10,13.2 L 6.2,16 L 7.5,11 L 3.5,7.5 L 8.5,7 Z" style="stroke: $planets_color_35; stroke-width: 1.5px; fill: none;" />
395
+ <path d="M 7,16 Q 10,18 13,16" style="stroke: $planets_color_35; stroke-width: 1.8px; fill: none;" />
396
+ </g>
397
+ </symbol>
398
+ <symbol id="Anti_Vertex">
399
+ <g transform="translate(2,2)">
400
+ <circle cx="10" cy="10" r="7" style="fill: none; stroke: $planets_color_41; stroke-width: 1.8px;" />
401
+ <line x1="6" y1="6" x2="14" y2="14" style="stroke: $planets_color_41; stroke-width: 1.8px;" />
402
+ <line x1="14" y1="6" x2="6" y2="14" style="stroke: $planets_color_41; stroke-width: 1.8px;" />
403
+ <line x1="10" y1="17" x2="10" y2="13" style="stroke: $planets_color_41; stroke-width: 1.8px;" />
404
+ <line x1="10" y1="17" x2="7.5" y2="15" style="stroke: $planets_color_41; stroke-width: 1.8px;" />
405
+ <line x1="10" y1="17" x2="12.5" y2="15" style="stroke: $planets_color_41; stroke-width: 1.8px;" />
406
+ </g>
407
+ </symbol>
408
+
394
409
  <!-- Asteroids and additional points -->
395
410
  <symbol id="Ceres">
396
- <g transform="translate(1,2)">
397
- <path d="M 11.5,0.5 L 11.5,21.5 M 7.5,4 L 15.5,4 M 5,10 L 17,10"
398
- style="stroke: $planets_color_23; stroke-width: 2px; fill: none;" />
399
- <circle cx="11.5" cy="15" r="5"
400
- style="stroke: $planets_color_23; stroke-width: 2px; fill: none;" />
411
+ <g transform="translate(2,1)">
412
+ <path d="M 6,5 C 6,2.5 8.5,1 11,1 C 13.5,1 16,2.5 16,5 C 16,8.5 12,9.5 11,13" style="stroke: $planets_color_23; stroke-width: 2px; fill: none;" />
413
+ <line x1="11" y1="13" x2="11" y2="21" style="stroke: $planets_color_23; stroke-width: 2px;" />
414
+ <line x1="6" y1="17" x2="16" y2="17" style="stroke: $planets_color_23; stroke-width: 2px;" />
415
+ <line x1="6" y1="21" x2="16" y2="21" style="stroke: $planets_color_23; stroke-width: 2px;" />
401
416
  </g>
402
417
  </symbol>
403
418
 
404
419
  <symbol id="Pallas">
405
- <g transform="translate(1,2)">
406
- <path d="M 11,0.5 L 11,21.5 M 6,6 L 16,6 M 4,12 L 18,12"
407
- style="stroke: $planets_color_24; stroke-width: 2px; fill: none;" />
420
+ <g transform="translate(2,1)">
421
+ <path d="M 11,1 L 15,5 L 11,9 L 7,5 Z" style="stroke: $planets_color_24; stroke-width: 2px; fill: none;" />
422
+ <line x1="11" y1="9" x2="11" y2="23" style="stroke: $planets_color_24; stroke-width: 2px;" />
423
+ <line x1="7" y1="15" x2="15" y2="15" style="stroke: $planets_color_24; stroke-width: 2px;" />
408
424
  </g>
409
425
  </symbol>
410
426
 
411
427
  <symbol id="Juno">
412
- <g transform="translate(1,2)">
413
- <path d="M 5,5 C 5,2 11,0 11,0 C 11,0 17,2 17,5 C 17,9 13,9 11,15 C 9,9 5,9 5,5 z M 7,18 L 15,18 M 11,15 L 11,21"
414
- style="stroke: $planets_color_25; stroke-width: 2px; fill: none;" />
428
+ <g transform="translate(2,1)">
429
+ <path d="M 11,1 L 13,5 L 17,6 L 13,7.5 L 11,12 L 9,7.5 L 5,6 L 9,5 Z" style="stroke: $planets_color_25; stroke-width: 2px; fill: none;" />
430
+ <line x1="11" y1="12" x2="11" y2="22" style="stroke: $planets_color_25; stroke-width: 2px;" />
431
+ <line x1="7" y1="18" x2="15" y2="18" style="stroke: $planets_color_25; stroke-width: 2px;" />
432
+ <line x1="7" y1="22" x2="15" y2="22" style="stroke: $planets_color_25; stroke-width: 2px;" />
415
433
  </g>
416
434
  </symbol>
417
435
 
418
436
  <symbol id="Vesta">
419
- <g transform="translate(1,2)">
420
- <path d="M 7,0.5 L 15,0.5 M 11,0.5 L 11,13 M 6,6 L 16,6 M 7,20 C 7,16 15,16 15,20 C 15,24 7,24 7,20 z"
421
- style="stroke: $planets_color_26; stroke-width: 2px; fill: none;" />
437
+ <g transform="translate(2,1)">
438
+ <path d="M 6,5 L 16,5" style="stroke: $planets_color_26; stroke-width: 2px;" />
439
+ <path d="M 11,1 L 8,5 L 14,5 Z" style="stroke: $planets_color_26; stroke-width: 2px; fill: none;" />
440
+ <line x1="11" y1="5" x2="11" y2="21" style="stroke: $planets_color_26; stroke-width: 2px;" />
441
+ <path d="M 6,15 Q 11,19 16,15" style="stroke: $planets_color_26; stroke-width: 2px; fill: none;" />
442
+ <line x1="6" y1="21" x2="16" y2="21" style="stroke: $planets_color_26; stroke-width: 2px;" />
422
443
  </g>
423
444
  </symbol>
424
445
 
425
446
  <symbol id="Vertex">
426
- <text y="20" style="font-size: 22px; fill: $planets_color_40">Vx</text>
447
+ <g transform="translate(2,2)">
448
+ <circle cx="10" cy="10" r="8" style="fill: none; stroke: $planets_color_40; stroke-width: 2px;" />
449
+ <path d="M 5,5 L 10,16 L 15,5" style="stroke: $planets_color_40; stroke-width: 2px; fill: none;" />
450
+ </g>
427
451
  </symbol>
428
452
 
429
453
  <symbol id="East_Point">
430
- <text y="20" style="font-size: 22px; fill: $planets_color_23">EP</text>
454
+ <g transform="translate(2,2)">
455
+ <circle cx="8" cy="10" r="6" style="fill: none; stroke: $planets_color_23; stroke-width: 2px;" />
456
+ <line x1="8" y1="6" x2="8" y2="14" style="stroke: $planets_color_23; stroke-width: 2px;" />
457
+ <line x1="5" y1="10" x2="14" y2="10" style="stroke: $planets_color_23; stroke-width: 2px;" />
458
+ <line x1="14" y1="10" x2="18" y2="6" style="stroke: $planets_color_23; stroke-width: 2px;" />
459
+ <line x1="14" y1="10" x2="18" y2="14" style="stroke: $planets_color_23; stroke-width: 2px;" />
460
+ </g>
431
461
  </symbol>
432
462
 
433
463
  <symbol id="True_Lilith">
@@ -39,6 +39,33 @@ class ChartTemplateModel(SubscriptableBaseModel):
39
39
  makeHouseComparisonGrid: str
40
40
  """SVG markup for house comparison grid"""
41
41
 
42
+ full_wheel_translate_y: int
43
+ """Vertical translation for the full wheel group"""
44
+
45
+ houses_and_planets_translate_y: int
46
+ """Vertical translation for the houses and planets grid group"""
47
+
48
+ aspect_grid_translate_y: int
49
+ """Vertical translation for the aspect grid group"""
50
+
51
+ aspect_list_translate_y: int
52
+ """Vertical translation for the aspect list group"""
53
+
54
+ title_translate_y: int
55
+ """Vertical translation for the title and top-left text block"""
56
+
57
+ elements_translate_y: int
58
+ """Vertical translation for the elements summary block"""
59
+
60
+ qualities_translate_y: int
61
+ """Vertical translation for the qualities summary block"""
62
+
63
+ lunar_phase_translate_y: int
64
+ """Vertical translation for the lunar phase block"""
65
+
66
+ bottom_left_translate_y: int
67
+ """Vertical translation for the bottom-left info block"""
68
+
42
69
  chart_height: float
43
70
  """Chart height in pixels"""
44
71
 
@@ -46,7 +46,7 @@
46
46
  "last_quarter": "Last Quarter",
47
47
  "waning_crescent": "Waning Crescent",
48
48
  "houses": "Houses",
49
- "domification": "domification",
49
+ "domification": "Domification",
50
50
  "houses_system_A": "Equal",
51
51
  "houses_system_B": "Alcabitius",
52
52
  "houses_system_C": "Campanus",
@@ -193,7 +193,7 @@
193
193
  "last_quarter": "Dernier Quartier",
194
194
  "waning_crescent": "Dernier Croissant",
195
195
  "houses": "Maisons",
196
- "domification": "domification",
196
+ "domification": "Domification",
197
197
  "houses_system_A": "Égales",
198
198
  "houses_system_B": "Alcabitius",
199
199
  "houses_system_C": "Campanus",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kerykeion
3
- Version: 5.0.0b1
3
+ Version: 5.0.0b2
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
@@ -14,11 +14,11 @@ kerykeion/aspects/__init__.py,sha256=csJmxvLdBu-bHuW676f3dpY__Qyc6LwRyrpWVTh3n1A
14
14
  kerykeion/aspects/aspects_factory.py,sha256=kli4YUhAQtnidD4icrmD6EeGnZ_jylDqOsXVkIMvQB4,23487
15
15
  kerykeion/aspects/aspects_utils.py,sha256=xIeu6cFsdX_Fbo_c2WPF4hga9YJLWGG5pwCqHX9Z4pU,5809
16
16
  kerykeion/charts/__init__.py,sha256=i9NMZ7LdkllPlqQSi1or9gTobHbROGDKmJhBDO4R0mA,128
17
- kerykeion/charts/chart_drawer.py,sha256=igzRogHJ3arKSa0EXiXhI03LnGnWsHLuM-gO0sdCHj4,108083
18
- kerykeion/charts/charts_utils.py,sha256=4R2pAa47-TcM7eYxXGri98u5sPJhl6YmmgdQTUUXGi8,64847
17
+ kerykeion/charts/chart_drawer.py,sha256=LBOymQbdfj2JO-f6hDjU5FLZfzqGnUKbt7tDnsihbmc,110889
18
+ kerykeion/charts/charts_utils.py,sha256=6eEIsBp2zTtgwfRiwyudZnACPshrhCHslONddGKQ-Kg,65550
19
19
  kerykeion/charts/draw_planets.py,sha256=tIj3FeLLomVSbCaZUxfw_qBEB3pxi4EIEhqaeTgTyTY,29061
20
20
  kerykeion/charts/templates/aspect_grid_only.xml,sha256=mSiSDnPmyysG7NzCQLhr1QxWafMNOGZ1R6_ABFaM7Jk,79706
21
- kerykeion/charts/templates/chart.xml,sha256=Cp8ZBOBrQAafk-H2_HHuxD3Cz7EZ4_l-DJ6_Y5oGAjk,84792
21
+ kerykeion/charts/templates/chart.xml,sha256=Xezku381oaG1wuWeH_-gQ6NDQrR2rUEp0ZMrpDY6d9c,88449
22
22
  kerykeion/charts/templates/wheel_only.xml,sha256=NjhkExEZTE_le7002k7ewcCS4FoQij6H07jb5D9HVac,81047
23
23
  kerykeion/charts/themes/classic.css,sha256=xvBiI4DtY5fMaA7ilxGl26VEDY1VzkOTWm1XOs9n-ec,5158
24
24
  kerykeion/charts/themes/dark-high-contrast.css,sha256=EbmK9sM_ksJ5Fx36cb91nSvSsqC6mzjkRXCpwNTHfCE,8260
@@ -29,7 +29,7 @@ kerykeion/house_comparison/__init__.py,sha256=dnSVpx_pKylYUeaTGxHsSlN15HqQS6eJHp
29
29
  kerykeion/house_comparison/house_comparison_factory.py,sha256=YkA7itvkyIcKEf8Ffi53on-gGhsHi_Oeu9Gm4N9aHQs,4588
30
30
  kerykeion/house_comparison/house_comparison_utils.py,sha256=vzME6Aw5njCXu6BmPLuhgfEVDI00qfQI7MPH-YujO1g,5071
31
31
  kerykeion/schemas/__init__.py,sha256=CU1I1JanyY-0-Uq7oCHQT6wmmkOgfP0zZwHtCvF0W0g,2215
32
- kerykeion/schemas/chart_template_model.py,sha256=0JJ13jQ6UHvZPlg_6NH57GuL7Z0yXrd8VIWDBQvBnOE,8125
32
+ kerykeion/schemas/chart_template_model.py,sha256=fQ_EZ8ccOgNd4gXu5KilF1dUH9B2RVCDLHc09YkYLyY,8978
33
33
  kerykeion/schemas/kerykeion_exception.py,sha256=vTYdwj_mL-Q-MqHJvEzzBXxQ5YI2kAwUC6ImoWxMKXc,454
34
34
  kerykeion/schemas/kr_literals.py,sha256=_GrBO9s0lfNDAk4oE4pf7DF7HEgAGTgklvlAn0SePuo,5119
35
35
  kerykeion/schemas/kr_models.py,sha256=C8Xo4uPxMfCUbKOBopKrbI8bSZzWVXImYsOJEZIlBjQ,22159
@@ -37,7 +37,7 @@ kerykeion/schemas/settings_models.py,sha256=NlOW9T7T5kD5Dzna1UOdb7XPQeQnzMOu0y4-
37
37
  kerykeion/settings/__init__.py,sha256=NYCwcvEfn9qJ498fv1H_Gix8e-crJ3CruV13A-e2CnI,134
38
38
  kerykeion/settings/config_constants.py,sha256=mLpWtL46iXFp0pYDaVtKRBzGbl3rZKj3XxjIM88DYRQ,3790
39
39
  kerykeion/settings/kerykeion_settings.py,sha256=jesmjfeDU6t-aNyXmzqfMGHBEATk7tenWkQT8cox-FY,2954
40
- kerykeion/settings/kr.config.json,sha256=Ap_EE98RT957AXNmj2LWr1fmVMf9NO2_jCpAthHPmHs,62094
40
+ kerykeion/settings/kr.config.json,sha256=e8g285TI_ZGu2LfwUhBP4W0TDQkaqflmzUhpTWf9LZE,62094
41
41
  kerykeion/settings/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  kerykeion/settings/legacy/legacy_celestial_points_settings.py,sha256=RsGmX10cO1jw2W3IwK1OBnzzgaI3nUiFIYHeoYtjapw,6942
43
43
  kerykeion/settings/legacy/legacy_chart_aspects_settings.py,sha256=tO4tgPgPP07_wu9f8SXyJQ9WrTh3iWz4YvBS2axCGU8,1650
@@ -52,7 +52,7 @@ kerykeion/sweph/ast28/se28978s.se1,sha256=nU2Qp-ELc_tzFnRc1QT6uVueWXEipvhYDgfQRX
52
52
  kerykeion/sweph/ast50/se50000s.se1,sha256=9jTrPlIrZMOBWC9cNgwzcfz0KBHdXFZoY9-NZ_HtECo,15748
53
53
  kerykeion/sweph/ast90/se90377s.se1,sha256=bto2x4LtBv8b1ej1XhVFYq-kfHO9cczbKV9U1f9UVu4,10288
54
54
  kerykeion/sweph/ast90/se90482s.se1,sha256=uHxz6bP4K8zgtQFrlWFwxrYfmqm5kXxsg6OYhAIUbAA,16173
55
- kerykeion-5.0.0b1.dist-info/METADATA,sha256=RNXJbBmkMbDOdmp3tlKu2KPy_b0iYzlJ_t3g9ZGJnck,40219
56
- kerykeion-5.0.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
57
- kerykeion-5.0.0b1.dist-info/licenses/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
58
- kerykeion-5.0.0b1.dist-info/RECORD,,
55
+ kerykeion-5.0.0b2.dist-info/METADATA,sha256=SLIsNoZE6AWBza5G-6CV4_jbxkQBbfPLtDNJThrs848,40219
56
+ kerykeion-5.0.0b2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
57
+ kerykeion-5.0.0b2.dist-info/licenses/LICENSE,sha256=UTLH8EdbAsgQei4PA2PnBCPGLSZkq5J-dhkyJuXgWQU,34273
58
+ kerykeion-5.0.0b2.dist-info/RECORD,,