libaditya 0.3.4__py2.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.
Files changed (131) hide show
  1. libaditya/__init__.py +46 -0
  2. libaditya/_version.py +29 -0
  3. libaditya/calc/__init__.py +9 -0
  4. libaditya/calc/api.py +30 -0
  5. libaditya/calc/avasthas.py +346 -0
  6. libaditya/calc/docs/jaimini-get-arch.md +95 -0
  7. libaditya/calc/hellenistic.py +37 -0
  8. libaditya/calc/jaimini.py +335 -0
  9. libaditya/calc/jaimini_get.py +240 -0
  10. libaditya/calc/kala.py +73 -0
  11. libaditya/calc/panchanga.py +422 -0
  12. libaditya/calc/rashi.py +612 -0
  13. libaditya/calc/returns.py +50 -0
  14. libaditya/calc/swe_functions.py +118 -0
  15. libaditya/calc/varga.py +287 -0
  16. libaditya/calc/vimshottari.py +431 -0
  17. libaditya/cards/__init__.py +5 -0
  18. libaditya/cards/card.py +90 -0
  19. libaditya/cards/cards_constants.py +115 -0
  20. libaditya/cards/cards_of_truth.py +323 -0
  21. libaditya/cards/cot.py +142 -0
  22. libaditya/cards/deck.py +52 -0
  23. libaditya/charts/__init__.py +6 -0
  24. libaditya/charts/api.py +36 -0
  25. libaditya/charts/bodygraph.py +80 -0
  26. libaditya/charts/chart.py +286 -0
  27. libaditya/charts/jaimini.py +83 -0
  28. libaditya/charts/tajika.py +36 -0
  29. libaditya/constants.py +1776 -0
  30. libaditya/draw/__init__.py +20 -0
  31. libaditya/draw/draw_bodygraph.py +489 -0
  32. libaditya/draw/draw_sbc.py +712 -0
  33. libaditya/draw/themes/default-theme.hd +53 -0
  34. libaditya/ephe/ast0/se00010s.se1 +0 -0
  35. libaditya/ephe/seas_00.se1 +0 -0
  36. libaditya/ephe/seas_06.se1 +0 -0
  37. libaditya/ephe/seas_12.se1 +0 -0
  38. libaditya/ephe/seas_18.se1 +0 -0
  39. libaditya/ephe/seas_24.se1 +0 -0
  40. libaditya/ephe/seas_30.se1 +0 -0
  41. libaditya/ephe/seas_36.se1 +0 -0
  42. libaditya/ephe/seas_42.se1 +0 -0
  43. libaditya/ephe/seas_48.se1 +0 -0
  44. libaditya/ephe/seasm06.se1 +0 -0
  45. libaditya/ephe/seasm12.se1 +0 -0
  46. libaditya/ephe/seasm18.se1 +0 -0
  47. libaditya/ephe/seasm24.se1 +0 -0
  48. libaditya/ephe/seasm30.se1 +0 -0
  49. libaditya/ephe/seasm36.se1 +0 -0
  50. libaditya/ephe/seasm42.se1 +0 -0
  51. libaditya/ephe/seasm48.se1 +0 -0
  52. libaditya/ephe/seasm54.se1 +0 -0
  53. libaditya/ephe/sefstars.txt +4245 -0
  54. libaditya/ephe/semo_00.se1 +0 -0
  55. libaditya/ephe/semo_06.se1 +0 -0
  56. libaditya/ephe/semo_12.se1 +0 -0
  57. libaditya/ephe/semo_18.se1 +0 -0
  58. libaditya/ephe/semo_24.se1 +0 -0
  59. libaditya/ephe/semo_30.se1 +0 -0
  60. libaditya/ephe/semo_36.se1 +0 -0
  61. libaditya/ephe/semo_42.se1 +0 -0
  62. libaditya/ephe/semo_48.se1 +0 -0
  63. libaditya/ephe/semom06.se1 +0 -0
  64. libaditya/ephe/semom12.se1 +0 -0
  65. libaditya/ephe/semom18.se1 +0 -0
  66. libaditya/ephe/semom24.se1 +0 -0
  67. libaditya/ephe/semom30.se1 +0 -0
  68. libaditya/ephe/semom36.se1 +0 -0
  69. libaditya/ephe/semom42.se1 +0 -0
  70. libaditya/ephe/semom48.se1 +0 -0
  71. libaditya/ephe/semom54.se1 +0 -0
  72. libaditya/ephe/sepl_00.se1 +0 -0
  73. libaditya/ephe/sepl_06.se1 +0 -0
  74. libaditya/ephe/sepl_12.se1 +0 -0
  75. libaditya/ephe/sepl_18.se1 +0 -0
  76. libaditya/ephe/sepl_24.se1 +0 -0
  77. libaditya/ephe/sepl_30.se1 +0 -0
  78. libaditya/ephe/sepl_36.se1 +0 -0
  79. libaditya/ephe/sepl_42.se1 +0 -0
  80. libaditya/ephe/sepl_48.se1 +0 -0
  81. libaditya/ephe/seplm06.se1 +0 -0
  82. libaditya/ephe/seplm12.se1 +0 -0
  83. libaditya/ephe/seplm18.se1 +0 -0
  84. libaditya/ephe/seplm24.se1 +0 -0
  85. libaditya/ephe/seplm30.se1 +0 -0
  86. libaditya/ephe/seplm36.se1 +0 -0
  87. libaditya/ephe/seplm42.se1 +0 -0
  88. libaditya/ephe/seplm48.se1 +0 -0
  89. libaditya/ephe/seplm54.se1 +0 -0
  90. libaditya/hd/__init__.py +8 -0
  91. libaditya/hd/calc.py +55 -0
  92. libaditya/hd/constants.py +127 -0
  93. libaditya/hd/longitude.py +271 -0
  94. libaditya/objects/__init__.py +19 -0
  95. libaditya/objects/celestial_object.py +206 -0
  96. libaditya/objects/context.py +133 -0
  97. libaditya/objects/cusps.py +259 -0
  98. libaditya/objects/julian_day.py +265 -0
  99. libaditya/objects/location.py +167 -0
  100. libaditya/objects/longitude.py +987 -0
  101. libaditya/objects/nakshatras.py +285 -0
  102. libaditya/objects/planets.py +2059 -0
  103. libaditya/objects/shadbala.py +398 -0
  104. libaditya/objects/signs.py +690 -0
  105. libaditya/objects/swe_functions.py +75 -0
  106. libaditya/print_functions.py +548 -0
  107. libaditya/read.py +665 -0
  108. libaditya/stars/__init__.py +4 -0
  109. libaditya/stars/fixed_star.py +216 -0
  110. libaditya/stars/make_swe_stars.py +407 -0
  111. libaditya/stars/star-sign-boundaries +44 -0
  112. libaditya/stars/stellarium/__init__.py +6 -0
  113. libaditya/stars/stellarium/remote_control/__init__.py +22 -0
  114. libaditya/stars/stellarium/remote_control/location.py +82 -0
  115. libaditya/stars/stellarium/remote_control/locationsearch.py +35 -0
  116. libaditya/stars/stellarium/remote_control/main.py +165 -0
  117. libaditya/stars/stellarium/remote_control/objects.py +63 -0
  118. libaditya/stars/stellarium/remote_control/scripts.py +81 -0
  119. libaditya/stars/stellarium/remote_control/simbad.py +20 -0
  120. libaditya/stars/stellarium/remote_control/stelaction.py +31 -0
  121. libaditya/stars/stellarium/remote_control/stelproperty.py +30 -0
  122. libaditya/stars/stellarium/remote_control/view.py +85 -0
  123. libaditya/stars/stellarium/stellarium.py +92 -0
  124. libaditya/stars/the_stars.py +522 -0
  125. libaditya/stars/utilities.py +539 -0
  126. libaditya/utils.py +431 -0
  127. libaditya/write.py +67 -0
  128. libaditya-0.3.4.dist-info/METADATA +588 -0
  129. libaditya-0.3.4.dist-info/RECORD +131 -0
  130. libaditya-0.3.4.dist-info/WHEEL +5 -0
  131. libaditya-0.3.4.dist-info/licenses/LICENSE +661 -0
