Marriage compatibility
| # | Koot | Max Points | What It Assesses |
|---|---|---|---|
| 1 | Varna | 1 | Spiritual/social compatibility, ego levels |
| 2 | Vashya | 2 | Mutual attraction, control, and dominance |
| 3 | Tara | 3 | Health, wellbeing, and longevity of the couple |
| 4 | Yoni | 4 | Physical/sexual compatibility and intimacy |
| 5 | Graha Maitri | 5 | Mental compatibility, friendship between Moon signs |
| 6 | Gana | 6 | Temperament match (Deva/Manushya/Rakshasa nature) |
| 7 | Rashi (Bhakoot) | 7 | Emotional bonding, love, prosperity, health |
| 8 | Nadi | 8 | Health of offspring, genetic compatibility |
| Score | Meaning |
|---|---|
| Below 18 | Not recommended - poor compatibility |
| 18-24 | Average - acceptable match |
| 24-32 | Good match - recommended |
| 32-36 | Excellent match - very auspicious |
Ankit tiwari 01/12/1995 1:10pm Jaunpur Uttar Pradesh Anjali Singh 27/09/1995 12:20pm Ghaziabad Uttar Pradesh
pip install pyephem --quiet 2>/dev/null; python3 << 'EOF' # Vedic Astrology Calculator # Using Swiss Ephemeris-based calculations via flatlib or manual calculation # Install flatlib for Vedic astrology import subprocess subprocess.run(["pip", "install", "flatlib", "--quiet"], capture_output=True) from flatlib.datetime import Datetime from flatlib.geopos import GeoPos from flatlib.chart import Chart from flatlib import const from flatlib.object import GenericObject # ── BIRTH DATA ────────────────────────────────────────────── # Ankit Tiwari: 01/12/1995, 1:10 PM, Jaunpur UP (25.7469°N, 82.6836°E) # Anjali Singh: 27/09/1995, 12:20 PM, Ghaziabad UP (28.6692°N, 77.4538°E) # Flatlib uses Tropical by default; we need Sidereal (Lahiri ayanamsa ~23.7° in 1995) # Ayanamsa for 1995 ≈ 23°41' (Lahiri) AYANAMSA = 23.683 # degrees, Lahiri 1995 def tropical_to_sidereal(deg): sid = (deg - AYANAMSA) % 360 return sid def deg_to_sign(deg): signs = ["Aries","Taurus","Gemini","Cancer","Leo","Virgo", "Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"] idx = int(deg / 30) return signs[idx], deg % 30 def get_nakshatra(moon_deg_sid): nakshatras = [ "Ashwini","Bharani","Krittika","Rohini","Mrigashira","Ardra", "Punarvasu","Pushya","Ashlesha","Magha","Purva Phalguni","Uttara Phalguni", "Hasta","Chitra","Swati","Vishakha","Anuradha","Jyeshtha", "Mula","Purva Ashadha","Uttara Ashadha","Shravana","Dhanishtha", "Shatabhisha","Purva Bhadrapada","Uttara Bhadrapada","Revati" ] each = 360/27 # 13.333 degrees each idx = int(moon_deg_sid / each) pada = int((moon_deg_sid % each) / (each/4)) + 1 return nakshatras[idx % 27], idx % 27 + 1, pada def get_nakshatra_lord(nak_num): # 1-indexed lords = ["Ketu","Venus","Sun","Moon","Mars","Rahu","Jupiter","Saturn","Mercury"] return lords[(nak_num - 1) % 9] # ── ANKIT: 01 Dec 1995, 13:10 IST, Jaunpur (25.7469N, 82.6836E) ── # IST = UTC+5:30, so UTC = 07:40 date1 = Datetime('1995/12/01', '07:40', '+00:00') pos1 = GeoPos(25.7469, 82.6836) chart1 = Chart(date1, pos1) moon1 = chart1.get(const.MOON) sun1 = chart1.get(const.SUN) asc1 = chart1.get(const.ASC) mars1 = chart1.get(const.MARS) moon1_sid = tropical_to_sidereal(moon1.lon) sun1_sid = tropical_to_sidereal(sun1.lon) asc1_sid = tropical_to_sidereal(asc1.lon) mars1_sid = tropical_to_sidereal(mars1.lon) moon1_sign, moon1_deg = deg_to_sign(moon1_sid) sun1_sign, sun1_sdeg = deg_to_sign(sun1_sid) asc1_sign, asc1_adeg = deg_to_sign(asc1_sid) mars1_sign, mars1_mdeg = deg_to_sign(mars1_sid) nak1, nak1_num, pada1 = get_nakshatra(moon1_sid) nak1_lord = get_nakshatra_lord(nak1_num) print("=" * 55) print("ANKIT TIWARI - 01 Dec 1995, 1:10 PM, Jaunpur UP") print("=" * 55) print(f" Lagna (Ascendant) : {asc1_sign} {asc1_adeg:.2f}°") print(f" Moon (Rashi) : {moon1_sign} {moon1_deg:.2f}°") print(f" Sun : {sun1_sign} {sun1_sdeg:.2f}°") print(f" Mars : {mars1_sign} {mars1_mdeg:.2f}°") print(f" Nakshatra : {nak1} (Pada {pada1})") print(f" Nakshatra Lord : {nak1_lord}") print(f" Moon Sidereal deg : {moon1_sid:.4f}") # ── ANJALI: 27 Sep 1995, 12:20 IST, Ghaziabad (28.6692N, 77.4538E) ── # UTC = 06:50 date2 = Datetime('1995/09/27', '06:50', '+00:00') pos2 = GeoPos(28.6692, 77.4538) chart2 = Chart(date2, pos2) moon2 = chart2.get(const.MOON) sun2 = chart2.get(const.SUN) asc2 = chart2.get(const.ASC) mars2 = chart2.get(const.MARS) moon2_sid = tropical_to_sidereal(moon2.lon) sun2_sid = tropical_to_sidereal(sun2.lon) asc2_sid = tropical_to_sidereal(asc2.lon) mars2_sid = tropical_to_sidereal(mars2.lon) moon2_sign, moon2_deg = deg_to_sign(moon2_sid) sun2_sign, sun2_sdeg = deg_to_sign(sun2_sid) asc2_sign, asc2_adeg = deg_to_sign(asc2_sid) mars2_sign, mars2_mdeg = deg_to_sign(mars2_sid) nak2, nak2_num, pada2 = get_nakshatra(moon2_sid) nak2_lord = get_nakshatra_lord(nak2_num) print() print("=" * 55) print("ANJALI SINGH - 27 Sep 1995, 12:20 PM, Ghaziabad UP") print("=" * 55) print(f" Lagna (Ascendant) : {asc2_sign} {asc2_adeg:.2f}°") print(f" Moon (Rashi) : {moon2_sign} {moon2_deg:.2f}°") print(f" Sun : {sun2_sign} {sun2_sdeg:.2f}°") print(f" Mars : {mars2_sign} {mars2_mdeg:.2f}°") print(f" Nakshatra : {nak2} (Pada {pada2})") print(f" Nakshatra Lord : {nak2_lord}") print(f" Moon Sidereal deg : {moon2_sid:.4f}") print() print("=" * 55) print("RAW TROPICAL (for verification)") print(f" Ankit Moon tropical: {moon1.lon:.4f} Sid: {moon1_sid:.4f}") print(f" Anjali Moon tropical: {moon2.lon:.4f} Sid: {moon2_sid:.4f}") print(f" Ankit Mars tropical : {mars1.lon:.4f} Sid: {mars1_sid:.4f}") print(f" Anjali Mars tropical: {mars2.lon:.4f} Sid: {mars2_sid:.4f}") print(f" Ankit Asc tropical : {asc1.lon:.4f} Sid: {asc1_sid:.4f}") print(f" Anjali Asc tropical : {asc2.lon:.4f} Sid: {asc2_sid:.4f}") EOF
pip install pyswisseph --quiet 2>/dev/null; python3 << 'EOF' # Manual Vedic astrology using pyswisseph directly import subprocess r = subprocess.run(["pip", "install", "pyswisseph", "--quiet"], capture_output=True) print(r.stderr.decode()[-200:] if r.returncode != 0 else "pyswisseph install ok") import swisseph as swe import math swe.set_ephe_path('/usr/share/ephe') AYANAMSA_LAHIRI = 23.683 # degrees for 1995 (Lahiri) def jd_from_utc(year, month, day, hour_utc): return swe.julday(year, month, day, hour_utc) def get_planet_sid(jd, planet): result, _ = swe.calc_ut(jd, planet) trop = result[0] sid = (trop - AYANAMSA_LAHIRI) % 360 return trop, sid def deg_to_sign(deg): signs = ["Aries","Taurus","Gemini","Cancer","Leo","Virgo", "Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"] idx = int(deg / 30) return signs[idx % 12], deg % 30, idx % 12 + 1 # name, deg-in-sign, sign-num (1-12) def get_nakshatra(moon_sid): nakshatras = [ "Ashwini","Bharani","Krittika","Rohini","Mrigashira","Ardra", "Punarvasu","Pushya","Ashlesha","Magha","Purva Phalguni","Uttara Phalguni", "Hasta","Chitra","Swati","Vishakha","Anuradha","Jyeshtha", "Mula","Purva Ashadha","Uttara Ashadha","Shravana","Dhanishtha", "Shatabhisha","Purva Bhadrapada","Uttara Bhadrapada","Revati" ] span = 360 / 27 idx = int(moon_sid / span) % 27 pada = int((moon_sid % span) / (span / 4)) + 1 return nakshatras[idx], idx + 1, pada # name, num(1-27), pada def get_asc_sid(jd, lat, lon): houses, ascmc = swe.houses(jd, lat, lon, b'P') trop = ascmc[0] sid = (trop - AYANAMSA_LAHIRI) % 360 return trop, sid # ── ANKIT: 01/12/1995, 1:10 PM IST = 07:40 UTC, Jaunpur (25.7469N, 82.6836E) jd1 = jd_from_utc(1995, 12, 1, 7 + 40/60) lat1, lon1 = 25.7469, 82.6836 moon1_t, moon1_s = get_planet_sid(jd1, swe.MOON) sun1_t, sun1_s = get_planet_sid(jd1, swe.SUN) mars1_t, mars1_s = get_planet_sid(jd1, swe.MARS) asc1_t, asc1_s = get_asc_sid(jd1, lat1, lon1) m1_sign, m1_deg, m1_snum = deg_to_sign(moon1_s) s1_sign, s1_deg, _ = deg_to_sign(sun1_s) a1_sign, a1_deg, a1_snum = deg_to_sign(asc1_s) mr1_sign, mr1_deg, mr1_snum = deg_to_sign(mars1_s) nak1, nak1_num, pada1 = get_nakshatra(moon1_s) print("=" * 60) print("ANKIT TIWARI | 01 Dec 1995 | 1:10 PM | Jaunpur, UP") print("=" * 60) print(f" Lagna (Ascendant) : {a1_sign} ({a1_deg:.1f}°) [House {a1_snum}]") print(f" Moon Rashi : {m1_sign} ({m1_deg:.1f}°) [Sign #{m1_snum}]") print(f" Sun : {s1_sign} ({s1_deg:.1f}°)") print(f" Mars : {mr1_sign} ({mr1_deg:.1f}°) [Sign #{mr1_snum}]") print(f" Janma Nakshatra : {nak1} (Pada {pada1}, Nak #{nak1_num})") # ── ANJALI: 27/09/1995, 12:20 PM IST = 06:50 UTC, Ghaziabad (28.6692N, 77.4538E) jd2 = jd_from_utc(1995, 9, 27, 6 + 50/60) lat2, lon2 = 28.6692, 77.4538 moon2_t, moon2_s = get_planet_sid(jd2, swe.MOON) sun2_t, sun2_s = get_planet_sid(jd2, swe.SUN) mars2_t, mars2_s = get_planet_sid(jd2, swe.MARS) asc2_t, asc2_s = get_asc_sid(jd2, lat2, lon2) m2_sign, m2_deg, m2_snum = deg_to_sign(moon2_s) s2_sign, s2_deg, _ = deg_to_sign(sun2_s) a2_sign, a2_deg, a2_snum = deg_to_sign(asc2_s) mr2_sign, mr2_deg, mr2_snum = deg_to_sign(mars2_s) nak2, nak2_num, pada2 = get_nakshatra(moon2_s) print() print("=" * 60) print("ANJALI SINGH | 27 Sep 1995 | 12:20 PM | Ghaziabad, UP") print("=" * 60) print(f" Lagna (Ascendant) : {a2_sign} ({a2_deg:.1f}°) [House {a2_snum}]") print(f" Moon Rashi : {m2_sign} ({m2_deg:.1f}°) [Sign #{m2_snum}]") print(f" Sun : {s2_sign} ({s2_deg:.1f}°)") print(f" Mars : {mr2_sign} ({mr2_deg:.1f}°) [Sign #{mr2_snum}]") print(f" Janma Nakshatra : {nak2} (Pada {pada2}, Nak #{nak2_num})") print() print("RAW SID DEGREES (for Guna Milan calc):") print(f" Ankit Moon: {moon1_s:.4f} Nak#: {nak1_num} Rashi#: {m1_snum} Mars Rashi#: {mr1_snum} Asc Rashi#: {a1_snum}") print(f" Anjali Moon: {moon2_s:.4f} Nak#: {nak2_num} Rashi#: {m2_snum} Mars Rashi#: {mr2_snum} Asc Rashi#: {a2_snum}") EOF
python3 << 'EOF' # Pure Python Vedic Astrology - No external library needed # Using VSOP87 simplified approximation for Moon and Sun positions # Good enough for Nakshatra-level accuracy (within 1 degree) import math def jd(year, month, day, hour_ut=0.0): """Calculate Julian Day Number""" if month <= 2: year -= 1 month += 12 A = int(year / 100) B = 2 - A + int(A / 4) return int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + day + hour_ut/24.0 + B - 1524.5 def sun_longitude(jd_val): """Approximate Sun longitude (tropical) - accuracy ~0.01 degrees""" T = (jd_val - 2451545.0) / 36525.0 L0 = 280.46646 + 36000.76983 * T + 0.0003032 * T*T M = 357.52911 + 35999.05029 * T - 0.0001537 * T*T M = math.radians(M % 360) C = (1.914602 - 0.004817*T - 0.000014*T*T)*math.sin(M) C += (0.019993 - 0.000101*T)*math.sin(2*M) C += 0.000289*math.sin(3*M) sun_lon = (L0 + C) % 360 return sun_lon def moon_longitude(jd_val): """Approximate Moon longitude (tropical) - accuracy ~0.3 degrees""" T = (jd_val - 2451545.0) / 36525.0 # Mean longitude L0 = 218.3164477 + 481267.88123421*T - 0.0015786*T*T # Mean anomaly of moon M = 134.9633964 + 477198.8675055*T + 0.0087414*T*T # Mean anomaly of sun Ms = 357.5291092 + 35999.0502909*T - 0.0001536*T*T # Moon arg of latitude F = 93.2720950 + 483202.0175233*T - 0.0036539*T*T # Elongation D = 297.8501921 + 445267.1114034*T - 0.0018819*T*T M = math.radians(M % 360) Ms = math.radians(Ms % 360) F = math.radians(F % 360) D = math.radians(D % 360) lon = L0 lon += 6.288774 * math.sin(M) lon += 1.274027 * math.sin(2*D - M) lon += 0.658314 * math.sin(2*D) lon += 0.213618 * math.sin(2*M) lon -= 0.185116 * math.sin(Ms) lon -= 0.114332 * math.sin(2*F) lon += 0.058793 * math.sin(2*D - 2*M) lon += 0.057066 * math.sin(2*D - Ms - M) lon += 0.053322 * math.sin(2*D + M) lon += 0.045758 * math.sin(2*D - Ms) lon -= 0.040923 * math.sin(Ms - M) lon -= 0.034720 * math.sin(D) lon -= 0.030383 * math.sin(Ms + M) lon += 0.015327 * math.sin(2*D - 2*F) lon -= 0.012528 * math.sin(M + 2*F) # approx lon += 0.010980 * math.sin(M - 2*F) return lon % 360 def mars_longitude(jd_val): """Approximate Mars longitude - accuracy ~1 degree""" T = (jd_val - 2451545.0) / 36525.0 L = 355.45332 + 19140.30268 * T + 0.00038 * T*T M = 19.3730 + 19140.39548 * T M = math.radians(M % 360) C = 10.69117 * math.sin(M) + 0.62330 * math.sin(2*M) + 0.05023 * math.sin(3*M) return (L + C) % 360 def asc_approx(jd_val, lat, lon_geo): """Approximate Ascendant - simplified RAMC method""" T = (jd_val - 2451545.0) / 36525.0 # Greenwich Sidereal Time GMST = 280.46061837 + 360.98564736629 * (jd_val - 2451545.0) + 0.000387933*T*T LMST = (GMST + lon_geo) % 360 lat_r = math.radians(lat) LMST_r = math.radians(LMST) # Ascendant formula asc = math.degrees(math.atan2(math.cos(LMST_r), -math.sin(LMST_r)*math.cos(math.radians(23.4393)) - math.tan(lat_r)*math.sin(math.radians(23.4393)))) return asc % 360 # Lahiri Ayanamsa 1995 (Jan 1 1995 = 23°41'35" ≈ 23.693°) def lahiri_ayanamsa(jd_val): T = (jd_val - 2451545.0) / 36525.0 return 23.85 - 0.013974 * T # simplified linear; ~23.68-23.70 for 1995 SIGNS = ["Aries","Taurus","Gemini","Cancer","Leo","Virgo", "Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"] SIGN_LORDS = ["Mars","Venus","Mercury","Moon","Sun","Mercury", "Venus","Mars","Jupiter","Saturn","Saturn","Jupiter"] NAKSHATRAS = [ "Ashwini","Bharani","Krittika","Rohini","Mrigashira","Ardra", "Punarvasu","Pushya","Ashlesha","Magha","Purva Phalguni","Uttara Phalguni", "Hasta","Chitra","Swati","Vishakha","Anuradha","Jyeshtha", "Mula","Purva Ashadha","Uttara Ashadha","Shravana","Dhanishtha", "Shatabhisha","Purva Bhadrapada","Uttara Bhadrapada","Revati" ] NAK_LORDS = ["Ketu","Venus","Sun","Moon","Mars","Rahu","Jupiter","Saturn","Mercury"] * 3 # Nadi: 0=Adi, 1=Madhya, 2=Antya (pattern repeats every 9 nakshatras: Adi,Madhya,Antya,Antya,Madhya,Adi,Adi,Madhya,Antya) NAK_NADI = [0,1,2, 2,1,0, 0,1,2, 0,1,2, 2,1,0, 0,1,2, 0,1,2, 2,1,0, 0,1,2] NADI_NAMES = ["Adi (Vata)","Madhya (Pitta)","Antya (Kapha)"] # Gana: 0=Deva, 1=Manushya, 2=Rakshasa NAK_GANA = [0,2,2, 0,0,2, 0,0,2, 2,2,0, 0,2,0, 0,0,2, 2,2,0, 0,0,0, 1,1,0, 1,1,0] GANA_NAMES = ["Deva","Manushya","Rakshasa"] # Yoni animals for each nakshatra NAK_YONI = ["Horse","Elephant","Sheep","Serpent","Serpent","Dog", "Cat","Sheep","Cat","Rat","Rat","Cow", "Buffalo","Tiger","Buffalo","Tiger","Hare","Hare", "Dog","Monkey","Mongoose","Monkey","Lion","Horse", "Lion","Cow","Elephant"] # Yoni compatibility: same=4, friendly pair=3, neutral=2, enemy=1 YONI_FRIENDS = { frozenset(["Horse","Horse"]): 4, frozenset(["Elephant","Elephant"]): 4, frozenset(["Sheep","Sheep"]): 4, frozenset(["Serpent","Serpent"]): 4, frozenset(["Dog","Dog"]): 4, frozenset(["Cat","Cat"]): 4, frozenset(["Rat","Rat"]): 4, frozenset(["Cow","Cow"]): 4, frozenset(["Buffalo","Buffalo"]): 4, frozenset(["Tiger","Tiger"]): 4, frozenset(["Hare","Hare"]): 4, frozenset(["Monkey","Monkey"]): 4, frozenset(["Lion","Lion"]): 4, frozenset(["Mongoose","Mongoose"]): 4, # Enemy pairs (0 points) frozenset(["Horse","Buffalo"]): 0, frozenset(["Elephant","Lion"]): 0, frozenset(["Sheep","Monkey"]): 0, frozenset(["Serpent","Mongoose"]): 0, frozenset(["Dog","Hare"]): 0, frozenset(["Cat","Rat"]): 0, frozenset(["Rat","Cat"]): 0, frozenset(["Cow","Tiger"]): 0, } def get_sign_info(sid_deg): idx = int(sid_deg / 30) % 12 return SIGNS[idx], idx+1, sid_deg % 30, SIGN_LORDS[idx] def get_nak_info(moon_sid): span = 360/27 idx = int(moon_sid / span) % 27 pada = int((moon_sid % span) / (span/4)) + 1 return NAKSHATRAS[idx], idx+1, pada, NAK_LORDS[idx], NAK_NADI[idx], NAK_GANA[idx], NAK_YONI[idx] def calc_chart(year, month, day, hour_ist, lat, lon_geo, name): hour_ut = hour_ist - 5.5 jd_val = jd(year, month, day, hour_ut) ayan = lahiri_ayanamsa(jd_val) sun_t = sun_longitude(jd_val) moon_t = moon_longitude(jd_val) mars_t = mars_longitude(jd_val) asc_t = asc_approx(jd_val, lat, lon_geo) sun_s = (sun_t - ayan) % 360 moon_s = (moon_t - ayan) % 360 mars_s = (mars_t - ayan) % 360 asc_s = (asc_t - ayan) % 360 m_sign, m_snum, m_deg, m_lord = get_sign_info(moon_s) s_sign, s_snum, s_deg, s_lord = get_sign_info(sun_s) mr_sign, mr_snum, mr_deg, mr_lord = get_sign_info(mars_s) a_sign, a_snum, a_deg, a_lord = get_sign_info(asc_s) nak_name, nak_num, pada, nak_lord, nadi, gana, yoni = get_nak_info(moon_s) print(f"\n{'='*60}") print(f"{name}") print(f"{'='*60}") print(f" Ayanamsa (Lahiri) : {ayan:.3f}°") print(f" Lagna (Ascendant) : {a_sign} {a_deg:.1f}° (Rashi #{a_snum})") print(f" Moon Rashi : {m_sign} {m_deg:.1f}° (Rashi #{m_snum}, Lord: {m_lord})") print(f" Sun Sign : {s_sign} {s_deg:.1f}°") print(f" Mars : {mr_sign} {mr_deg:.1f}° (Rashi #{mr_snum})") print(f" Janma Nakshatra : {nak_name} Pada {pada} (Nak #{nak_num})") print(f" Nakshatra Lord : {nak_lord}") print(f" Nadi : {NADI_NAMES[nadi]}") print(f" Gana : {GANA_NAMES[gana]}") print(f" Yoni : {yoni}") print(f" Moon Lord : {m_lord}") return { 'moon_s': moon_s, 'moon_snum': m_snum, 'moon_lord': m_lord, 'mars_snum': mr_snum, 'asc_snum': a_snum, 'nak_num': nak_num, 'nadi': nadi, 'gana': gana, 'yoni': yoni, 'nak_name': nak_name, 'pada': pada, 'moon_sign': m_sign, 'asc_sign': a_sign, 'mars_sign': mr_sign } # CALCULATE CHARTS a = calc_chart(1995, 12, 1, 13+10/60, 25.7469, 82.6836, "ANKIT TIWARI | 01 Dec 1995 | 1:10 PM | Jaunpur UP") b = calc_chart(1995, 9, 27, 12+20/60, 28.6692, 77.4538, "ANJALI SINGH | 27 Sep 1995 | 12:20 PM | Ghaziabad UP") print("\n\n" + "="*60) print("ASHTAKOOT GUNA MILAN") print("="*60) score = 0 # 1. VARNA (1 point) # Varna by sign: Brahmin=Cancer,Scorpio,Pisces; Kshatriya=Aries,Leo,Sagittarius # Vaishya=Taurus,Virgo,Capricorn; Shudra=Gemini,Libra,Aquarius varna_map = {1:2,2:3,3:4,4:1,5:2,6:3,7:4,8:1,9:2,10:3,11:4,12:1} # 1=Brahmin,2=Kshatriya,3=Vaishya,4=Shudra (higher is lower varna) varna_names = {1:"Brahmin",2:"Kshatriya",3:"Vaishya",4:"Shudra"} va = varna_map[a['moon_snum']] vb = varna_map[b['moon_snum']] # Groom(Ankit) varna >= Bride(Anjali) varna for 1 pt varna_score = 1 if va <= vb else 0 score += varna_score print(f"\n1. VARNA (Max 1)") print(f" Ankit: {varna_names[va]} | Anjali: {varna_names[vb]}") print(f" Score: {varna_score}/1") # 2. VASHYA (2 points) # Groups: 1=Manav(human)=Gemini,Virgo,Libra,Sagittarius(first half),Aquarius # 2=Chatushpad(quadruped)=Aries,Taurus,Capricorn(first half),Sagittarius(second half) # 3=Jalchar(aquatic)=Cancer,Pisces,Capricorn(second half) # 4=Vanchar(wild)=Leo # 5=Keeta(insect)=Scorpio vashya_map = {1:2,2:2,3:3,4:1,5:4,6:1,7:1,8:5,9:2,10:3,11:1,12:3} vashya_names={1:"Manav",2:"Chatushpad",3:"Jalchar",4:"Vanchar",5:"Keeta"} # control pairs (controller: controlled) vashya_control = {4:[1],1:[3],3:[2]} # simplified vab = vashya_map[a['moon_snum']] vbb = vashya_map[b['moon_snum']] if vab == vbb: vashya_score = 2 elif frozenset([vab, vbb]) in [frozenset([4,1]),frozenset([1,3]),frozenset([2,3])]: vashya_score = 1 else: vashya_score = 0 score += vashya_score print(f"\n2. VASHYA (Max 2)") print(f" Ankit: {vashya_names[vab]} | Anjali: {vashya_names[vbb]}") print(f" Score: {vashya_score}/2") # 3. TARA (3 points) # Count nakshatras from girl's birth nak to boy's birth nak, divide by 9 # Tara positions 1,3,5,7 = auspicious; 2,4,6,8,9 = inauspicious (simplified) nak_a = a['nak_num'] nak_b = b['nak_num'] tara_ab = ((nak_b - nak_a) % 27) + 1 # Ankit from Anjali's nak tara_ba = ((nak_a - nak_b) % 27) + 1 # Anjali from Ankit's nak tara_ab_pos = ((tara_ab - 1) % 9) + 1 tara_ba_pos = ((tara_ba - 1) % 9) + 1 TARA_GOOD = {1,3,5,7} # auspicious tara positions ab_good = tara_ab_pos in TARA_GOOD ba_good = tara_ba_pos in TARA_GOOD if ab_good and ba_good: tara_score = 3 elif ab_good or ba_good: tara_score = 1.5 else: tara_score = 0 tara_score = int(tara_score) score += tara_score print(f"\n3. TARA (Max 3)") print(f" Ankit Nak#{nak_a} | Anjali Nak#{nak_b}") print(f" Tara Ankit->Anjali: {tara_ab_pos} ({'Auspicious' if ab_good else 'Inauspicious'})") print(f" Tara Anjali->Ankit: {tara_ba_pos} ({'Auspicious' if ba_good else 'Inauspicious'})") print(f" Score: {tara_score}/3") # 4. YONI (4 points) yoni_a = a['yoni'] yoni_b = b['yoni'] key = frozenset([yoni_a, yoni_b]) if yoni_a == yoni_b: yoni_score = 4 elif key in YONI_FRIENDS: yoni_score = YONI_FRIENDS[key] else: yoni_score = 2 # neutral score += yoni_score print(f"\n4. YONI (Max 4)") print(f" Ankit: {yoni_a} | Anjali: {yoni_b}") print(f" Score: {yoni_score}/4") # 5. GRAHA MAITRI (5 points) # Planet friendship table PLANET_FRIENDS = { 'Sun': {'friend':['Moon','Mars','Jupiter'], 'neutral':['Mercury'], 'enemy':['Venus','Saturn']}, 'Moon': {'friend':['Sun','Mercury'], 'neutral':['Mars','Jupiter','Venus','Saturn'], 'enemy':[]}, 'Mars': {'friend':['Sun','Moon','Jupiter'], 'neutral':['Venus','Saturn'], 'enemy':['Mercury']}, 'Mercury':{'friend':['Sun','Venus'], 'neutral':['Mars','Jupiter','Saturn'], 'enemy':['Moon']}, 'Jupiter':{'friend':['Sun','Moon','Mars'], 'neutral':['Saturn'], 'enemy':['Mercury','Venus']}, 'Venus': {'friend':['Mercury','Saturn'], 'neutral':['Mars','Jupiter'], 'enemy':['Sun','Moon']}, 'Saturn': {'friend':['Mercury','Venus'], 'neutral':['Jupiter'], 'enemy':['Sun','Moon','Mars']}, 'Rahu': {'friend':['Venus','Saturn'], 'neutral':['Jupiter'], 'enemy':['Sun','Moon','Mars']}, 'Ketu': {'friend':['Mars','Venus','Saturn'], 'neutral':['Jupiter'], 'enemy':['Sun','Moon','Mercury']}, } def get_relation(p1, p2): if p2 in PLANET_FRIENDS.get(p1,{}).get('friend',[]): return 'friend' elif p2 in PLANET_FRIENDS.get(p1,{}).get('enemy',[]): return 'enemy' else: return 'neutral' ml_a = a['moon_lord'] ml_b = b['moon_lord'] rel_ab = get_relation(ml_a, ml_b) rel_ba = get_relation(ml_b, ml_a) if rel_ab == 'friend' and rel_ba == 'friend': gm_score = 5 elif rel_ab == 'friend' and rel_ba == 'neutral': gm_score = 4 elif rel_ab == 'neutral' and rel_ba == 'neutral': gm_score = 3 elif rel_ab == 'friend' and rel_ba == 'enemy': gm_score = 1 elif rel_ab == 'neutral' and rel_ba == 'enemy': gm_score = 1 else: gm_score = 0 score += gm_score print(f"\n5. GRAHA MAITRI (Max 5)") print(f" Ankit Moon Lord: {ml_a} | Anjali Moon Lord: {ml_b}") print(f" {ml_a}->{ml_b}: {rel_ab} | {ml_b}->{ml_a}: {rel_ba}") print(f" Score: {gm_score}/5") # 6. GANA (6 points) gana_a = a['gana'] gana_b = b['gana'] gana_names = ["Deva","Manushya","Rakshasa"] # Score table GANA_SCORE = { (0,0):6,(1,1):6,(2,2):6, # same (0,1):5,(1,0):5, # Deva-Manushya (1,2):0,(2,1):0, # Manushya-Rakshasa (0) (0,2):1,(2,0):0 # Deva-Rakshasa (1 if groom Deva) } gana_score = GANA_SCORE.get((gana_a, gana_b), 0) score += gana_score print(f"\n6. GANA (Max 6)") print(f" Ankit: {gana_names[gana_a]} | Anjali: {gana_names[gana_b]}") print(f" Score: {gana_score}/6") # 7. BHAKOOT / RASHI (7 points) ra = a['moon_snum'] rb = b['moon_snum'] diff_ab = ((rb - ra) % 12) + 1 # Anjali sign from Ankit diff_ba = ((ra - rb) % 12) + 1 # Ankit sign from Anjali # Inauspicious: 6-8 (Shadashtak), 2-12, 5-9 BHAKOOTA_BAD = {frozenset([6,8]), frozenset([2,12]), frozenset([5,9])} # Use pairs d1 = min(diff_ab, 13-diff_ab) if diff_ab <= 12 else diff_ab pair = frozenset([diff_ab, diff_ba]) has_dosha = pair in BHAKOOTA_BAD bhakoot_score = 0 if has_dosha else 7 score += bhakoot_score print(f"\n7. BHAKOOT/RASHI (Max 7)") print(f" Ankit Rashi: {a['moon_sign']} (#{ra}) | Anjali Rashi: {b['moon_sign']} (#{rb})") print(f" Position A->B: {diff_ab} | B->A: {diff_ba}") dosha_txt = f"BHAKOOT DOSHA PRESENT ({diff_ab}-{diff_ba} axis)" if has_dosha else "No Bhakoot Dosha" print(f" {dosha_txt}") print(f" Score: {bhakoot_score}/7") # 8. NADI (8 points) - MOST IMPORTANT nadi_a = a['nadi'] nadi_b = b['nadi'] nadi_names = ["Adi (Vata)","Madhya (Pitta)","Antya (Kapha)"] has_nadi_dosha = (nadi_a == nadi_b) nadi_score = 0 if has_nadi_dosha else 8 score += nadi_score print(f"\n8. NADI (Max 8)") print(f" Ankit Nadi: {nadi_names[nadi_a]} | Anjali Nadi: {nadi_names[nadi_b]}") if has_nadi_dosha: print(f" *** NADI DOSHA PRESENT - SAME NADI ***") else: print(f" Different Nadi - Auspicious") print(f" Score: {nadi_score}/8") print(f"\n{'='*60}") print(f"TOTAL GUNA MILAN SCORE: {score}/36") rating = "EXCELLENT (>32)" if score>32 else "GOOD (24-32)" if score>=24 else "AVERAGE (18-24)" if score>=18 else "BELOW AVERAGE (<18)" print(f"Rating: {rating}") print(f"{'='*60}") # MANGAL DOSHA CHECK print("\nMANGAL DOSHA CHECK") print("-"*40) # Mars in 1,2,4,7,8,12 from Lagna causes Mangal Dosha def check_mangal(asc_snum, mars_snum): house = ((mars_snum - asc_snum) % 12) + 1 dosha_houses = {1,2,4,7,8,12} return house in dosha_houses, house ankit_md, ankit_house = check_mangal(a['asc_snum'], a['mars_snum']) anjali_md, anjali_house = check_mangal(b['asc_snum'], b['mars_snum']) print(f"Ankit - Mars in House {ankit_house} from Lagna: {'MANGAL DOSHA' if ankit_md else 'No Mangal Dosha'}") print(f"Anjali - Mars in House {anjali_house} from Lagna: {'MANGAL DOSHA' if anjali_md else 'No Mangal Dosha'}") if ankit_md and anjali_md: print(">> Both have Mangal Dosha - DOSHA CANCELLED (mutually nullified)") elif ankit_md or anjali_md: print(">> Only one partner has Mangal Dosha - Dosha active, remedy advised") EOF
| Detail | Ankit Tiwari | Anjali Singh |
|---|---|---|
| Date | 01 Dec 1995 | 27 Sep 1995 |
| Time | 1:10 PM | 12:20 PM |
| Place | Jaunpur, UP | Ghaziabad, UP |
| Lagna (Ascendant) | Pisces | Scorpio |
| Moon Rashi | Pisces (Meena) | Libra (Tula) |
| Sun Sign | Scorpio | Virgo |
| Mars | Sagittarius | Scorpio |
| Janma Nakshatra | Uttara Bhadrapada, Pada 2 | Swati, Pada 2 |
| Nakshatra Lord | Saturn | Rahu |
| Nadi | Madhya (Pitta) | Adi (Vata) |
| Gana | Manushya | Deva |
| Yoni | Cow | Buffalo |
| Moon Lord | Jupiter | Venus |
| # | Koot | Ankit | Anjali | Score | Max |
|---|---|---|---|---|---|
| 1 | Varna | Brahmin | Shudra | ✅ 1 | 1 |
| 2 | Vashya | Jalchar | Manav | ⚠️ 1 | 2 |
| 3 | Tara | Nak #26 | Nak #15 | ⚠️ 1 | 3 |
| 4 | Yoni | Cow | Buffalo | ⚠️ 2 | 4 |
| 5 | Graha Maitri | Jupiter | Venus | ❌ 0 | 5 |
| 6 | Gana | Manushya | Deva | ✅ 5 | 6 |
| 7 | Bhakoot | Pisces (#12) | Libra (#7) | ❌ 0 | 7 |
| 8 | Nadi | Madhya | Adi | ✅ 8 | 8 |
| TOTAL | 18 | 36 |
| Dosha | Status | Severity |
|---|---|---|
| Nadi Dosha | ✅ NOT Present (Different Nadis) | - |
| Bhakoot Dosha | ❌ Present (6-8 Pisces-Libra axis) | Significant |
| Mangal Dosha | ⚠️ Anjali only (Mars in 1st house from Lagna) | Moderate |
Score: 18/36 - Borderline Average The match sits exactly at the minimum acceptable threshold of 18. The outstanding strength is a perfect Nadi score (8/8) and good Gana compatibility. The significant challenges are the Bhakoot Dosha (6-8 axis), zero Graha Maitri score (Jupiter-Venus enmity), and a one-sided Mangal Dosha on Anjali.Most traditional astrologers would say this match can proceed given the 18/36 score and absence of Nadi Dosha, but remedies for Bhakoot and Mangal Dosha are strongly recommended before marriage. A qualified Jyotishi should also examine the full Navamsa (D-9) charts and current Dasha periods of both individuals for a complete picture.