Marriage compatibility

Asking for Preferences
Asking for Preferences
Here is a full overview of the Kundali Matching (Horoscope Matching) system used in Vedic/Hindu astrology for marriage compatibility.

Kundali Matching - Complete Overview

Kundali matching, also called Guna Milan or Ashtakoot Milan, is a traditional Vedic astrology method for assessing marriage compatibility. It compares the birth charts (kundalis) of the prospective bride and groom based on the Moon's position (Rashi and Nakshatra) at birth.

The Ashtakoot System - 8 Dimensions (Koots)

"Ashta" = 8, "Koot" = category. Each koot carries a specific number of points, totaling 36 Gunas maximum.
#KootMax PointsWhat It Assesses
1Varna1Spiritual/social compatibility, ego levels
2Vashya2Mutual attraction, control, and dominance
3Tara3Health, wellbeing, and longevity of the couple
4Yoni4Physical/sexual compatibility and intimacy
5Graha Maitri5Mental compatibility, friendship between Moon signs
6Gana6Temperament match (Deva/Manushya/Rakshasa nature)
7Rashi (Bhakoot)7Emotional bonding, love, prosperity, health
8Nadi8Health of offspring, genetic compatibility

Score Interpretation

ScoreMeaning
Below 18Not recommended - poor compatibility
18-24Average - acceptable match
24-32Good match - recommended
32-36Excellent match - very auspicious
A score of 18 or above out of 36 is generally considered the minimum for proceeding with a match.

The 8 Koots Explained in Detail

1. Varna (1 point)

Represents the spiritual and mental compatibility level. The four varnas are Brahmin, Kshatriya, Vaishya, and Shudra (assigned to Nakshatras, not caste). The groom's Varna should be equal to or higher than the bride's for 1 point. Same varna = 1 point; groom lower = 0.

2. Vashya (2 points)

Measures the natural pull and attraction between the two. Each zodiac sign falls into one of 5 groups: Manav (human), Chatushpad (quadruped), Jalchar (aquatic), Vanchar (wild), and Keeta (insect). Full points if both belong to same group; partial points for one controlling the other.

3. Tara (3 points)

Based on the Nakshatra distance from each person's birth Nakshatra. 27 Nakshatras are divided into 9 groups of 3 (Taras). Each Tara has a positive or negative designation. Full 3 points if both have auspicious Taras from each other's Nakshatra.

4. Yoni (4 points)

Each of the 27 Nakshatras is assigned an animal symbol (horse, elephant, sheep, snake, dog, cat, rat, cow, buffalo, tiger, hare, monkey, lion, mongoose). Points are based on how naturally these animals relate - same yoni = 4, friendly = 3, neutral = 2, enemy = 1, same-sex enemy = 0.

5. Graha Maitri (5 points)

Compares the ruling planets (lords) of the Moon signs of both individuals. Evaluates mental rapport and intellectual bonding. Both lords friendly to each other = 5 points; one friendly, one neutral = 4; both neutral = 3; one friendly, one enemy = 1; both enemies = 0.

6. Gana (6 points)

Every Nakshatra belongs to one of 3 Ganas:
  • Deva (Divine) - gentle, kind, spiritual
  • Manushya (Human) - balanced, worldly
  • Rakshasa (Demonic) - intense, aggressive, independent
Same Gana = 6 points. Deva-Manushya = 5. Manushya-Rakshasa = 0. Deva-Rakshasa = 0 (strongly discouraged).

7. Bhakoot / Rashi (7 points)

Compares the relative position of Moon signs. Certain combinations are considered inauspicious (called Bhakoot Dosha):
  • 6-8 positions (Shadashtak) - illness, separation
  • 2-12 positions - financial troubles
  • 5-9 (considered auspicious in some schools)
Full 7 points if no dosha; 0 points if dosha is present (unless cancelled by other factors).

8. Nadi (8 points) - Most Important

The highest-weighted koot. Each Nakshatra belongs to one of 3 Nadis:
  • Adi (Vata) - first
  • Madhya (Pitta) - middle
  • Antya (Kapha) - last
If both partners have the SAME Nadi = 0 points = Nadi Dosha, which is considered the most serious defect. It signals potential health issues in offspring and marital discord. Different Nadi = full 8 points.

Key Doshas (Defects) in Kundali Matching

Beyond Guna Milan, three major doshas get separate evaluation:

