kundali-chart-mcp 0.2.1
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.
- package/README.md +67 -0
- package/azure-function/function_app.py +93 -0
- package/azure-function/host.json +15 -0
- package/azure-function/kundali_bridge.py +952 -0
- package/azure-function/python/kundali_lib/__init__.py +1 -0
- package/azure-function/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/ephemeris.py +30 -0
- package/azure-function/python/kundali_lib/geocoder.py +82 -0
- package/azure-function/python/kundali_lib/vedic/__init__.py +1 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/arishta.py +465 -0
- package/azure-function/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/azure-function/python/kundali_lib/vedic/avasthas.py +292 -0
- package/azure-function/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/azure-function/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/azure-function/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/azure-function/python/kundali_lib/vedic/chart.py +126 -0
- package/azure-function/python/kundali_lib/vedic/chart_types.py +338 -0
- package/azure-function/python/kundali_lib/vedic/compatibility.py +705 -0
- package/azure-function/python/kundali_lib/vedic/constants.py +108 -0
- package/azure-function/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/azure-function/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/azure-function/python/kundali_lib/vedic/doshas.py +453 -0
- package/azure-function/python/kundali_lib/vedic/gandanta.py +213 -0
- package/azure-function/python/kundali_lib/vedic/gochara.py +277 -0
- package/azure-function/python/kundali_lib/vedic/hora.py +263 -0
- package/azure-function/python/kundali_lib/vedic/houses.py +30 -0
- package/azure-function/python/kundali_lib/vedic/jaimini.py +361 -0
- package/azure-function/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/azure-function/python/kundali_lib/vedic/kartari.py +243 -0
- package/azure-function/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/azure-function/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/azure-function/python/kundali_lib/vedic/muhurta.py +414 -0
- package/azure-function/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/azure-function/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/azure-function/python/kundali_lib/vedic/panchanga.py +297 -0
- package/azure-function/python/kundali_lib/vedic/planets.py +55 -0
- package/azure-function/python/kundali_lib/vedic/shadbala.py +500 -0
- package/azure-function/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/azure-function/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/azure-function/python/kundali_lib/vedic/tajaka.py +482 -0
- package/azure-function/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/azure-function/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/azure-function/python/kundali_lib/vedic/yogas.py +935 -0
- package/azure-function/python/kundali_lib/vedic/zodiac.py +42 -0
- package/azure-function/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/azure-function/requirements.txt +9 -0
- package/index.js +747 -0
- package/kundali-chart-mcp.js +159 -0
- package/kundali_bridge.py +952 -0
- package/package.json +41 -0
- package/python/kundali_lib/__init__.py +1 -0
- package/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/python/kundali_lib/ephemeris.py +30 -0
- package/python/kundali_lib/geocoder.py +82 -0
- package/python/kundali_lib/vedic/__init__.py +1 -0
- package/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/arishta.py +465 -0
- package/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/python/kundali_lib/vedic/avasthas.py +292 -0
- package/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/python/kundali_lib/vedic/chart.py +126 -0
- package/python/kundali_lib/vedic/chart_types.py +338 -0
- package/python/kundali_lib/vedic/compatibility.py +705 -0
- package/python/kundali_lib/vedic/constants.py +108 -0
- package/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/python/kundali_lib/vedic/doshas.py +453 -0
- package/python/kundali_lib/vedic/gandanta.py +213 -0
- package/python/kundali_lib/vedic/gochara.py +277 -0
- package/python/kundali_lib/vedic/hora.py +263 -0
- package/python/kundali_lib/vedic/houses.py +30 -0
- package/python/kundali_lib/vedic/jaimini.py +361 -0
- package/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/python/kundali_lib/vedic/kartari.py +243 -0
- package/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/python/kundali_lib/vedic/muhurta.py +414 -0
- package/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/python/kundali_lib/vedic/panchanga.py +297 -0
- package/python/kundali_lib/vedic/planets.py +55 -0
- package/python/kundali_lib/vedic/shadbala.py +500 -0
- package/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/python/kundali_lib/vedic/tajaka.py +482 -0
- package/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/python/kundali_lib/vedic/yogas.py +935 -0
- package/python/kundali_lib/vedic/zodiac.py +42 -0
- package/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/remote-server.js +590 -0
- package/requirements.txt +8 -0
- package/setup.sh +218 -0
|
@@ -0,0 +1,945 @@
|
|
|
1
|
+
"""Complete Nakshatra database with all attributes for each of the 27 Nakshatras."""
|
|
2
|
+
|
|
3
|
+
# ---------------------------------------------------------------------------
|
|
4
|
+
# Navamsa pada sign sequence
|
|
5
|
+
# ---------------------------------------------------------------------------
|
|
6
|
+
# 108 padas cycle through all 12 signs in order starting from Aries.
|
|
7
|
+
# Every group of 9 nakshatras restarts the 12-sign cycle (9 nak × 4 padas = 36 padas; 36/3 = 12).
|
|
8
|
+
# Within each group of 9, nakshatra N (0-indexed) has padas starting at navamsa sign index (N*4 % 12).
|
|
9
|
+
|
|
10
|
+
_NAVAMSA_SIGNS = [
|
|
11
|
+
"Aries",
|
|
12
|
+
"Taurus",
|
|
13
|
+
"Gemini",
|
|
14
|
+
"Cancer",
|
|
15
|
+
"Leo",
|
|
16
|
+
"Virgo",
|
|
17
|
+
"Libra",
|
|
18
|
+
"Scorpio",
|
|
19
|
+
"Sagittarius",
|
|
20
|
+
"Capricorn",
|
|
21
|
+
"Aquarius",
|
|
22
|
+
"Pisces",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
_NAVAMSA_LORDS = {
|
|
26
|
+
"Aries": "Mars",
|
|
27
|
+
"Taurus": "Venus",
|
|
28
|
+
"Gemini": "Mercury",
|
|
29
|
+
"Cancer": "Moon",
|
|
30
|
+
"Leo": "Sun",
|
|
31
|
+
"Virgo": "Mercury",
|
|
32
|
+
"Libra": "Venus",
|
|
33
|
+
"Scorpio": "Mars",
|
|
34
|
+
"Sagittarius": "Jupiter",
|
|
35
|
+
"Capricorn": "Saturn",
|
|
36
|
+
"Aquarius": "Saturn",
|
|
37
|
+
"Pisces": "Jupiter",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _build_padas(nakshatra_index_0: int) -> list:
|
|
42
|
+
"""Return the 4-pada list for a nakshatra given its 0-based index (0=Ashwini)."""
|
|
43
|
+
start = (nakshatra_index_0 * 4) % 12
|
|
44
|
+
padas = []
|
|
45
|
+
for i in range(4):
|
|
46
|
+
sign = _NAVAMSA_SIGNS[(start + i) % 12]
|
|
47
|
+
padas.append(
|
|
48
|
+
{
|
|
49
|
+
"pada": i + 1,
|
|
50
|
+
"sign": sign,
|
|
51
|
+
"lord": _NAVAMSA_LORDS[sign],
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
return padas
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# ---------------------------------------------------------------------------
|
|
58
|
+
# Complete Nakshatra database
|
|
59
|
+
# ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
NAKSHATRA_DATABASE = {
|
|
62
|
+
"Ashwini": {
|
|
63
|
+
"number": 1,
|
|
64
|
+
"name": "Ashwini",
|
|
65
|
+
"lord": "Ketu",
|
|
66
|
+
"deity": "Ashwini Kumaras (divine physicians)",
|
|
67
|
+
"symbol": "Horse's head",
|
|
68
|
+
"gana": "Deva",
|
|
69
|
+
"gender": "Male",
|
|
70
|
+
"nature": "Movable (Chara)",
|
|
71
|
+
"body_part": "Head, upper brain",
|
|
72
|
+
"quality": "Sattvic",
|
|
73
|
+
"direction": "East",
|
|
74
|
+
"element": "Ether",
|
|
75
|
+
"start_degree": 0.0,
|
|
76
|
+
"end_degree": 13.333,
|
|
77
|
+
"padas": _build_padas(0),
|
|
78
|
+
"keywords": ["speed", "healing", "initiation", "courage", "enthusiasm"],
|
|
79
|
+
"general_nature": (
|
|
80
|
+
"Quick, pioneering, and healing in nature. Bestows vitality and the ability "
|
|
81
|
+
"to initiate new ventures swiftly. Associated with divine healing powers."
|
|
82
|
+
),
|
|
83
|
+
},
|
|
84
|
+
"Bharani": {
|
|
85
|
+
"number": 2,
|
|
86
|
+
"name": "Bharani",
|
|
87
|
+
"lord": "Venus",
|
|
88
|
+
"deity": "Yama (god of death and dharma)",
|
|
89
|
+
"symbol": "Yoni (female reproductive organ)",
|
|
90
|
+
"gana": "Manushya",
|
|
91
|
+
"gender": "Female",
|
|
92
|
+
"nature": "Fierce (Ugra)",
|
|
93
|
+
"body_part": "Head, forehead",
|
|
94
|
+
"quality": "Rajasic",
|
|
95
|
+
"direction": "East",
|
|
96
|
+
"element": "Ether",
|
|
97
|
+
"start_degree": 13.333,
|
|
98
|
+
"end_degree": 26.667,
|
|
99
|
+
"padas": _build_padas(1),
|
|
100
|
+
"keywords": ["restraint", "sacrifice", "transformation", "creativity", "karma"],
|
|
101
|
+
"general_nature": (
|
|
102
|
+
"Deals with cycles of creation and destruction. Strongly disciplined, "
|
|
103
|
+
"capable of bearing great burdens. Associated with karmic debts and sexuality."
|
|
104
|
+
),
|
|
105
|
+
},
|
|
106
|
+
"Krittika": {
|
|
107
|
+
"number": 3,
|
|
108
|
+
"name": "Krittika",
|
|
109
|
+
"lord": "Sun",
|
|
110
|
+
"deity": "Agni (fire god)",
|
|
111
|
+
"symbol": "Razor / flame",
|
|
112
|
+
"gana": "Rakshasa",
|
|
113
|
+
"gender": "Female",
|
|
114
|
+
"nature": "Mixed (Mishra)",
|
|
115
|
+
"body_part": "Eyes, head, neck",
|
|
116
|
+
"quality": "Tamasic",
|
|
117
|
+
"direction": "East",
|
|
118
|
+
"element": "Ether",
|
|
119
|
+
"start_degree": 26.667,
|
|
120
|
+
"end_degree": 40.0,
|
|
121
|
+
"padas": _build_padas(2),
|
|
122
|
+
"keywords": ["power", "fire", "cutting", "purification", "ambition"],
|
|
123
|
+
"general_nature": (
|
|
124
|
+
"Sharp, penetrating, and purifying. Like a blade, it cuts away impurity. "
|
|
125
|
+
"Gives military prowess, sharp intellect, and tendency toward extremes."
|
|
126
|
+
),
|
|
127
|
+
},
|
|
128
|
+
"Rohini": {
|
|
129
|
+
"number": 4,
|
|
130
|
+
"name": "Rohini",
|
|
131
|
+
"lord": "Moon",
|
|
132
|
+
"deity": "Brahma (creator)",
|
|
133
|
+
"symbol": "Ox cart / chariot",
|
|
134
|
+
"gana": "Manushya",
|
|
135
|
+
"gender": "Male",
|
|
136
|
+
"nature": "Fixed (Sthira)",
|
|
137
|
+
"body_part": "Forehead, eyes, face",
|
|
138
|
+
"quality": "Rajasic",
|
|
139
|
+
"direction": "South",
|
|
140
|
+
"element": "Air",
|
|
141
|
+
"start_degree": 40.0,
|
|
142
|
+
"end_degree": 53.333,
|
|
143
|
+
"padas": _build_padas(3),
|
|
144
|
+
"keywords": ["growth", "beauty", "fertility", "sensuality", "creativity"],
|
|
145
|
+
"general_nature": (
|
|
146
|
+
"Most fertile and creative of all nakshatras. Nurturing, beautiful, and "
|
|
147
|
+
"abundant. Associated with the arts, agriculture, and material prosperity."
|
|
148
|
+
),
|
|
149
|
+
},
|
|
150
|
+
"Mrigashira": {
|
|
151
|
+
"number": 5,
|
|
152
|
+
"name": "Mrigashira",
|
|
153
|
+
"lord": "Mars",
|
|
154
|
+
"deity": "Soma / Chandra (Moon god)",
|
|
155
|
+
"symbol": "Deer's head",
|
|
156
|
+
"gana": "Deva",
|
|
157
|
+
"gender": "Neutral",
|
|
158
|
+
"nature": "Soft (Mridu)",
|
|
159
|
+
"body_part": "Eyes, eyebrows",
|
|
160
|
+
"quality": "Sattvic",
|
|
161
|
+
"direction": "South",
|
|
162
|
+
"element": "Air",
|
|
163
|
+
"start_degree": 53.333,
|
|
164
|
+
"end_degree": 66.667,
|
|
165
|
+
"padas": _build_padas(4),
|
|
166
|
+
"keywords": ["searching", "curiosity", "gentleness", "wandering", "seeking"],
|
|
167
|
+
"general_nature": (
|
|
168
|
+
"Eternally seeking and curious. Gentle yet restless, the native is always "
|
|
169
|
+
"searching for something better. Bestows intelligence and sensitivity."
|
|
170
|
+
),
|
|
171
|
+
},
|
|
172
|
+
"Ardra": {
|
|
173
|
+
"number": 6,
|
|
174
|
+
"name": "Ardra",
|
|
175
|
+
"lord": "Rahu",
|
|
176
|
+
"deity": "Rudra (storm god)",
|
|
177
|
+
"symbol": "Teardrop / diamond",
|
|
178
|
+
"gana": "Manushya",
|
|
179
|
+
"gender": "Female",
|
|
180
|
+
"nature": "Fierce (Ugra)",
|
|
181
|
+
"body_part": "Eyes, nose",
|
|
182
|
+
"quality": "Rajasic",
|
|
183
|
+
"direction": "South",
|
|
184
|
+
"element": "Air",
|
|
185
|
+
"start_degree": 66.667,
|
|
186
|
+
"end_degree": 80.0,
|
|
187
|
+
"padas": _build_padas(5),
|
|
188
|
+
"keywords": ["storm", "transformation", "grief", "effort", "breakthrough"],
|
|
189
|
+
"general_nature": (
|
|
190
|
+
"Intense and transformative. Like a storm that clears the air, Ardra breaks "
|
|
191
|
+
"down old structures to make way for new growth. Associated with deep emotional experiences."
|
|
192
|
+
),
|
|
193
|
+
},
|
|
194
|
+
"Punarvasu": {
|
|
195
|
+
"number": 7,
|
|
196
|
+
"name": "Punarvasu",
|
|
197
|
+
"lord": "Jupiter",
|
|
198
|
+
"deity": "Aditi (mother of the gods)",
|
|
199
|
+
"symbol": "Quiver of arrows",
|
|
200
|
+
"gana": "Deva",
|
|
201
|
+
"gender": "Male",
|
|
202
|
+
"nature": "Movable (Chara)",
|
|
203
|
+
"body_part": "Nose, ears, fingers",
|
|
204
|
+
"quality": "Sattvic",
|
|
205
|
+
"direction": "South",
|
|
206
|
+
"element": "Air",
|
|
207
|
+
"start_degree": 80.0,
|
|
208
|
+
"end_degree": 93.333,
|
|
209
|
+
"padas": _build_padas(6),
|
|
210
|
+
"keywords": ["renewal", "return", "wisdom", "expansion", "optimism"],
|
|
211
|
+
"general_nature": (
|
|
212
|
+
"Renewal and return after hardship. Philosophical and optimistic, with a "
|
|
213
|
+
"capacity for repeated fresh starts. Associated with abundance and divine protection."
|
|
214
|
+
),
|
|
215
|
+
},
|
|
216
|
+
"Pushya": {
|
|
217
|
+
"number": 8,
|
|
218
|
+
"name": "Pushya",
|
|
219
|
+
"lord": "Saturn",
|
|
220
|
+
"deity": "Brihaspati (preceptor of the gods)",
|
|
221
|
+
"symbol": "Flower / udder of a cow",
|
|
222
|
+
"gana": "Deva",
|
|
223
|
+
"gender": "Male",
|
|
224
|
+
"nature": "Fixed (Sthira)",
|
|
225
|
+
"body_part": "Face, mouth",
|
|
226
|
+
"quality": "Sattvic",
|
|
227
|
+
"direction": "West",
|
|
228
|
+
"element": "Fire",
|
|
229
|
+
"start_degree": 93.333,
|
|
230
|
+
"end_degree": 106.667,
|
|
231
|
+
"padas": _build_padas(7),
|
|
232
|
+
"keywords": [
|
|
233
|
+
"nourishment",
|
|
234
|
+
"protection",
|
|
235
|
+
"spirituality",
|
|
236
|
+
"dharma",
|
|
237
|
+
"abundance",
|
|
238
|
+
],
|
|
239
|
+
"general_nature": (
|
|
240
|
+
"Most auspicious for religious and spiritual activities. Nourishing, protective, "
|
|
241
|
+
"and devoted to dharma. Called the 'best of nakshatras' by Sage Parashara."
|
|
242
|
+
),
|
|
243
|
+
},
|
|
244
|
+
"Ashlesha": {
|
|
245
|
+
"number": 9,
|
|
246
|
+
"name": "Ashlesha",
|
|
247
|
+
"lord": "Mercury",
|
|
248
|
+
"deity": "Naga / Sarpa (serpent deities)",
|
|
249
|
+
"symbol": "Coiled serpent",
|
|
250
|
+
"gana": "Rakshasa",
|
|
251
|
+
"gender": "Female",
|
|
252
|
+
"nature": "Fierce (Ugra)",
|
|
253
|
+
"body_part": "Ears, chin, nails",
|
|
254
|
+
"quality": "Tamasic",
|
|
255
|
+
"direction": "West",
|
|
256
|
+
"element": "Fire",
|
|
257
|
+
"start_degree": 106.667,
|
|
258
|
+
"end_degree": 120.0,
|
|
259
|
+
"padas": _build_padas(8),
|
|
260
|
+
"keywords": ["cunning", "occult", "clinging", "hypnosis", "depth"],
|
|
261
|
+
"general_nature": (
|
|
262
|
+
"Mysterious and penetrating. Associated with kundalini energy, occult powers, "
|
|
263
|
+
"and psychic abilities. Can indicate deception or deep spiritual insight depending on chart."
|
|
264
|
+
),
|
|
265
|
+
},
|
|
266
|
+
"Magha": {
|
|
267
|
+
"number": 10,
|
|
268
|
+
"name": "Magha",
|
|
269
|
+
"lord": "Ketu",
|
|
270
|
+
"deity": "Pitrs (ancestral spirits)",
|
|
271
|
+
"symbol": "Palanquin / royal throne",
|
|
272
|
+
"gana": "Rakshasa",
|
|
273
|
+
"gender": "Female",
|
|
274
|
+
"nature": "Fierce (Ugra)",
|
|
275
|
+
"body_part": "Nose, lips, chin",
|
|
276
|
+
"quality": "Tamasic",
|
|
277
|
+
"direction": "North",
|
|
278
|
+
"element": "Water",
|
|
279
|
+
"start_degree": 120.0,
|
|
280
|
+
"end_degree": 133.333,
|
|
281
|
+
"padas": _build_padas(9),
|
|
282
|
+
"keywords": ["royalty", "ancestors", "authority", "pride", "legacy"],
|
|
283
|
+
"general_nature": (
|
|
284
|
+
"Regal and authoritative. Strongly connected to ancestral lineage and past-life karma. "
|
|
285
|
+
"Confers leadership ability, dignity, and pride in one's heritage."
|
|
286
|
+
),
|
|
287
|
+
},
|
|
288
|
+
"Purva Phalguni": {
|
|
289
|
+
"number": 11,
|
|
290
|
+
"name": "Purva Phalguni",
|
|
291
|
+
"lord": "Venus",
|
|
292
|
+
"deity": "Bhaga (god of marital bliss and prosperity)",
|
|
293
|
+
"symbol": "Front legs of a bed / hammock",
|
|
294
|
+
"gana": "Manushya",
|
|
295
|
+
"gender": "Female",
|
|
296
|
+
"nature": "Fierce (Ugra)",
|
|
297
|
+
"body_part": "Lips, right hand",
|
|
298
|
+
"quality": "Rajasic",
|
|
299
|
+
"direction": "North",
|
|
300
|
+
"element": "Water",
|
|
301
|
+
"start_degree": 133.333,
|
|
302
|
+
"end_degree": 146.667,
|
|
303
|
+
"padas": _build_padas(10),
|
|
304
|
+
"keywords": ["pleasure", "creativity", "romance", "relaxation", "indulgence"],
|
|
305
|
+
"general_nature": (
|
|
306
|
+
"Playful, creative, and pleasure-seeking. Associated with enjoyment of the senses, "
|
|
307
|
+
"romance, arts, and the sweet aspects of life. A time for rest and enjoyment."
|
|
308
|
+
),
|
|
309
|
+
},
|
|
310
|
+
"Uttara Phalguni": {
|
|
311
|
+
"number": 12,
|
|
312
|
+
"name": "Uttara Phalguni",
|
|
313
|
+
"lord": "Sun",
|
|
314
|
+
"deity": "Aryaman (deity of patronage and contracts)",
|
|
315
|
+
"symbol": "Back legs of a bed",
|
|
316
|
+
"gana": "Manushya",
|
|
317
|
+
"gender": "Female",
|
|
318
|
+
"nature": "Fixed (Sthira)",
|
|
319
|
+
"body_part": "Left hand, spine",
|
|
320
|
+
"quality": "Rajasic",
|
|
321
|
+
"direction": "North",
|
|
322
|
+
"element": "Water",
|
|
323
|
+
"start_degree": 146.667,
|
|
324
|
+
"end_degree": 160.0,
|
|
325
|
+
"padas": _build_padas(11),
|
|
326
|
+
"keywords": ["patronage", "contracts", "generosity", "service", "steadiness"],
|
|
327
|
+
"general_nature": (
|
|
328
|
+
"Reliable and generous in service. Focused on forming enduring agreements and alliances. "
|
|
329
|
+
"Gives loyalty, friendliness, and success through persistent effort."
|
|
330
|
+
),
|
|
331
|
+
},
|
|
332
|
+
"Hasta": {
|
|
333
|
+
"number": 13,
|
|
334
|
+
"name": "Hasta",
|
|
335
|
+
"lord": "Moon",
|
|
336
|
+
"deity": "Savitar (the Sun as creative power)",
|
|
337
|
+
"symbol": "Hand / fist",
|
|
338
|
+
"gana": "Deva",
|
|
339
|
+
"gender": "Male",
|
|
340
|
+
"nature": "Movable (Chara)",
|
|
341
|
+
"body_part": "Hands, fingers",
|
|
342
|
+
"quality": "Sattvic",
|
|
343
|
+
"direction": "East",
|
|
344
|
+
"element": "Earth",
|
|
345
|
+
"start_degree": 160.0,
|
|
346
|
+
"end_degree": 173.333,
|
|
347
|
+
"padas": _build_padas(12),
|
|
348
|
+
"keywords": ["skill", "dexterity", "cleverness", "craftsmanship", "wit"],
|
|
349
|
+
"general_nature": (
|
|
350
|
+
"Skillful and clever, with great dexterity of hand and mind. Excellent craftspeople, "
|
|
351
|
+
"healers, and artisans. Quick to grasp opportunities; friendly and charming."
|
|
352
|
+
),
|
|
353
|
+
},
|
|
354
|
+
"Chitra": {
|
|
355
|
+
"number": 14,
|
|
356
|
+
"name": "Chitra",
|
|
357
|
+
"lord": "Mars",
|
|
358
|
+
"deity": "Vishwakarma (celestial architect)",
|
|
359
|
+
"symbol": "Bright pearl / jewel",
|
|
360
|
+
"gana": "Rakshasa",
|
|
361
|
+
"gender": "Female",
|
|
362
|
+
"nature": "Soft (Mridu)",
|
|
363
|
+
"body_part": "Forehead, neck",
|
|
364
|
+
"quality": "Tamasic",
|
|
365
|
+
"direction": "East",
|
|
366
|
+
"element": "Earth",
|
|
367
|
+
"start_degree": 173.333,
|
|
368
|
+
"end_degree": 186.667,
|
|
369
|
+
"padas": _build_padas(13),
|
|
370
|
+
"keywords": ["beauty", "artistry", "brilliance", "design", "attraction"],
|
|
371
|
+
"general_nature": (
|
|
372
|
+
"Artistically brilliant and visually gifted. Chitra natives are drawn to beauty in "
|
|
373
|
+
"all its forms — architecture, fashion, and the decorative arts. Magnetic personality."
|
|
374
|
+
),
|
|
375
|
+
},
|
|
376
|
+
"Swati": {
|
|
377
|
+
"number": 15,
|
|
378
|
+
"name": "Swati",
|
|
379
|
+
"lord": "Rahu",
|
|
380
|
+
"deity": "Vayu (wind god)",
|
|
381
|
+
"symbol": "Young sprout / coral / sword",
|
|
382
|
+
"gana": "Deva",
|
|
383
|
+
"gender": "Female",
|
|
384
|
+
"nature": "Movable (Chara)",
|
|
385
|
+
"body_part": "Chest, teeth, skin",
|
|
386
|
+
"quality": "Sattvic",
|
|
387
|
+
"direction": "South",
|
|
388
|
+
"element": "Earth",
|
|
389
|
+
"start_degree": 186.667,
|
|
390
|
+
"end_degree": 200.0,
|
|
391
|
+
"padas": _build_padas(14),
|
|
392
|
+
"keywords": [
|
|
393
|
+
"independence",
|
|
394
|
+
"flexibility",
|
|
395
|
+
"trade",
|
|
396
|
+
"diplomacy",
|
|
397
|
+
"adaptability",
|
|
398
|
+
],
|
|
399
|
+
"general_nature": (
|
|
400
|
+
"Independent like the wind, yet adaptable. Gifted in trade, commerce, and diplomacy. "
|
|
401
|
+
"Can bend without breaking. Spiritual aspiration is often present."
|
|
402
|
+
),
|
|
403
|
+
},
|
|
404
|
+
"Vishakha": {
|
|
405
|
+
"number": 16,
|
|
406
|
+
"name": "Vishakha",
|
|
407
|
+
"lord": "Jupiter",
|
|
408
|
+
"deity": "Indra-Agni (Indra and Agni jointly)",
|
|
409
|
+
"symbol": "Triumphal arch / potter's wheel",
|
|
410
|
+
"gana": "Rakshasa",
|
|
411
|
+
"gender": "Female",
|
|
412
|
+
"nature": "Mixed (Mishra)",
|
|
413
|
+
"body_part": "Arms, breasts",
|
|
414
|
+
"quality": "Tamasic",
|
|
415
|
+
"direction": "South",
|
|
416
|
+
"element": "Earth",
|
|
417
|
+
"start_degree": 200.0,
|
|
418
|
+
"end_degree": 213.333,
|
|
419
|
+
"padas": _build_padas(15),
|
|
420
|
+
"keywords": ["ambition", "focus", "triumph", "passion", "rivalry"],
|
|
421
|
+
"general_nature": (
|
|
422
|
+
"Intensely goal-oriented. Like the triumphal arch, marks victory after persistent effort. "
|
|
423
|
+
"Can oscillate between extremes. Dual rulership reflects inner conflict resolved through determination."
|
|
424
|
+
),
|
|
425
|
+
},
|
|
426
|
+
"Anuradha": {
|
|
427
|
+
"number": 17,
|
|
428
|
+
"name": "Anuradha",
|
|
429
|
+
"lord": "Saturn",
|
|
430
|
+
"deity": "Mitra (god of friendship and contracts)",
|
|
431
|
+
"symbol": "Lotus / umbrella",
|
|
432
|
+
"gana": "Deva",
|
|
433
|
+
"gender": "Male",
|
|
434
|
+
"nature": "Soft (Mridu)",
|
|
435
|
+
"body_part": "Breasts, stomach",
|
|
436
|
+
"quality": "Sattvic",
|
|
437
|
+
"direction": "South",
|
|
438
|
+
"element": "Ether",
|
|
439
|
+
"start_degree": 213.333,
|
|
440
|
+
"end_degree": 226.667,
|
|
441
|
+
"padas": _build_padas(16),
|
|
442
|
+
"keywords": ["friendship", "devotion", "organisation", "occult", "balance"],
|
|
443
|
+
"general_nature": (
|
|
444
|
+
"Devoted and organisational. Forms loyal friendships and alliances. "
|
|
445
|
+
"Can balance spiritual and material worlds gracefully. Strong occult inclinations."
|
|
446
|
+
),
|
|
447
|
+
},
|
|
448
|
+
"Jyeshtha": {
|
|
449
|
+
"number": 18,
|
|
450
|
+
"name": "Jyeshtha",
|
|
451
|
+
"lord": "Mercury",
|
|
452
|
+
"deity": "Indra (king of the gods)",
|
|
453
|
+
"symbol": "Earring / circular amulet / umbrella",
|
|
454
|
+
"gana": "Rakshasa",
|
|
455
|
+
"gender": "Female",
|
|
456
|
+
"nature": "Fierce (Ugra)",
|
|
457
|
+
"body_part": "Tongue, right side",
|
|
458
|
+
"quality": "Tamasic",
|
|
459
|
+
"direction": "West",
|
|
460
|
+
"element": "Ether",
|
|
461
|
+
"start_degree": 226.667,
|
|
462
|
+
"end_degree": 240.0,
|
|
463
|
+
"padas": _build_padas(17),
|
|
464
|
+
"keywords": ["seniority", "protection", "authority", "occult", "jealousy"],
|
|
465
|
+
"general_nature": (
|
|
466
|
+
"The eldest and most powerful. Bears great responsibility as protector of others. "
|
|
467
|
+
"Gifted with occult knowledge and leadership, but can harbour jealousy or pride."
|
|
468
|
+
),
|
|
469
|
+
},
|
|
470
|
+
"Mula": {
|
|
471
|
+
"number": 19,
|
|
472
|
+
"name": "Mula",
|
|
473
|
+
"lord": "Ketu",
|
|
474
|
+
"deity": "Nirriti / Alakshmi (goddess of dissolution and misfortune)",
|
|
475
|
+
"symbol": "Bunch of roots / lion's tail",
|
|
476
|
+
"gana": "Rakshasa",
|
|
477
|
+
"gender": "Neutral",
|
|
478
|
+
"nature": "Fierce (Ugra)",
|
|
479
|
+
"body_part": "Feet, left side",
|
|
480
|
+
"quality": "Tamasic",
|
|
481
|
+
"direction": "West",
|
|
482
|
+
"element": "Air",
|
|
483
|
+
"start_degree": 240.0,
|
|
484
|
+
"end_degree": 253.333,
|
|
485
|
+
"padas": _build_padas(18),
|
|
486
|
+
"keywords": ["roots", "investigation", "uprooting", "liberation", "depth"],
|
|
487
|
+
"general_nature": (
|
|
488
|
+
"Gets to the very root of things. Mula natives are investigators, philosophers, "
|
|
489
|
+
"and spiritual seekers. Associated with uprooting — both destructive and liberating."
|
|
490
|
+
),
|
|
491
|
+
},
|
|
492
|
+
"Purva Ashadha": {
|
|
493
|
+
"number": 20,
|
|
494
|
+
"name": "Purva Ashadha",
|
|
495
|
+
"lord": "Venus",
|
|
496
|
+
"deity": "Apah (water goddesses)",
|
|
497
|
+
"symbol": "Elephant tusk / fan / winnowing basket",
|
|
498
|
+
"gana": "Manushya",
|
|
499
|
+
"gender": "Female",
|
|
500
|
+
"nature": "Fierce (Ugra)",
|
|
501
|
+
"body_part": "Back, thighs",
|
|
502
|
+
"quality": "Rajasic",
|
|
503
|
+
"direction": "West",
|
|
504
|
+
"element": "Air",
|
|
505
|
+
"start_degree": 253.333,
|
|
506
|
+
"end_degree": 266.667,
|
|
507
|
+
"padas": _build_padas(19),
|
|
508
|
+
"keywords": [
|
|
509
|
+
"invincibility",
|
|
510
|
+
"purification",
|
|
511
|
+
"pride",
|
|
512
|
+
"philosophy",
|
|
513
|
+
"expansion",
|
|
514
|
+
],
|
|
515
|
+
"general_nature": (
|
|
516
|
+
"Energetic and invincible in pursuit of goals. Associated with purification through "
|
|
517
|
+
"water and wind. Natives are proud, philosophical, and hard to defeat."
|
|
518
|
+
),
|
|
519
|
+
},
|
|
520
|
+
"Uttara Ashadha": {
|
|
521
|
+
"number": 21,
|
|
522
|
+
"name": "Uttara Ashadha",
|
|
523
|
+
"lord": "Sun",
|
|
524
|
+
"deity": "Vishwadevas (ten universal gods)",
|
|
525
|
+
"symbol": "Elephant tusk / planks of bed",
|
|
526
|
+
"gana": "Manushya",
|
|
527
|
+
"gender": "Female",
|
|
528
|
+
"nature": "Fixed (Sthira)",
|
|
529
|
+
"body_part": "Thighs, knees",
|
|
530
|
+
"quality": "Rajasic",
|
|
531
|
+
"direction": "West",
|
|
532
|
+
"element": "Air",
|
|
533
|
+
"start_degree": 266.667,
|
|
534
|
+
"end_degree": 280.0,
|
|
535
|
+
"padas": _build_padas(20),
|
|
536
|
+
"keywords": [
|
|
537
|
+
"victory",
|
|
538
|
+
"righteousness",
|
|
539
|
+
"leadership",
|
|
540
|
+
"endurance",
|
|
541
|
+
"universality",
|
|
542
|
+
],
|
|
543
|
+
"general_nature": (
|
|
544
|
+
"The universal victor. Permanent, just, and widely recognized victories. "
|
|
545
|
+
"Natives are righteous, responsible leaders with enduring achievements."
|
|
546
|
+
),
|
|
547
|
+
},
|
|
548
|
+
"Shravana": {
|
|
549
|
+
"number": 22,
|
|
550
|
+
"name": "Shravana",
|
|
551
|
+
"lord": "Moon",
|
|
552
|
+
"deity": "Vishnu (preserver of the universe)",
|
|
553
|
+
"symbol": "Ear / three footprints",
|
|
554
|
+
"gana": "Deva",
|
|
555
|
+
"gender": "Male",
|
|
556
|
+
"nature": "Movable (Chara)",
|
|
557
|
+
"body_part": "Ears, knees",
|
|
558
|
+
"quality": "Sattvic",
|
|
559
|
+
"direction": "North",
|
|
560
|
+
"element": "Fire",
|
|
561
|
+
"start_degree": 280.0,
|
|
562
|
+
"end_degree": 293.333,
|
|
563
|
+
"padas": _build_padas(21),
|
|
564
|
+
"keywords": ["listening", "learning", "connection", "Vishnu", "travel"],
|
|
565
|
+
"general_nature": (
|
|
566
|
+
"The listener and learner. Associated with acquiring knowledge through hearing. "
|
|
567
|
+
"Blessed by Vishnu; brings preservation, connection, and wide networks."
|
|
568
|
+
),
|
|
569
|
+
},
|
|
570
|
+
"Dhanishta": {
|
|
571
|
+
"number": 23,
|
|
572
|
+
"name": "Dhanishta",
|
|
573
|
+
"lord": "Mars",
|
|
574
|
+
"deity": "Eight Vasus (gods of abundance)",
|
|
575
|
+
"symbol": "Drum / flute",
|
|
576
|
+
"gana": "Rakshasa",
|
|
577
|
+
"gender": "Female",
|
|
578
|
+
"nature": "Movable (Chara)",
|
|
579
|
+
"body_part": "Back, ankles",
|
|
580
|
+
"quality": "Tamasic",
|
|
581
|
+
"direction": "North",
|
|
582
|
+
"element": "Fire",
|
|
583
|
+
"start_degree": 293.333,
|
|
584
|
+
"end_degree": 306.667,
|
|
585
|
+
"padas": _build_padas(22),
|
|
586
|
+
"keywords": ["wealth", "music", "rhythm", "ambition", "adaptability"],
|
|
587
|
+
"general_nature": (
|
|
588
|
+
"Rhythmic and ambitious. Strongly connected to wealth and musical talent. "
|
|
589
|
+
"The drum symbolises the pulse of life — natives are energetic and achievement-oriented."
|
|
590
|
+
),
|
|
591
|
+
},
|
|
592
|
+
"Shatabhisha": {
|
|
593
|
+
"number": 24,
|
|
594
|
+
"name": "Shatabhisha",
|
|
595
|
+
"lord": "Rahu",
|
|
596
|
+
"deity": "Varuna (god of cosmic order and water)",
|
|
597
|
+
"symbol": "Empty circle / thousand flowers",
|
|
598
|
+
"gana": "Rakshasa",
|
|
599
|
+
"gender": "Neutral",
|
|
600
|
+
"nature": "Movable (Chara)",
|
|
601
|
+
"body_part": "Chin, lower leg",
|
|
602
|
+
"quality": "Tamasic",
|
|
603
|
+
"direction": "North",
|
|
604
|
+
"element": "Ether",
|
|
605
|
+
"start_degree": 306.667,
|
|
606
|
+
"end_degree": 320.0,
|
|
607
|
+
"padas": _build_padas(23),
|
|
608
|
+
"keywords": ["healing", "mystery", "solitude", "research", "secrecy"],
|
|
609
|
+
"general_nature": (
|
|
610
|
+
"The hundred healers. Deeply mysterious and introspective. Gifted in medicine, "
|
|
611
|
+
"astrology, and esoteric sciences. Needs solitude to recharge."
|
|
612
|
+
),
|
|
613
|
+
},
|
|
614
|
+
"Purva Bhadrapada": {
|
|
615
|
+
"number": 25,
|
|
616
|
+
"name": "Purva Bhadrapada",
|
|
617
|
+
"lord": "Jupiter",
|
|
618
|
+
"deity": "Aja Ekapada (one-footed serpent / fire dragon)",
|
|
619
|
+
"symbol": "Swords / two-faced man",
|
|
620
|
+
"gana": "Manushya",
|
|
621
|
+
"gender": "Male",
|
|
622
|
+
"nature": "Fierce (Ugra)",
|
|
623
|
+
"body_part": "Sides, feet",
|
|
624
|
+
"quality": "Rajasic",
|
|
625
|
+
"direction": "East",
|
|
626
|
+
"element": "Ether",
|
|
627
|
+
"start_degree": 320.0,
|
|
628
|
+
"end_degree": 333.333,
|
|
629
|
+
"padas": _build_padas(24),
|
|
630
|
+
"keywords": [
|
|
631
|
+
"renunciation",
|
|
632
|
+
"fire",
|
|
633
|
+
"passion",
|
|
634
|
+
"transformation",
|
|
635
|
+
"two-sidedness",
|
|
636
|
+
],
|
|
637
|
+
"general_nature": (
|
|
638
|
+
"Intense and transformative. Natives wrestle with opposing inner forces. "
|
|
639
|
+
"Capable of great renunciation or passionate attachment. Linked to fiery spiritual purification."
|
|
640
|
+
),
|
|
641
|
+
},
|
|
642
|
+
"Uttara Bhadrapada": {
|
|
643
|
+
"number": 26,
|
|
644
|
+
"name": "Uttara Bhadrapada",
|
|
645
|
+
"lord": "Saturn",
|
|
646
|
+
"deity": "Ahir Budhnya (serpent of the deep sea)",
|
|
647
|
+
"symbol": "Twins / back legs of funeral cot",
|
|
648
|
+
"gana": "Manushya",
|
|
649
|
+
"gender": "Male",
|
|
650
|
+
"nature": "Fixed (Sthira)",
|
|
651
|
+
"body_part": "Feet, sides",
|
|
652
|
+
"quality": "Rajasic",
|
|
653
|
+
"direction": "East",
|
|
654
|
+
"element": "Ether",
|
|
655
|
+
"start_degree": 333.333,
|
|
656
|
+
"end_degree": 346.667,
|
|
657
|
+
"padas": _build_padas(25),
|
|
658
|
+
"keywords": ["depth", "wisdom", "compassion", "restraint", "serpentine"],
|
|
659
|
+
"general_nature": (
|
|
660
|
+
"Deep, wise, and compassionate. Like the ocean floor — vast, still, and powerful. "
|
|
661
|
+
"Blesses with a profound philosophical mind and patient, enduring nature."
|
|
662
|
+
),
|
|
663
|
+
},
|
|
664
|
+
"Revati": {
|
|
665
|
+
"number": 27,
|
|
666
|
+
"name": "Revati",
|
|
667
|
+
"lord": "Mercury",
|
|
668
|
+
"deity": "Pushan (nurturer, guide of souls)",
|
|
669
|
+
"symbol": "Fish / drum",
|
|
670
|
+
"gana": "Deva",
|
|
671
|
+
"gender": "Female",
|
|
672
|
+
"nature": "Soft (Mridu)",
|
|
673
|
+
"body_part": "Abdomen, feet",
|
|
674
|
+
"quality": "Sattvic",
|
|
675
|
+
"direction": "East",
|
|
676
|
+
"element": "Ether",
|
|
677
|
+
"start_degree": 346.667,
|
|
678
|
+
"end_degree": 360.0,
|
|
679
|
+
"padas": _build_padas(26),
|
|
680
|
+
"keywords": [
|
|
681
|
+
"completion",
|
|
682
|
+
"nourishment",
|
|
683
|
+
"spiritual journey",
|
|
684
|
+
"gentleness",
|
|
685
|
+
"guidance",
|
|
686
|
+
],
|
|
687
|
+
"general_nature": (
|
|
688
|
+
"The final nakshatra — completion, closure, and liberation. Nurturing and spiritually "
|
|
689
|
+
"inclined. Guides souls on their journey. Gentle, compassionate, and deeply intuitive."
|
|
690
|
+
),
|
|
691
|
+
},
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
# ---------------------------------------------------------------------------
|
|
695
|
+
# Compatibility reference data (mirrors compatibility.py)
|
|
696
|
+
# ---------------------------------------------------------------------------
|
|
697
|
+
|
|
698
|
+
_NAKSHATRAS_LIST = [
|
|
699
|
+
"Ashwini",
|
|
700
|
+
"Bharani",
|
|
701
|
+
"Krittika",
|
|
702
|
+
"Rohini",
|
|
703
|
+
"Mrigashira",
|
|
704
|
+
"Ardra",
|
|
705
|
+
"Punarvasu",
|
|
706
|
+
"Pushya",
|
|
707
|
+
"Ashlesha",
|
|
708
|
+
"Magha",
|
|
709
|
+
"Purva Phalguni",
|
|
710
|
+
"Uttara Phalguni",
|
|
711
|
+
"Hasta",
|
|
712
|
+
"Chitra",
|
|
713
|
+
"Swati",
|
|
714
|
+
"Vishakha",
|
|
715
|
+
"Anuradha",
|
|
716
|
+
"Jyeshtha",
|
|
717
|
+
"Mula",
|
|
718
|
+
"Purva Ashadha",
|
|
719
|
+
"Uttara Ashadha",
|
|
720
|
+
"Shravana",
|
|
721
|
+
"Dhanishta",
|
|
722
|
+
"Shatabhisha",
|
|
723
|
+
"Purva Bhadrapada",
|
|
724
|
+
"Uttara Bhadrapada",
|
|
725
|
+
"Revati",
|
|
726
|
+
]
|
|
727
|
+
|
|
728
|
+
_YONI = {
|
|
729
|
+
"Ashwini": "Horse",
|
|
730
|
+
"Bharani": "Elephant",
|
|
731
|
+
"Krittika": "Sheep",
|
|
732
|
+
"Rohini": "Serpent",
|
|
733
|
+
"Mrigashira": "Serpent",
|
|
734
|
+
"Ardra": "Dog",
|
|
735
|
+
"Punarvasu": "Cat",
|
|
736
|
+
"Pushya": "Sheep",
|
|
737
|
+
"Ashlesha": "Cat",
|
|
738
|
+
"Magha": "Rat",
|
|
739
|
+
"Purva Phalguni": "Rat",
|
|
740
|
+
"Uttara Phalguni": "Cow",
|
|
741
|
+
"Hasta": "Buffalo",
|
|
742
|
+
"Chitra": "Tiger",
|
|
743
|
+
"Swati": "Buffalo",
|
|
744
|
+
"Vishakha": "Tiger",
|
|
745
|
+
"Anuradha": "Deer",
|
|
746
|
+
"Jyeshtha": "Deer",
|
|
747
|
+
"Mula": "Dog",
|
|
748
|
+
"Purva Ashadha": "Monkey",
|
|
749
|
+
"Uttara Ashadha": "Mongoose",
|
|
750
|
+
"Shravana": "Monkey",
|
|
751
|
+
"Dhanishta": "Lion",
|
|
752
|
+
"Shatabhisha": "Horse",
|
|
753
|
+
"Purva Bhadrapada": "Lion",
|
|
754
|
+
"Uttara Bhadrapada": "Cow",
|
|
755
|
+
"Revati": "Elephant",
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
_ENEMY_YONI_PAIRS = {
|
|
759
|
+
frozenset({"Horse", "Buffalo"}),
|
|
760
|
+
frozenset({"Elephant", "Lion"}),
|
|
761
|
+
frozenset({"Sheep", "Monkey"}),
|
|
762
|
+
frozenset({"Serpent", "Mongoose"}),
|
|
763
|
+
frozenset({"Dog", "Deer"}),
|
|
764
|
+
frozenset({"Cat", "Rat"}),
|
|
765
|
+
frozenset({"Cow", "Tiger"}),
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
# Tara categories (1-9 mapped to type)
|
|
769
|
+
_TARA_NAMES = {
|
|
770
|
+
1: "Janma",
|
|
771
|
+
2: "Sampat",
|
|
772
|
+
3: "Vipat",
|
|
773
|
+
4: "Kshema",
|
|
774
|
+
5: "Pratyak",
|
|
775
|
+
6: "Sadhana",
|
|
776
|
+
7: "Naidhana",
|
|
777
|
+
8: "Mitra",
|
|
778
|
+
9: "Ati-Mitra",
|
|
779
|
+
}
|
|
780
|
+
_AUSPICIOUS_TARAS = {1, 4, 7} # Note: Janma is used differently in some traditions
|
|
781
|
+
_INAUSPICIOUS_TARAS = {
|
|
782
|
+
3,
|
|
783
|
+
6,
|
|
784
|
+
9,
|
|
785
|
+
} # Vipat, Sadhana, Naidhana vary by school; Vipat/Naidhana standard
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
# ---------------------------------------------------------------------------
|
|
789
|
+
# Public API
|
|
790
|
+
# ---------------------------------------------------------------------------
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
def get_nakshatra_details(nakshatra_name: str) -> dict:
|
|
794
|
+
"""Return the complete data dict for a nakshatra by name.
|
|
795
|
+
|
|
796
|
+
Parameters
|
|
797
|
+
----------
|
|
798
|
+
nakshatra_name : str
|
|
799
|
+
Exact name as stored in NAKSHATRA_DATABASE (e.g. "Purva Phalguni").
|
|
800
|
+
|
|
801
|
+
Returns
|
|
802
|
+
-------
|
|
803
|
+
dict
|
|
804
|
+
Full nakshatra entry, or an empty dict if the name is not found.
|
|
805
|
+
"""
|
|
806
|
+
return NAKSHATRA_DATABASE.get(nakshatra_name, {})
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
def get_planet_nakshatra_analysis(planetary_positions: list) -> list:
|
|
810
|
+
"""Return nakshatra analysis for each planet in a chart.
|
|
811
|
+
|
|
812
|
+
Parameters
|
|
813
|
+
----------
|
|
814
|
+
planetary_positions : list
|
|
815
|
+
Each item must have at least ``name``, ``nakshatra``, ``longitude``,
|
|
816
|
+
and ``house``.
|
|
817
|
+
|
|
818
|
+
Returns
|
|
819
|
+
-------
|
|
820
|
+
list of dict
|
|
821
|
+
One entry per planet, merging the planet fields with the full
|
|
822
|
+
nakshatra metadata (deity, symbol, gana, quality, keywords, etc.).
|
|
823
|
+
"""
|
|
824
|
+
results = []
|
|
825
|
+
for planet in planetary_positions:
|
|
826
|
+
nak_name = planet.get("nakshatra", "")
|
|
827
|
+
nak_data = NAKSHATRA_DATABASE.get(nak_name, {})
|
|
828
|
+
|
|
829
|
+
results.append(
|
|
830
|
+
{
|
|
831
|
+
"planet": planet["name"],
|
|
832
|
+
"longitude": planet.get("longitude"),
|
|
833
|
+
"house": planet.get("house"),
|
|
834
|
+
"nakshatra": nak_name,
|
|
835
|
+
"nakshatra_lord": nak_data.get("lord", ""),
|
|
836
|
+
"nakshatra_pada": planet.get("pada"),
|
|
837
|
+
"deity": nak_data.get("deity", ""),
|
|
838
|
+
"symbol": nak_data.get("symbol", ""),
|
|
839
|
+
"gana": nak_data.get("gana", ""),
|
|
840
|
+
"gender": nak_data.get("gender", ""),
|
|
841
|
+
"nature": nak_data.get("nature", ""),
|
|
842
|
+
"quality": nak_data.get("quality", ""),
|
|
843
|
+
"element": nak_data.get("element", ""),
|
|
844
|
+
"body_part": nak_data.get("body_part", ""),
|
|
845
|
+
"keywords": nak_data.get("keywords", []),
|
|
846
|
+
"general_nature": nak_data.get("general_nature", ""),
|
|
847
|
+
}
|
|
848
|
+
)
|
|
849
|
+
return results
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
def get_nakshatra_compatibility(nakshatra1: str, nakshatra2: str) -> dict:
|
|
853
|
+
"""Return Tara and Yoni compatibility scores between two nakshatras.
|
|
854
|
+
|
|
855
|
+
Uses the same logic as compatibility.py's ``_score_tara`` and
|
|
856
|
+
``_score_yoni`` functions for consistency.
|
|
857
|
+
|
|
858
|
+
Parameters
|
|
859
|
+
----------
|
|
860
|
+
nakshatra1 : str
|
|
861
|
+
First nakshatra name (reference perspective).
|
|
862
|
+
nakshatra2 : str
|
|
863
|
+
Second nakshatra name.
|
|
864
|
+
|
|
865
|
+
Returns
|
|
866
|
+
-------
|
|
867
|
+
dict with keys:
|
|
868
|
+
tara_score (float 0–3), tara_from_1_to_2 (int), tara_name_1_to_2 (str),
|
|
869
|
+
tara_from_2_to_1 (int), tara_name_2_to_1 (str), tara_description (str),
|
|
870
|
+
yoni_score (float 0–4), yoni_animal_1 (str), yoni_animal_2 (str),
|
|
871
|
+
yoni_description (str), total_score (float), max_score (float),
|
|
872
|
+
compatibility_percent (float).
|
|
873
|
+
"""
|
|
874
|
+
|
|
875
|
+
def _nak_index(name: str) -> int:
|
|
876
|
+
try:
|
|
877
|
+
return _NAKSHATRAS_LIST.index(name)
|
|
878
|
+
except ValueError:
|
|
879
|
+
return 0
|
|
880
|
+
|
|
881
|
+
def _tara_number(from_idx: int, to_idx: int) -> int:
|
|
882
|
+
count = (to_idx - from_idx) % 27 + 1
|
|
883
|
+
return ((count - 1) % 9) + 1
|
|
884
|
+
|
|
885
|
+
def _tara_category(t: int) -> str:
|
|
886
|
+
if t in _AUSPICIOUS_TARAS:
|
|
887
|
+
return "auspicious"
|
|
888
|
+
if t in _INAUSPICIOUS_TARAS:
|
|
889
|
+
return "inauspicious"
|
|
890
|
+
return "neutral"
|
|
891
|
+
|
|
892
|
+
idx1 = _nak_index(nakshatra1)
|
|
893
|
+
idx2 = _nak_index(nakshatra2)
|
|
894
|
+
|
|
895
|
+
t1_to_2 = _tara_number(idx1, idx2)
|
|
896
|
+
t2_to_1 = _tara_number(idx2, idx1)
|
|
897
|
+
cat1 = _tara_category(t1_to_2)
|
|
898
|
+
cat2 = _tara_category(t2_to_1)
|
|
899
|
+
|
|
900
|
+
if cat1 == "auspicious" and cat2 == "auspicious":
|
|
901
|
+
tara_score = 3.0
|
|
902
|
+
elif cat1 == "inauspicious" and cat2 == "inauspicious":
|
|
903
|
+
tara_score = 0.0
|
|
904
|
+
else:
|
|
905
|
+
tara_score = 1.5
|
|
906
|
+
|
|
907
|
+
tara_desc = (
|
|
908
|
+
f"{nakshatra1}→{nakshatra2}: tara {t1_to_2} ({_TARA_NAMES.get(t1_to_2, '')}, {cat1}); "
|
|
909
|
+
f"{nakshatra2}→{nakshatra1}: tara {t2_to_1} ({_TARA_NAMES.get(t2_to_1, '')}, {cat2})."
|
|
910
|
+
)
|
|
911
|
+
|
|
912
|
+
# Yoni
|
|
913
|
+
yoni1 = _YONI.get(nakshatra1, "")
|
|
914
|
+
yoni2 = _YONI.get(nakshatra2, "")
|
|
915
|
+
|
|
916
|
+
if yoni1 == yoni2:
|
|
917
|
+
yoni_score = 4.0
|
|
918
|
+
yoni_compat = "same animal — ideal"
|
|
919
|
+
elif frozenset({yoni1, yoni2}) in _ENEMY_YONI_PAIRS:
|
|
920
|
+
yoni_score = 0.0
|
|
921
|
+
yoni_compat = "enemy animals — incompatible"
|
|
922
|
+
else:
|
|
923
|
+
yoni_score = 2.0
|
|
924
|
+
yoni_compat = "neutral animal pairing"
|
|
925
|
+
|
|
926
|
+
yoni_desc = f"{nakshatra1} ({yoni1}) — {nakshatra2} ({yoni2}): {yoni_compat}."
|
|
927
|
+
|
|
928
|
+
total = tara_score + yoni_score
|
|
929
|
+
max_pts = 7.0 # 3 (tara) + 4 (yoni)
|
|
930
|
+
|
|
931
|
+
return {
|
|
932
|
+
"tara_score": tara_score,
|
|
933
|
+
"tara_from_1_to_2": t1_to_2,
|
|
934
|
+
"tara_name_1_to_2": _TARA_NAMES.get(t1_to_2, ""),
|
|
935
|
+
"tara_from_2_to_1": t2_to_1,
|
|
936
|
+
"tara_name_2_to_1": _TARA_NAMES.get(t2_to_1, ""),
|
|
937
|
+
"tara_description": tara_desc,
|
|
938
|
+
"yoni_score": yoni_score,
|
|
939
|
+
"yoni_animal_1": yoni1,
|
|
940
|
+
"yoni_animal_2": yoni2,
|
|
941
|
+
"yoni_description": yoni_desc,
|
|
942
|
+
"total_score": round(total, 2),
|
|
943
|
+
"max_score": max_pts,
|
|
944
|
+
"compatibility_percent": round(total / max_pts * 100, 1),
|
|
945
|
+
}
|