fffdbda22c
- Fix kaalanirdesat_puthra_yoga (36→0 FPs): PyJHora 227/228 logic - Fix sapthasankhya_sahodara_yoga (27→0 FPs): PyJHora L12+Mars+Moon+Jupiter+no Venus - Fix sarpasaapa_yoga (25→0 FPs): PyJHora 212-215 variants - Fix pushkala_yoga (9→0 FPs): PyJHora BVR-26 L1+Moon+dispositor - Fix koorma_yoga (9→0 FPs): PyJHora BVR-54 method1 - Fix bhratrumooladdhanaprapti_yoga (9→0 FPs): PyJHora BVR-136 - Update hardcoded tests to match correct PyJHora logic
118 lines
6.6 KiB
Python
118 lines
6.6 KiB
Python
"""
|
|
PyJHora 风格硬编码 Yoga True/False 测试
|
|
"""
|
|
import sys, os
|
|
SKILL_DIR = '/Users/wuyongnaren/.workbuddy/skills/jyotish-vedic-astrology'
|
|
sys.path.insert(0, os.path.join(SKILL_DIR, 'scripts'))
|
|
RULES_PATH = os.path.join(SKILL_DIR, 'references', 'yoga_rules.json')
|
|
from yoga_engine import YogaEngine
|
|
engine = YogaEngine(RULES_PATH)
|
|
|
|
def detect(rule_id, planets, ascendant, context=None):
|
|
results = engine.detect(planets, ascendant, context=context)
|
|
return any(r.get('rule_id') == rule_id for r in results)
|
|
|
|
def check(name, rule_id, planets, asc, expected):
|
|
result = detect(rule_id, planets, asc)
|
|
ok = result == expected
|
|
tag = 'PASS' if ok else 'FAIL'
|
|
print(f' [{tag}] {name}: expect={expected} got={result}')
|
|
return ok
|
|
|
|
results = []
|
|
|
|
print('=' * 55)
|
|
print('Hardcoded Yoga Tests (PyJHora style)')
|
|
print('=' * 55)
|
|
|
|
# -------------------------------------------------------
|
|
# pushkala_yoga (BVR-26): L1 with Moon; Moon's dispositor in kendra/Adhimitra + rasi-aspects Lagna
|
|
# -------------------------------------------------------
|
|
print('\n--- pushkala_yoga ---')
|
|
# Leo asc, Sun(L1) in 5th/Gemini with Moon, dispositor=Mercury in 10th/Capricorn(kendra, rasi-aspects Leo)
|
|
results.append(check('True-l1-with-moon-disp-kendra', 'pushkala_yoga', {
|
|
'Sun':{'house':5,'sign':'Gemini','degree':10},'Moon':{'house':5,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':8,'sign':'Pisces','degree':10},'Mercury':{'house':10,'sign':'Capricorn','degree':10},
|
|
'Jupiter':{'house':11,'sign':'Sagittarius','degree':5},'Venus':{'house':2,'sign':'Libra','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':6,'sign':'Capricorn','degree':10},
|
|
'Ketu':{'house':12,'sign':'Cancer','degree':10},
|
|
}, 'Leo', True))
|
|
|
|
results.append(check('False-l1-not-with-moon', 'pushkala_yoga', {
|
|
'Sun':{'house':9,'sign':'Aries','degree':10},'Moon':{'house':5,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':8,'sign':'Pisces','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':1,'sign':'Sagittarius','degree':5},'Venus':{'house':11,'sign':'Gemini','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':6,'sign':'Capricorn','degree':10},
|
|
'Ketu':{'house':12,'sign':'Cancer','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
results.append(check('False-disp-not-kendra', 'pushkala_yoga', {
|
|
'Sun':{'house':5,'sign':'Gemini','degree':10},'Moon':{'house':5,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':4,'sign':'Scorpio','degree':10},'Mercury':{'house':12,'sign':'Pisces','degree':10},
|
|
'Jupiter':{'house':1,'sign':'Sagittarius','degree':5},'Venus':{'house':2,'sign':'Virgo','degree':10},
|
|
'Saturn':{'house':6,'sign':'Capricorn','degree':10},'Rahu':{'house':3,'sign':'Libra','degree':10},
|
|
'Ketu':{'house':9,'sign':'Aries','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
# -------------------------------------------------------
|
|
# koorma_yoga (BVR-54 Method 1): 5/6/7 all strong benefics OR 1/3/11 all strong benefics
|
|
# -------------------------------------------------------
|
|
print('\n--- koorma_yoga ---')
|
|
# 1/3/11 all occupied by strong benefics: Jupiter(1/Leo), Venus(3/Libra), Moon(11/Gemini)
|
|
results.append(check('True-benefics-in-1-3-11', 'koorma_yoga', {
|
|
'Sun':{'house':12,'sign':'Taurus','degree':10},'Moon':{'house':11,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':8,'sign':'Pisces','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':1,'sign':'Leo','degree':5},'Venus':{'house':3,'sign':'Libra','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':6,'sign':'Capricorn','degree':10},
|
|
'Ketu':{'house':12,'sign':'Cancer','degree':10},
|
|
}, 'Leo', True))
|
|
|
|
results.append(check('False-malefic-in-target-houses', 'koorma_yoga', {
|
|
'Sun':{'house':1,'sign':'Leo','degree':10},'Moon':{'house':5,'sign':'Sagittarius','degree':15},
|
|
'Mars':{'house':10,'sign':'Taurus','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':9,'sign':'Aries','degree':5},'Venus':{'house':11,'sign':'Gemini','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':4,'sign':'Scorpio','degree':10},
|
|
'Ketu':{'house':10,'sign':'Taurus','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
results.append(check('False-empty-target-house', 'koorma_yoga', {
|
|
'Sun':{'house':9,'sign':'Aries','degree':10},'Moon':{'house':5,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':8,'sign':'Pisces','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':12,'sign':'Sagittarius','degree':5},'Venus':{'house':3,'sign':'Libra','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':6,'sign':'Capricorn','degree':10},
|
|
'Ketu':{'house':12,'sign':'Cancer','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
results.append(check('False-weak-benefic-in-house', 'koorma_yoga', {
|
|
'Sun':{'house':12,'sign':'Taurus','degree':10},'Moon':{'house':11,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':8,'sign':'Pisces','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':1,'sign':'Capricorn','degree':5},'Venus':{'house':3,'sign':'Libra','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':6,'sign':'Capricorn','degree':10},
|
|
'Ketu':{'house':12,'sign':'Cancer','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
# -------------------------------------------------------
|
|
# bvr_dharidhra_11_precise: method1
|
|
# -------------------------------------------------------
|
|
print('\n--- bvr_dharidhra_11_precise ---')
|
|
results.append(check('True-l2-l11-in-dusthana', 'bvr_dharidhra_11_precise', {
|
|
'Sun':{'house':9,'sign':'Aries','degree':10},'Moon':{'house':5,'sign':'Gemini','degree':15},
|
|
'Mars':{'house':4,'sign':'Scorpio','degree':10},'Mercury':{'house':8,'sign':'Pisces','degree':10},
|
|
'Jupiter':{'house':1,'sign':'Leo','degree':5},'Venus':{'house':11,'sign':'Gemini','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':2,'sign':'Virgo','degree':10},
|
|
'Ketu':{'house':8,'sign':'Pisces','degree':10},
|
|
}, 'Leo', True))
|
|
|
|
results.append(check('False-l2-l11-not-dusthana', 'bvr_dharidhra_11_precise', {
|
|
'Sun':{'house':1,'sign':'Leo','degree':10},'Moon':{'house':5,'sign':'Sagittarius','degree':15},
|
|
'Mars':{'house':10,'sign':'Taurus','degree':10},'Mercury':{'house':2,'sign':'Virgo','degree':10},
|
|
'Jupiter':{'house':9,'sign':'Aries','degree':5},'Venus':{'house':11,'sign':'Gemini','degree':10},
|
|
'Saturn':{'house':7,'sign':'Aquarius','degree':10},'Rahu':{'house':3,'sign':'Libra','degree':10},
|
|
'Ketu':{'house':9,'sign':'Aries','degree':10},
|
|
}, 'Leo', False))
|
|
|
|
# Summary
|
|
ok = sum(1 for r in results if r)
|
|
total = len(results)
|
|
print(f'\nResults: {ok}/{total} passed ({total-ok} failed)')
|