Mangal Dosha (Mars Defect)

  • Mars placed in the 1st, 2nd, 4th, 7th, 8th, or 12th house
  • Affects marital harmony and longevity of the spouse
  • Remedy: Both partners having Mangal Dosha cancels it out (dosha cancellation)

Nadi Dosha

  • Same Nadi for both partners
  • Can indicate reproductive health issues
  • Can be cancelled if both belong to same Nakshatra but different Rashi, or same Rashi but different Nakshatra

Bhakoot Dosha

  • Unfavorable Rashi positioning (6-8 or 2-12 relationship)
  • Can be cancelled if Graha Maitri is strong (lords are friendly)

Dosha Cancellation (Dosha Parihara)

Many doshas can be "cancelled" under specific conditions. For example:
  • Nadi Dosha is cancelled if both are from the same Rashi but different Nakshatra
  • Mangal Dosha is cancelled if both partners have it, or if Mars is in its own sign, exalted, etc.
  • The presence of strong Graha Maitri can mitigate Bhakoot Dosha

Beyond Guna Milan - The Complete Picture

Experienced astrologers look beyond just the score. Additional factors include:
  • Lagna (Ascendant) compatibility - comparing the rising signs
  • 7th house analysis - house of marriage in both charts
  • 7th lord strength - the planet ruling the 7th house
  • Venus and Jupiter placement - planets of love and wisdom
  • Dasha timing - whether the planetary periods are conducive to marriage
  • Navamsa chart (D-9) - the divisional chart specifically for marriage, considered as important as the main birth chart

Practical Notes

  • A score below 18 is generally not recommended, but many astrologers say a score of 18+ with no major doshas is more important than a perfect score.
  • Nadi Dosha (0 in Nadi koot) is considered more serious than a low total score.
  • Gana and Bhakoot are weighted heavily in practice because they relate to temperament and emotional life.
  • No Kundali match is perfect - remedies (pujas, gemstones, rituals) are prescribed for most doshas.
  • Traditional matching is only one input - many astrologers emphasize that personal character and values matter more than chart scores.

This system originated in the Parasara tradition of Vedic astrology and remains widely used across India and the Hindu diaspora today. The interpretation can vary between astrologers and regional traditions (North Indian vs. South Indian practices differ somewhat in weightage and rules).

Ankit tiwari 01/12/1995 1:10pm Jaunpur Uttar Pradesh Anjali Singh 27/09/1995 12:20pm Ghaziabad Uttar Pradesh

Running Command

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

Running Command

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

Running Command

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


🔯 Kundali Matching Report

Ankit Tiwari & Anjali Singh


📋 Birth Charts (Vedic / Sidereal - Lahiri Ayanamsa)

DetailAnkit TiwariAnjali Singh
Date01 Dec 199527 Sep 1995
Time1:10 PM12:20 PM
PlaceJaunpur, UPGhaziabad, UP
Lagna (Ascendant)PiscesScorpio
Moon RashiPisces (Meena)Libra (Tula)
Sun SignScorpioVirgo
MarsSagittariusScorpio
Janma NakshatraUttara Bhadrapada, Pada 2Swati, Pada 2
Nakshatra LordSaturnRahu
NadiMadhya (Pitta)Adi (Vata)
GanaManushyaDeva
YoniCowBuffalo
Moon LordJupiterVenus

⚖️ Ashtakoot Guna Milan - Detailed Scores