@@ -0,0 +1,588 @@
1
+ Metadata-Version: 2.4
2
+ Name: libaditya
3
+ Version: 0.3.4
4
+ Summary: Astrological calculation library for Adityas. It is capable of calculating using tropical zodiac, tropical adityas, or sidereal signs. It can do any ayanamsa for naskhatras, including tropcial/sidereal nakshatras, or both sidereal or both tropical (right now, Vedanga Jyotisha ayanamsa). It has basic HD calculations in it; will include more soon. see README for more information on trying it.
5
+ Project-URL: Homepage, https://gitlab.com/j0sh4rp3/libaditya
6
+ Project-URL: Repository, https://gitlab.com/j0sh4rp3/libaditya
7
+ License-File: LICENSE
8
+ Requires-Python: <=3.13
9
+ Requires-Dist: drawsvg>=2.4.1
10
+ Requires-Dist: metar>=1.11.0
11
+ Requires-Dist: more-itertools>=10.8.0
12
+ Requires-Dist: prettytable>=3.17.0
13
+ Requires-Dist: pyswisseph>=2.10.3.2
14
+ Requires-Dist: requests>=2.32.5
15
+ Requires-Dist: rich>=14.3.2
16
+ Requires-Dist: toml>=0.10.2
17
+ Provides-Extra: stellarium
18
+ Description-Content-Type: text/markdown
19
+
20
+ # README
21
+
22
+ ```libaditya``` is an astrological calculation library meant to be easily understood in terms
23
+ of what calculations are performed and how they are done.
24
+
25
+ My hope is that astrologers will be able to use this directly themselves. There is
26
+ obviously value in the various types of GUI programs and viewing a chart (though
27
+ ```libaditya``` can draw some kinds of charts), there is also value in thinking about
28
+ astrology in a way that interacting with it through ```libaditya``` would help
29
+ cultivate. I hope to use it to create more "end-user-friendly" software, but I would
30
+ also like it to be possible for non-programmers to learn and use.
31
+
32
+ There is a companion program ```pyphemeris``` which is meant to serve as an easily
33
+ readable documentation on how the library works. Each function in ```libaditya``` itself is
34
+ meant to return the requested data in a way that can then be presented in some way.
35
+ Built into most ```libaditya``` classes are functions to represent themselves as text
36
+ through repr (__repr__) and ```print```, i.e., through ```__str__```. ```pyphemeris```
37
+ makes use of these in order to print the requested data to ```stdout```. I have also
38
+ started adding ```rich``` representations in ```libaditya``` itself, through ```.rich()``` methods.
39
+
40
+
41
+ # Table of Contents
42
+
43
+ - [README](#readme)
44
+ - [Table of Contents](#table-of-contents)
45
+ - [Installation](#installation)
46
+ - [Usage](#usage)
47
+ - [Defaults](#defaults)
48
+ - [Entering a Chart](#entering-a-chart)
49
+ - [Reading a Chart from a File](#reading-a-chart-from-a-file)
50
+ - [Chart Types and Options](#chart-types-and-options)
51
+ - [EphContext](#ephcontext)
52
+ - [Chart](#chart)
53
+ - [Ayanamsas](#ayanamsas)
54
+ - [Chart Systems](#chart-systems)
55
+ - [Dignity Example](#dignity-example)
56
+ - [Vargas](#vargas)
57
+ - [Human Design](#human-design)
58
+ - [Sarvatobhadra Chakra](#sarvatobhadra-chakra)
59
+ - [Cards of Truth](#cards-of-truth)
60
+
61
+ # Installation
62
+
63
+ ```libaditya``` is now on pypi.org, so it can be installed with ```pip install
64
+ libaditya```...I think. I use Arch (btw) and they do python packages differently (I
65
+ think?...Python packaging is strange), so I use virtual environments through ```uv```.
66
+
67
+ In any case, at this point ```libaditya``` is not really mature enough to have a major
68
+ version, so if you are interested in testing it out or changing it or working on it, I
69
+ recommend installing is the following way, then you can pull changes as they come:
70
+
71
+ I recommend using ```uv``` to install ```libaditya```. On MacOS, you can ```brew install uv```
72
+
73
+ ```sh
74
+
75
+ git clone https://gitlab.com/j0sh4rp3/libaditya
76
+
77
+ uv venv
78
+ source .venv/bin/activate
79
+ uv add . --dev
80
+ ```
81
+
82
+ then, 1) if you dont change any of the code at all, then you can do ```git pull```, and
83
+ it should update from the gitlab repo. 2) if you make changes to libaditya, im not really sure with
84
+ how that would work in git from getting updates from libaditya and your own...
85
+
86
+ # Usage
87
+
88
+ then you can go into the Python ```repl``` using
89
+ ```python```
90
+
91
+ then
92
+ ```
93
+ >>> from libaditya import *
94
+ >>> dir()
95
+ ['Chart', 'Chiron', 'Circle', 'Cusp', 'Cusps', 'Earth', 'EphContext', 'Jaimini', 'JulianDay', 'Jupiter', 'Ketu', 'Location', 'Longitude', 'Mars', 'Mercury', 'Moon', 'Nakshatra', 'Nakshatras', 'Names', 'Neptune', 'Panchanga', 'Planet', 'Planets', 'Pluto', 'PrettyTable', 'Rahu', 'Rashi', 'Saturn', 'Self', 'Sign', 'Signs', 'Sun', 'Uranus', 'Varga', 'Venus', 'Yamakoti', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'base_path', 'calc', 'calc_current', 'calc_vdasha', 'calculate_vimshottari_dasha', 'cardinal_points', 'chart', 'charts', 'const', 'constants', 'context', 'current_vimshottari_dasha', 'cusps', 'get_next_lord', 'jaimini', 'julian_day', 'kala', 'length', 'location', 'longitude', 'lord', 'lunar_new_year', 'nakshatras', 'next_dasha_lords', 'objects', 'os', 'panchanga', 'pathlib', 'pd', 'planet_dict', 'planets', 'print_calculated_vimshottari_dasha', 'print_cardinal_points', 'print_functions', 'print_next_dasha_level', 'print_vimshottari_dasha', 'printf', 'read', 'replace', 'signs', 'swe', 'utils', 'vargas', 'vimshottari']
96
+ ```
97
+
98
+ you can then use ```help()```, e.g.:
99
+ ```
100
+ >>> help(Chart)
101
+ ```
102
+
103
+ and this will print info for Chart. I am trying to add documentation to each of these
104
+ classes and function so that there is something helpuful printed.
105
+
106
+ ## Defaults
107
+
108
+ Basically all values have defaults, so you can also do this
109
+ ```
110
+ >>> c=Chart()
111
+ >>> c
112
+ >>> dir(c)
113
+ ```
114
+ to see all of what Chart has and can do.
115
+
116
+ Chart is the main interface for any information, since Chart() is an instantiion of a
117
+ particular time and/or location. You can try ```sun=Sun()```, for instance. This works
118
+ and you can use it to explore Sun and what it can do, but in actual practice you want a
119
+ particular Sun, so you should use chart.rashi().planets().sun() and then whatever you
120
+ want to know, e.g., ```chart.rashi().planets().sun().dignity()```
121
+
122
+ Most of this is meant to be self explanatory. The one thing I need to document better is
123
+ how to input information. It is through EphContext, from libaditya.objects.context. It
124
+ takes a JulianDay and a Location, then a bunch of options.
125
+
126
+ ## Entering a Chart
127
+
128
+ It is now possible to enter chart information "interactively", not really, which will
129
+ produce a ```.toml``` chart file.
130
+
131
+ ```
132
+ >>> write.new_chart_interactive()
133
+ ```
134
+
135
+ In order, it will expect:
136
+ ```
137
+ name: str (optional)
138
+ date: MM/DD/YYYY
139
+ hour: (HH:MM(:SS)) (UTC)
140
+ utcoffset: float
141
+ lat: float, N is positive
142
+ long: float, E is positive
143
+ three formats: 1) decimal float
144
+ 2) DD:MM(:SS)
145
+ // below is how Kala represents these in their .chtk file
146
+ 3) 0DD(E/W)MM'SS(.SS)
147
+ 3) DD(N/S)MM'SS(.SS)
148
+ note: lat and long can each individual be entered with any of these three formats
149
+ alt: float - meters
150
+ placename: str (optional)
151
+ ```
152
+
153
+ The file that will be written is "name", all lowercase, with any spaces replaced by
154
+ "-". Call the function with argument ```outfile="your-filename.toml```" to specify the
155
+ filename.
156
+
157
+ The only software I know of that does astrology like this is Kala, produced by Ernst
158
+ Wilhelm and his wife; I believe she did the actual programming. I have been using it and
159
+ thus the ```.chtk``` format. It is now possible to convert between them. However, the
160
+ ```.toml``` format has a place for altitude of the Location. The Kala format doesn't.
161
+ Right now ```read.chtk_to_toml``` will write it as 0..need to change that.
162
+
163
+ ## Reading a Chart from a File
164
+
165
+ ```read.toml_to_context()``` takes a ```toml``` file such as produced by
166
+ ```write.new_chart_interactive()```. You can use that to instantiate a Chart:
167
+ ```
168
+ >>> context = read.toml_to_context("chart.toml")
169
+ >>> chart = Chart(context)
170
+ ```
171
+
172
+ Likewise for ```.chtk``` files
173
+
174
+ ```
175
+ >>> context = read.chtk_to_context(infile)
176
+ ```
177
+
178
+ this returns an ```EphContext``` that you can then use to instantiate a Chart.
179
+
180
+ An ```EphContext``` also includes all the options for the chart.
181
+
182
+ ## Chart Types and Options
183
+
184
+ Plus basic Python if you are new to this.
185
+
186
+ ### EphContext
187
+
188
+ The first basic building block of ```libaditya``` is the ```EphContext```. This holds
189
+ all of the time, location, calculation option, and disply option information for the
190
+ entire chart. This is a dataclass, i.e., it is essentially information. It has all the
191
+ information that is needed to instantiate a ```Chart```.
192
+
193
+ In Python, "to instantiate" means to make a specific instance of. On the day of your
194
+ birth, the Sun was at a particular place in the sky, you were born at a particular
195
+ location. The time and place are necessary to "instatiate" you as a human. In Python,
196
+ there is such a thing as a generic "Human" object:
197
+
198
+ ```
199
+ class Human:
200
+
201
+ def __init__(self, time, place):
202
+ self.time = time
203
+ self.place = place
204
+ ```
205
+
206
+ That is how we define a "Human" object. To instantiate it, we need to say:
207
+ ```
208
+ >>> josh = Human("15:08","Indiana")
209
+ ```
210
+
211
+ ```Human``` just has a time and place "in theory". ```josh``` has an actual time and
212
+ place (you can check them by entering ```josh.time```). (btw, that code is valid Python
213
+ code, which you can copy-paste and run in the ```repl```).
214
+
215
+ An ```EphContext``` allows us to instantiate a ```Chart```, because it knows all of the
216
+ information necessary to allow a specific ```Chart``` to come into existence.
217
+
218
+ TODO: write a more detailed section elsewhere going over ```EphContext``` in detail
219
+
220
+ ### Chart
221
+
222
+ We have already seen how to instantiate a ```Chart```:
223
+ ```
224
+ >>> c = Chart(EphContext()) /// which is the same as c = Chart()
225
+ ```
226
+ this gives a ```Chart``` for right now at the default place, which is defined in the
227
+ definition of the class ```Location``` (```libaditya/objects/location.py```). The default
228
+ location is Yamakoti.
229
+
230
+ The other default chart options are all defined in ```libaditya/objects/context.py``` in
231
+ the class definition for ```EphContext```. The base default for ```libaditya``` is
232
+ tropical coordinates with the Aditya Circle (sign 1 = Dhata, 330 ecliptic longitude),
233
+ with ayanamsa 98 for nakshatras (see ayanamsas below).
234
+
235
+ Other default sets of chart options can be easily used with your instantiated ```Chart```:
236
+ ```
237
+ >>> chart = Chart()
238
+ >>> chart /// this will show a string representation of the chart. at the top is a
239
+ /// header will all of the information and options used for that chart
240
+ >>> chart.tropical()
241
+ >>> chart.sidereal()
242
+ >>> chart.heliocentric()
243
+ >>> chart.now()
244
+ ...
245
+ ```
246
+
247
+ There are more than just those...see if you can find all of the possibilities.
248
+
249
+ ```Chart().sidereal()``` defaults to ayanamsa 27, True Citra Paksha. You can choose a
250
+ different ayanamsa like this:
251
+ ```
252
+ >>> chart.sidereal(ayanamsa=29)
253
+ ```
254
+
255
+ ### Ayanamsas
256
+
257
+ ```libaditya``` at the core is a wrapper for Swiss Ephemeris functions. Thus, it
258
+ supports any ayanamsa the Swiss Ephemeris does. There are also some custom ayanamsa that
259
+ ```libaditya``` can use.
260
+
261
+ Check [here](https://www.astro.com/swisseph/swisseph.htm#_Toc112511738) for an
262
+ interesting and techincal discussion of ayanamsa by the programmers of the Swiss
263
+ Ephemeris.
264
+
265
+ Follows a list of all the Swiss Ephemeris ayanamsas. To set the ayanamsa in
266
+ ```libaditya```, use the proper integer that is in the middle column below. You can also
267
+ use ```swe.NAME```, where ```NAME``` is what follows the integer in the proper row, but
268
+ with the ```SE_```. Thus, for "Fagan/Bradley", you can do
269
+ ```chart.sidereal(ayanama=swe.SE_SIDM_FAGAN_BRADLEY)``` or
270
+ ```chart.sidereal(ayanamsa=0)```.
271
+
272
+ From [here](https://www.astro.com/swisseph/swephprg.htm#_Toc112949016)
273
+
274
+ ```
275
+ "Fagan/Bradley”, 0 SE_SIDM_FAGAN_BRADLEY
276
+ "Lahiri”, 1 SE_SIDM_LAHIRI
277
+ "De Luce”, 2 SE_SIDM_DELUCE
278
+ "Raman”, 3 SE_SIDM_RAMAN
279
+ "Usha/Shashi”, 4 SE_SIDM_USHASHASHI
280
+ "Krishnamurti”, 5 SE_SIDM_KRISHNAMURTI
281
+ "Djwhal Khul”, 6 SE_SIDM_DJWHAL_KHUL
282
+ "Yukteshwar”, 7 SE_SIDM_YUKTESHWAR
283
+ "J.N. Bhasin”, 8 SE_SIDM_JN_BHASIN
284
+ "Babylonian/Kugler 1”, 9 SE_SIDM_BABYL_KUGLER1
285
+ "Babylonian/Kugler 2”, 10 SE_SIDM_BABYL_KUGLER2
286
+ "Babylonian/Kugler 3”, 11 SE_SIDM_BABYL_KUGLER3
287
+ "Babylonian/Huber”, 12 SE_SIDM_BABYL_HUBER
288
+ "Babylonian/Eta Piscium”, 13 SE_SIDM_BABYL_ETPSC
289
+ "Babylonian/Aldebaran = 15 Tau”, 14 SE_SIDM_ALDEBARAN_15TAU
290
+ "Hipparchos”, 15 SE_SIDM_HIPPARCHOS
291
+ "Sassanian”, 16 SE_SIDM_SASSANIAN
292
+ "Galact. Center = 0 Sag”, 17 SE_SIDM_GALCENT_0SAG
293
+ "J2000”, 18 SE_SIDM_J2000
294
+ "J1900”, 19 SE_SIDM_J1900
295
+ "B1950”, 20 SE_SIDM_B1950
296
+ "Suryasiddhanta”, 21 SE_SIDM_SURYASIDDHANTA
297
+ "Suryasiddhanta, mean Sun”, 22 SE_SIDM_SURYASIDDHANTA_MSUN
298
+ "Aryabhata”, 23 SE_SIDM_ARYABHATA
299
+ "Aryabhata, mean Sun”, 24 SE_SIDM_ARYABHATA_MSUN
300
+ "SS Revati”, 25 SE_SIDM_SS_REVATI
301
+ "SS Citra”, 26 SE_SIDM_SS_CITRA
302
+ "True Citra”, 27 SE_SIDM_TRUE_CITRA
303
+ "True Revati”, 28 SE_SIDM_TRUE_REVATI
304
+ "True Pushya (PVRN Rao) ”, 29 SE_SIDM_TRUE_PUSHYA
305
+ "Galactic Center (Gil Brand) ”, 30 SE_SIDM_GALCENT_RGBRAND
306
+ "Galactic Equator (IAU1958) ”, 31 SE_SIDM_GALEQU_IAU1958
307
+ "Galactic Equator”, 32 SE_SIDM_GALEQU_TRUE
308
+ "Galactic Equator mid-Mula”, 33 SE_SIDM_GALEQU_MULA
309
+ "Skydram (Mardyks) ”, 34 SE_SIDM_GALALIGN_MARDYKS
310
+ "True Mula (Chandra Hari) ”, 35 SE_SIDM_TRUE_MULA
311
+ "Dhruva/Gal.Center/Mula (Wilhelm) ”, 36 SE_SIDM_GALCENT_MULA_WILHELM
312
+ "Aryabhata 522”, 37 SE_SIDM_ARYABHATA_522
313
+ "Babylonian/Britton”, 38 SE_SIDM_BABYL_BRITTON
314
+ "\"Vedic\"/Sheoran 39 SE_SIDM_TRUE_SHEORAN
315
+ "Cochrane (Gal.Center = 0 Cap)" 40 SE_SIDM_GALCENT_COCHRANE
316
+ "Galactic Equator (Fiorenza)", 41 SE_SIDM_GALEQU_FIORENZA
317
+ "Vettius Valens", 42 SE_SIDM_VALENS_MOON
318
+ "Lahiri 1940", 43 SE_SIDM_LAHIRI_1940
319
+ "Lahiri VP285", 44 SE_SIDM_LAHIRI_VP285
320
+ "Krishnamurti-Senthilathiban", 45 SE_SIDM_KRISHNAMURTI_VP291
321
+ "Lahiri ICRC", 46 SE_SIDM_LAHIRI_ICRC
322
+ ```
323
+
324
+ TODO: custom ayanamsas in ```libaditya```
325
+
326
+ ### Chart Systems
327
+
328
+ TODO: explain how options for these are managed in ```EphContext```.
329
+
330
+
331
+ ## Dignity example
332
+
333
+ for example
334
+
335
+ ```
336
+ >>> rashi.dignities()
337
+ ['GF', 'N', 'GF', 'OH', 'EX', 'N', 'MT']
338
+ ```
339
+
340
+ ```
341
+ >>> help(rashi.dignities)
342
+ ```
343
+
344
+ you will see a help screen where you can read
345
+
346
+ ```
347
+ dignities() -> [<class 'str'>]
348
+ return a list of dignities in the natural order
349
+ Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn
350
+ ```
351
+
352
+ so is returns a list of strings "EX", "DB", "GF", etc. for all the dignities of the
353
+ planets in normal Vedic order. So that is the data; it is use to you how to find it.
354
+
355
+ in libaditya.printf (which you should be able to use as printf if you did ```from
356
+ libaditya import *```), there are print functions for some things.
357
+
358
+ for example
359
+ ```
360
+ printf.print_dignity_table(chart.rashi().dignities())
361
+ ```
362
+
363
+ you can get a varga with ```.varga(n)```
364
+
365
+ get dignities in the navamsha
366
+ ```
367
+ printf.print_dignity_table(chart.varga(9).dignities())
368
+ ```
369
+
370
+ to find the chara karakas
371
+ ```
372
+ printf.print_jaimini_karakas(chart.rashi().planets().jaimini_karakas())
373
+ ```
374
+
375
+ so then you can find the AK in the d9
376
+ ```
377
+ ak = chart.rashi().planets().jaimini_karakas()[0]
378
+ ```
379
+
380
+ ```Planets.jaimini_karakas()``` return a list of ```Planet``` classes. So if the AK is
381
+ Venus, then ```ak``` would the ```Venus``` class of the Venus of the Rashi chart.
382
+
383
+ get svamsha
384
+ ```
385
+ svamsha = chart.varga(9).signs()[ak.sign()]
386
+ ```
387
+
388
+ ```Varga.signs()``` returns a dictionary, where the keys are integers 1-12, which
389
+ correspond to signs 1-12. This is true regardless of the system we are using. The system
390
+ is set by the ```sysflg``` and by the ```circle=Circle```. ```sysflg``` can be tropical
391
+ or sidereal (footnote: some others that aren't well implemeneted yet, e.g., helio, bary,
392
+ draconic, true sidereal) ```circle=Circle.ZODIAC``` or ```circle=Circle.ADITYA```. In
393
+ the former, sign 1 = Aries (whether tropical or sidereal). In the later, sign 1 = Dhata,
394
+ which is at 330 tropical ecliptic longitude.
395
+
396
+ This takes care of all necessary tropical, Aditya, sidereal calculations.
397
+
398
+ When accessed through ```Chart()``` all of these works as given by the ```EphContext```
399
+ parameters ```sysflg``` and ```circle``` with the options as just explained, and of
400
+ course ```ayanamsa```.
401
+
402
+ To see all the options in ```EphContext```:
403
+ ```
404
+ help(EphContext)
405
+ ```
406
+
407
+ # Vargas
408
+
409
+ Vargas can be accessed using ```Chart().varga(n)```.
410
+
411
+ If ```n``` is positive, the corresponding parivritti varga of that number will be
412
+ produced.
413
+
414
+ Other vargas will have negative numbers to indicate them. Here are the vargas currently
415
+ implemeneted:
416
+ ```
417
+ -2 Hora
418
+ -3 Drekkana
419
+ -4 Chaturthamsha
420
+ -10 Dashamsha
421
+ -100 Dashamsha with Even Rashis going in reverse
422
+ -12 Dvadashamsha
423
+ -16 Shodashamsha
424
+ -20 Vimshamsha
425
+ -24 Parashara Chaturvimshamsha
426
+ -240 Siddhamsha
427
+ -27 Bhamsha
428
+ -40 Khdavedamsha
429
+ -45 Akshavedamsha
430
+ -60 Shashtyamsha
431
+ ```
432
+
433
+ # Human Design
434
+
435
+ ```libaditya``` currently has basic Human Design support and can draw Human Design natal
436
+ bodygraphs for a Chart. It can also disply all of the relevant information about the
437
+ Human Design properties of the planets, both conscious and unconscious, e.g., their
438
+ gate, line, etc.
439
+
440
+ How to get Human Design information about the planets:
441
+ ```
442
+ >>> c = Chart()
443
+ >>> hdp = c.bodygraph().planets()
444
+ >>> print(hdp)
445
+ // c.bodygraph().(un)conscious_planets() returns a Planets class of all the Planet-s
446
+ >>> cp = c.bodygraph().conscious_planets().hd_planets()
447
+ >>> print(cp)
448
+ >>> ucp = c.bodygraph().unconscious_planets().hd_planets()
449
+ >>> print(ucp)
450
+ ```
451
+
452
+ To draw a bodygraph:
453
+ ```
454
+ >>> c.bodygraph().draw_svg(outfile="my-bodygraph.svg")
455
+ ```
456
+
457
+ A reminder if you are new to Python: if you want to know can come after ```c.bodygraph()```,
458
+ then assign that object to a variable, then you can inspect it using ```dir()``` or tab
459
+ completion:
460
+ ```
461
+ >>> bg = c.bodygraph()
462
+ >>> dir(bg)
463
+ >>> bg.(<TAB><TAB>)
464
+ ```
465
+
466
+ TODO:
467
+
468
+ add Variables, the "arrows" that you can see on some bodygraphs on both sides of the
469
+ head center. also, all of the information that also comes from the color, tone, and base
470
+ from other planets, e.g., diet, environment, etc.
471
+ all of the calculations are necessary, i just need to figure out what thing specifies
472
+ what and write that into ```libaditya```.
473
+
474
+ # Sarvatobhadra Chakra
475
+
476
+ An early version of ```libaditya``` had a program that would draw a sarvatobhadra
477
+ chakra. I have started moving that over to work with ```libaditya```, so that any chart
478
+ will be able to draw a sarvatobhadra chakra for itself.
479
+
480
+ Right now, it only draws the base chart. When this is fully implemented, you will be
481
+ able to do something like ```chart.draw_sbc()``` and it will draw one for you.
482
+ ```
483
+ /// english_letters: bool for whether or not to include small English equivalents of the
484
+ /// Sanskrit letters
485
+ /// right now, .draw_sbc() drawing a Drawing object from drawsvg
486
+ >>> d = c.rashi().draw_sbc(english_letters=True)
487
+ >>> d.save_svg("sbc-base.svg")
488
+ ```
489
+
490
+ # Cards of Truth
491
+
492
+ I have just started an implementation of Cards of Truth in ```libaditya```.
493
+
494
+ Currently, it can do birth spreads and year spreads:
495
+ ```
496
+ >>> c = Chart()
497
+ >>> births = c.cot().birth_spread()
498
+ /// gives current year spread
499
+ >>> thisys = c.cot().year_spread()
500
+ /// get year spreat at age 28
501
+ >>> ys28 = c.cot().year_spread(28)
502
+ ```
503
+
504
+ This returns a ```Spread``` object. ```Spread``` currently does not have a ```__str__```
505
+ or a ```__repr__```, but you can view it using ```rich```:
506
+ ```
507
+ >>> births.rich()
508
+ >>> thisys.rich()
509
+ >>> ys28.rich()
510
+ ```
511
+
512
+ If you are new to Python, but know Cards of Truth, check out some of the objects
513
+ to see what further information you can get:
514
+ ```
515
+ >>> cot = c.cot()
516
+ >>> cot
517
+ <libaditya.cards.cards_of_truth.CardsOfTruth object at 0x7f7547f86250>
518
+ >>> cot.(<TAB><TAB>)
519
+ cot.Spread( cot.jack_quadration()
520
+ cot.birth_card() cot.king_quadration()
521
+ cot.birth_spread() cot.master()
522
+ cot.context cot.quadrate(
523
+ cot.deck() cot.quadraten(
524
+ cot.get_birth_spread_with_card_in_position( cot.queen_quadration()
525
+ cot.get_birthspread_from_quadration( cot.year_spread(
526
+ cot.getbspreadwxcfromquad(
527
+ ```
528
+
529
+ Notice that some of these names end with ```()```, some with ```(``` and some with
530
+ nothing. Those ending with ```()``` are methods that can be called with no arguments,
531
+ and in fact do not have any arguments. So by the list, you know you can properly call:
532
+ ```
533
+ >>> cot.birth_card()
534
+ 'KD'
535
+ ```
536
+
537
+ The names with nothing are variables or objects in their own right. Check them out:
538
+ ```
539
+ >>> cot.context
540
+ ```
541
+
542
+ The names with ```(``` can take at least one argument, but may or may not need to have
543
+ one or more arguments. You can always try to call them without any (their argument(s)
544
+ may have defaults).
545
+ ```
546
+ >>> cot.Spread()
547
+ Traceback (most recent call last):
548
+ File "<python-input-10>", line 1, in <module>
549
+ ja.cot().Spread()
550
+ ~~~~~~~~~~~~~~~^^
551
+ TypeError: CardsOfTruth.Spread.__init__() missing 2 required positional arguments: 'spread_list' and 'master'
552
+ ```
553
+
554
+ And we see that didn't really work. Python has a built-in documentation feature. Under
555
+ each class/function/method definition, you can put multi-line comments surrounded by
556
+ triple quotes (""") at beginning and end. I have been trying to put documentation into
557
+ these. With this, you can look up help in the Python ```repl``` itself:
558
+ ```
559
+ >>> help(cot.Spread)
560
+ ```
561
+
562
+ The first line says that ```cot.Spread``` "initializes a Spread object; the most important argument is spread_list, which is the list of numbers presenting the cards of the spread".
563
+
564
+ At the most fundamental layer, ```libaditya``` represents the cards as a list of
565
+ two-letter reprentations of the cards, starting with "AH", "Ace of Hearts" and ending
566
+ with "KS", "King of Spades". Consequently, the list index of card also represents that
567
+ card. Python lists are 0-indexed, meaning the first element of the list is accessed by
568
+ ```ls[0]```.
569
+
570
+ You can see these representations since they live in
571
+ ```libaditya/cards/cards_constants.py```. You can access them from the ```repl```:
572
+ ```
573
+ >>> cards_constants.cards
574
+ >>> cards_constants.jackquad
575
+ ```
576
+
577
+ # Projects
578
+
579
+ implement all swe functions
580
+ allow of swe functions to be used easily in an intuitive way through Chart interface
581
+
582
+ swe,
583
+ cards of truth,
584
+ human design (drawing bodygraphs),
585
+ true sidereal =>
586
+ fixed star nakshatras - spherical nakshatras?,
587
+ sbc,
588
+ swisseph cffi? take a good look at pyswisseph and see if it really needs to be replaced