#KootAnkitAnjaliScoreMax
1VarnaBrahminShudra11
2VashyaJalcharManav⚠️ 12
3TaraNak #26Nak #15⚠️ 13
4YoniCowBuffalo⚠️ 24
5Graha MaitriJupiterVenus05
6GanaManushyaDeva56
7BhakootPisces (#12)Libra (#7)07
8NadiMadhyaAdi88
TOTAL1836

🏆 Overall Score: 18 / 36 - Average


Koot-by-Koot Analysis

1. Varna - 1/1 ✅ Ankit's Moon is in Pisces (Brahmin Varna), Anjali's in Libra (Shudra Varna). Groom's Varna is higher - full point awarded. Spiritual and ego-level compatibility is fine.
2. Vashya - 1/2 ⚠️ Pisces (Jalchar/aquatic) and Libra (Manav/human) have a partial attraction-control relationship. Half points. There may be some natural pull but not complete mutual influence.
3. Tara - 1/3 ⚠️ Counting from Anjali's Swati (Nak #15) to Ankit's Uttara Bhadrapada (Nak #26) gives Tara position 8 (Mitra-Naidhana - inauspicious). Reverse direction is auspicious (Tara 3). Mixed - partial score. Health and wellbeing compatibility is moderate.
4. Yoni - 2/4 ⚠️ Cow (Ankit) and Buffalo (Anjali) are neutral animals - neither enemies nor friends. Physical/intimate compatibility is average. No conflict but no strong natural harmony either.
5. Graha Maitri - 0/5 ❌ This is a weak point. Ankit's Moon lord is Jupiter and Anjali's Moon lord is Venus. Jupiter and Venus are natural enemies in Vedic astrology (Guru-Shukra Shatru). This indicates differences in values, mindset, and mental wavelength. Long-term intellectual and emotional bonding may require conscious effort.
6. Gana - 5/6 ✅ Ankit is Manushya Gana and Anjali is Deva Gana. Deva-Manushya is a good combination (5 points). Deva Gana individuals are gentle and spiritually inclined; Manushya Gana is balanced and worldly. They complement each other well in temperament.
7. Bhakoot (Rashi) - 0/7 ❌ Pisces (#12) and Libra (#7) fall on the 6-8 axis (Shadashtak - Ankit's sign is 6th from Anjali's, and Anjali's is 8th from Ankit's). This is a Bhakoot Dosha, one of the two significant doshas here. It can indicate stress, health issues, and emotional turbulence in the relationship if left unaddressed.
8. Nadi - 8/8 ✅ (Best Score) Ankit has Madhya (Pitta) Nadi and Anjali has Adi (Vata) Nadi - they are different, which is fully auspicious. Full 8 points. No Nadi Dosha. This is the most important koot and they score perfectly, suggesting good health compatibility for children and no major genetic-level conflicts.

⚠️ Dosha Summary

DoshaStatusSeverity
Nadi DoshaNOT Present (Different Nadis)-
Bhakoot DoshaPresent (6-8 Pisces-Libra axis)Significant
Mangal Dosha⚠️ Anjali only (Mars in 1st house from Lagna)Moderate

Bhakoot Dosha - Can it be cancelled?

Bhakoot Dosha can be cancelled (partially or fully) if:
  • The Moon sign lords are mutual friends - here Jupiter (Ankit) and Venus (Anjali) are enemies, so no cancellation from Graha Maitri
  • Both belong to the same Nakshatra group - they do not
  • This dosha is NOT automatically cancelled here - remedies are strongly advised

Mangal Dosha (Anjali)

Anjali's Mars is in Scorpio, and her Lagna (Ascendant) is also Scorpio, placing Mars in the 1st house - a classic Mangal Dosha placement. Since Ankit does NOT have Mangal Dosha, there is no mutual cancellation. Remedies are advised before marriage.

📊 Strength vs. Weakness Summary

Strengths:
  • Nadi (8/8) - Full score, no Nadi Dosha - health and progeny compatibility is excellent
  • Gana (5/6) - Good temperament match, Deva-Manushya combination works well
  • Varna (1/1) - Full score
Areas Needing Work:
  • Graha Maitri (0/5) - Jupiter vs. Venus enmity means differing thought processes and values; they will need to actively work on understanding each other mentally
  • Bhakoot Dosha (0/7) - The 6-8 axis is present; remedies are recommended
  • Mangal Dosha on Anjali's side - needs remedy

🕉️ Suggested Remedies

  1. For Bhakoot Dosha - Perform Navagrah Shanti puja before marriage. Reciting Chandra mantra (Om Shram Shreem Shraum Sah Chandramase Namah) regularly is also recommended by many Jyotishis.
  2. For Mangal Dosha (Anjali) - Kumbh Vivah (symbolic marriage to a banana tree or Vishnu idol) before the actual marriage is the traditional remedy. Mangal puja and reciting Mangal mantra (Om Ang Angarakaya Namah) 108 times on Tuesdays.
  3. For Graha Maitri weakness - Anjali can wear a Diamond (Venus) and Ankit can wear a Yellow Sapphire (Jupiter) after consulting a qualified astrologer for confirmation.

🔑 Final Verdict

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.

Note: Birth chart calculations use the Lahiri ayanamsa (~23.85° for 1995) and Swiss Ephemeris-based planetary positions. Ascendant calculations are based on provided birth times and coordinates. Minor variations of ±0.5° may occur compared to hand-cast charts. For final decisions, always consult a qualified Jyotishi who can examine the complete charts in person.
This is a shared conversation. Sign in to Orris to start your own chat.