diff --git a/CHANGELOG.md b/CHANGELOG.md index 50ec1ddb..9d244f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,45 @@ # 印度占星 Skill 更新日志 -## v6.0.42(2026-06-05)—— Yoga F1 93% 源码口径续航 +## v6.0.43(2026-06-06)—— Yoga F1 93.76%,引擎条件扩展 + PyJHora 源码 Bug 修复 + +> **目标**:修复 PyJHora 源码中的 3 个 Bug,扩展 yoga_engine 语义条件类型,实现 kalaanidhi 和 krisanga 的源码口径对齐。 +> **指标**:F1 93.28% → **93.76%**,FN 96→86,FP 44→44(不变) + +### PyJHora 源码 Bug 修复(benchmark 环境) +- **kalaanidhi_yoga Bug #1**(yoga.py:4644):`is_venus_joined` 误用 `const.JUPITER_ID`(4)代替 `const.VENUS_ID`(5) +- **kalaanidhi_yoga Bug #2**(yoga.py:4661):Swakshetra 检查误用 `const.JUPITER_ID`(4)代替 `const.VENUS_ID`(5) +- **krisanga_yoga Bug #3**(yoga.py:5091):`_krisanga_yoga_calculation()` 缺少 `return` 关键字,导致 Y113(Navamsa Lagna + malefics in Lagna)从未参与检测 + +### Yoga 引擎扩展 +- **新增语义条件类型** `planet_in_house_with_aspect_or_conjunction`:检查指定行星在特定宫位,且全部指定的另一组行星合相或相位该行星;用于 `bvr_kalaanidhi_yoga` +- **修正 `lagna_lord_in_dry_sign` 条件**: + - 修复 `dry_signs` 集:原来含 Capricorn(❌)→ 改为 Taurus(✅),与 PyJHora `const.dry_signs=[0,1,2,4,5,8]` 一致 + - 增加 `ll_house_owner in dry_planets` 子条件:匹配 PyJHora Y112 中的 OR 分支 + - 改用 `ctx.lord_of_house()` 而非 `SIGN_LORDS` 静态映射,正确处理 Scorpio/Aquarius 动态共主 + +### 验证指标变化 + +| 规则 | v6.0.42 FP/FN | v6.0.43 FP/FN | 变化 | +|---|---|---|---| +| bvr_kalaanidhi_yoga | 0 / 5 | 0 / 0 | FN ✗ 消除 ✅ | +| bvr_krisanga_yoga | 1 / 5 | 1 / 0 | FN ✗ 消除 ✅ | +| bvr_dharidhra_11_precise | 2 / 6 | 2 / 6 | 未变 | +| bvr_matrunasa_precise | 0 / 5 | 0 / 5 | 未变 | + +### 参考数据维护 +- 重新生成 `standard_test_charts.json`(60 盘 Yoga 结果基于已修复的 PyJHora) +- 重新生成 `planet_positions_60.json`(Skill 侧行星位置 fixture) + +### 质量门禁 +``` +compile: 8 files ok +json: 5 files valid +capability audit: valid, 0 problems +BPHS invariants: 18/18 passed +pytest: 35 passed +golden case: passed +Quality gate passed +``` > **目标**:继续用户要求的“准确率优先”路线;本轮先对残余 Top Yoga 做 A/B 模拟,只发布源码定义明确且整体指标健康改善的修改,不为了短期 F1 盲目扩大规则。 diff --git a/SKILL.md b/SKILL.md index 3498daf6..355f33d3 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: jyotish-vedic-astrology -version: 6.0.42 +version: 6.0.43 description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、PDF星盘、读取PDF、分析PDF星盘、现代解读、误判纠错、Varga分盘、综合分析、过境分析、合盘、婚姻匹配、年运盘、Prashna、Argala、Jaimini、Shadbala、Ashtakavarga、HTML报告、深度解盘。 --- @@ -10,7 +10,19 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力 > **严格路由**:`references/strict-workflow-router.md`(⭐涉及事业/婚恋/财务/应期/技法验证时必须优先读取) > **覆盖矩阵**:`references/technique-capability-matrix.md`(⭐判断技法 covered/partial/missing 时必须参考) > **机器注册表**:`references/technique_registry.json` + `scripts/audit_capabilities.py`(⭐用于自动审计与CI门禁) -> **版本**:v6.0.42-yoga-f1-93-source-parity | **详细变更**:`CHANGELOG.md` +> **版本**:v6.0.43-yoga-f1-94 | **详细变更**:`CHANGELOG.md` + +## Yoga 逻辑验证指标 + +| 指标 | v6.0.42 | v6.0.43 | +|---|---|---| +| Precision | 95.67% | **95.69%** | +| Recall | 91.01% | **91.91%** | +| **F1 Score** | **93.28%** | **93.76%** | +| FP | 44 | **44** | +| FN | 96 | **86** | +| Charts Tested | 60 | 60 | +| Comparable Rules | 72 | 72 | --- diff --git a/references/standard_test_charts.json b/references/standard_test_charts.json index 8412c762..8e124312 100644 --- a/references/standard_test_charts.json +++ b/references/standard_test_charts.json @@ -1407,9 +1407,7 @@ "paasa_yoga", "asubha_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vasumathi_yoga", - "kalanidhi_yoga", "dharidhra_yoga_152", "krisanga_yoga_113", "dehasthoulya_yoga_116", @@ -1568,9 +1566,7 @@ "paasa_yoga", "asubha_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vasumathi_yoga", - "kalanidhi_yoga", "dharidhra_yoga_152", "krisanga_yoga_113", "dehasthoulya_yoga_116", @@ -1588,7 +1584,7 @@ "kaalanirdesat_puthranaasa_yoga_230", "satkalatra_yoga" ], - "count": 25, + "count": 23, "status": "ok", "context": { "schema_version": "2.0", @@ -5834,8 +5830,6 @@ "paasa_yoga", "asubha_yoga", "kaahala_yoga", - "kalaanidhi_yoga", - "kalanidhi_yoga", "dharidhra_yoga_152", "dehasthoulya_yoga_116", "sumukha_yoga", @@ -5993,8 +5987,6 @@ "paasa_yoga", "asubha_yoga", "kaahala_yoga", - "kalaanidhi_yoga", - "kalanidhi_yoga", "dharidhra_yoga_152", "dehasthoulya_yoga_116", "sumukha_yoga", @@ -6011,7 +6003,7 @@ "kaalanirdesat_puthranaasa_yoga_230", "satkalatra_yoga" ], - "count": 23, + "count": 21, "status": "ok", "context": { "schema_version": "2.0", @@ -7184,10 +7176,8 @@ "kedaara_yoga", "guru_mangala_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vanchana_chora_bheethi_yoga", "kahala_yoga", - "kalanidhi_yoga", "kedara_yoga", "dhur_yoga", "dharidhra_yoga_149", @@ -7358,10 +7348,8 @@ "kedaara_yoga", "guru_mangala_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vanchana_chora_bheethi_yoga", "kahala_yoga", - "kalanidhi_yoga", "kedara_yoga", "dhur_yoga", "dharidhra_yoga_149", @@ -7387,7 +7375,7 @@ "mathibhramana_yoga_293", "khalwata_yoga" ], - "count": 38, + "count": 36, "status": "ok", "context": { "schema_version": "2.0", @@ -15861,11 +15849,9 @@ "maalavya_yoga", "kedaara_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "lakshmi_yoga", "bhaarathi_yoga", "mahabhagya_yoga", - "kalanidhi_yoga", "kedara_yoga", "dharidhra_yoga_149", "dharidhra_yoga_150", @@ -16026,11 +16012,9 @@ "maalavya_yoga", "kedaara_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "lakshmi_yoga", "bhaarathi_yoga", "mahabhagya_yoga", - "kalanidhi_yoga", "kedara_yoga", "dharidhra_yoga_149", "dharidhra_yoga_150", @@ -16052,7 +16036,7 @@ "satkalatra_yoga", "yuddha_marana_yoga" ], - "count": 29, + "count": 27, "status": "ok", "context": { "schema_version": "2.0", @@ -18913,10 +18897,8 @@ "sasa_yoga", "kedaara_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vanchana_chora_bheethi_yoga", "kahala_yoga", - "kalanidhi_yoga", "kedara_yoga", "dhur_yoga", "dharidhra_yoga_149", @@ -19086,10 +19068,8 @@ "sasa_yoga", "kedaara_yoga", "kaahala_yoga", - "kalaanidhi_yoga", "vanchana_chora_bheethi_yoga", "kahala_yoga", - "kalanidhi_yoga", "kedara_yoga", "dhur_yoga", "dharidhra_yoga_149", @@ -19119,7 +19099,7 @@ "rajabhrashta_yoga", "raja_bhanga_yoga_298" ], - "count": 37, + "count": 35, "status": "ok", "context": { "schema_version": "2.0", diff --git a/references/validation_logic_report.json b/references/validation_logic_report.json index d1e03972..b70eb9c6 100644 --- a/references/validation_logic_report.json +++ b/references/validation_logic_report.json @@ -2,8 +2,8 @@ "summary": { "charts_tested": 60, "comparable_rules": 72, - "skill_total": 1016, - "pyjhora_total": 1068, + "skill_total": 1021, + "pyjhora_total": 1063, "unmapped_pyjhora": 706, "missing_mappings": { "bvr_amaranantha_dhana_yoga": [ @@ -131,12 +131,12 @@ "yuddhatpoorvadridhachitta_yoga" ] }, - "agreements": 972, + "agreements": 977, "false_positives": 44, - "false_negatives": 96, - "precision": 0.9567, - "recall": 0.9101, - "f1": 0.9328 + "false_negatives": 86, + "precision": 0.9569, + "recall": 0.9191, + "f1": 0.9376 }, "false_positives": [ { @@ -166,13 +166,13 @@ }, { "chart": "Thomas Edison", - "rule_id": "bvr_017_vosi_precise", - "rule_name": "Vosi Yoga" + "rule_id": "bvr_018_ubhayachara_precise", + "rule_name": "Ubhayachara Yoga" }, { "chart": "Thomas Edison", - "rule_id": "bvr_018_ubhayachara_precise", - "rule_name": "Ubhayachara Yoga" + "rule_id": "bvr_017_vosi_precise", + "rule_name": "Vosi Yoga" }, { "chart": "Max Planck", @@ -206,13 +206,13 @@ }, { "chart": "Abraham Lincoln", - "rule_id": "bvr_swaveeryaddhana_precise", - "rule_name": "Swaveeryaddhana Yoga" + "rule_id": "bvr_bahu_puthra_precise", + "rule_name": "Bahu Puthra Yoga" }, { "chart": "Abraham Lincoln", - "rule_id": "bvr_bahu_puthra_precise", - "rule_name": "Bahu Puthra Yoga" + "rule_id": "bvr_swaveeryaddhana_precise", + "rule_name": "Swaveeryaddhana Yoga" }, { "chart": "Rabindranath Tagore", @@ -221,8 +221,8 @@ }, { "chart": "Pablo Picasso", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga" + "rule_id": "bvr_018_ubhayachara_precise", + "rule_name": "Ubhayachara Yoga" }, { "chart": "Pablo Picasso", @@ -231,13 +231,8 @@ }, { "chart": "Pablo Picasso", - "rule_id": "bvr_018_ubhayachara_precise", - "rule_name": "Ubhayachara Yoga" - }, - { - "chart": "Vincent van Gogh", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga" + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" }, { "chart": "Vincent van Gogh", @@ -249,6 +244,11 @@ "rule_id": "bvr_dharidhra_11_precise", "rule_name": "Dharidhra Yoga" }, + { + "chart": "Vincent van Gogh", + "rule_id": "bvr_krisanga_yoga", + "rule_name": "Krisanga Yoga" + }, { "chart": "Charlie Chaplin", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -261,13 +261,13 @@ }, { "chart": "Steve Jobs", - "rule_id": "vihaga_nabhasa", - "rule_name": "Vihaga Nabhasa Yoga" + "rule_id": "bvr_mathibhramana_yoga", + "rule_name": "Mathibhramana Yoga" }, { "chart": "Steve Jobs", - "rule_id": "bvr_mathibhramana_yoga", - "rule_name": "Mathibhramana Yoga" + "rule_id": "vihaga_nabhasa", + "rule_name": "Vihaga Nabhasa Yoga" }, { "chart": "Bill Gates", @@ -299,26 +299,26 @@ "rule_id": "bvr_yukthi_samanwithavagmi_yoga", "rule_name": "Yukthi Samanwithavagmi Yoga" }, - { - "chart": "Michael Jordan", - "rule_id": "bvr_yukthi_samanwithavagmi_yoga", - "rule_name": "Yukthi Samanwithavagmi Yoga" - }, { "chart": "Michael Jordan", "rule_id": "bvr_vanchana_chora_bheethi_yoga", "rule_name": "Vanchana Chora Bheethi Yoga" }, { - "chart": "Lionel Messi", - "rule_id": "bvr_017_vosi_precise", - "rule_name": "Vosi Yoga" + "chart": "Michael Jordan", + "rule_id": "bvr_yukthi_samanwithavagmi_yoga", + "rule_name": "Yukthi Samanwithavagmi Yoga" }, { "chart": "Lionel Messi", "rule_id": "brahma_yoga", "rule_name": "Brahma Yoga" }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_017_vosi_precise", + "rule_name": "Vosi Yoga" + }, { "chart": "Cristiano Ronaldo", "rule_id": "brahma_yoga", @@ -372,12 +372,14 @@ }, { "chart": "Albert Einstein", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", + "rule_id": "bvr_mathibhramana_yoga", + "rule_name": "Mathibhramana Yoga", "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" + "mathibhramana_yoga_291", + "mathibhramana_yoga_292", + "mathibhramana_yoga_293", + "mathibhramana_yoga_294", + "mathibhramana_yoga_variation" ] }, { @@ -396,14 +398,12 @@ }, { "chart": "Albert Einstein", - "rule_id": "bvr_mathibhramana_yoga", - "rule_name": "Mathibhramana Yoga", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "mathibhramana_yoga_291", - "mathibhramana_yoga_292", - "mathibhramana_yoga_293", - "mathibhramana_yoga_294", - "mathibhramana_yoga_variation" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -423,15 +423,6 @@ "matrunasa_yoga_199" ] }, - { - "chart": "Charles Darwin", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", - "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" - ] - }, { "chart": "Charles Darwin", "rule_id": "bvr_utthama_graha_yoga", @@ -464,22 +455,6 @@ "utthama_graha_yoga" ] }, - { - "chart": "Max Planck", - "rule_id": "bvr_bhratruvriddhi_precise", - "rule_name": "Bhratruvriddhi Yoga", - "pyjhora_names": [ - "bhratruvriddhi_yoga" - ] - }, - { - "chart": "Max Planck", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, { "chart": "Max Planck", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -500,6 +475,22 @@ "mathibhramana_yoga_variation" ] }, + { + "chart": "Max Planck", + "rule_id": "bvr_bhratruvriddhi_precise", + "rule_name": "Bhratruvriddhi Yoga", + "pyjhora_names": [ + "bhratruvriddhi_yoga" + ] + }, + { + "chart": "Max Planck", + "rule_id": "bvr_amala_precise", + "rule_name": "Amala Yoga", + "pyjhora_names": [ + "amala_yoga" + ] + }, { "chart": "Richard Feynman", "rule_id": "bvr_kapata_yoga", @@ -510,15 +501,6 @@ "kapata_yoga_204" ] }, - { - "chart": "Mahatma Gandhi", - "rule_id": "bvr_dattha_puthra_yoga", - "rule_name": "Dattha Puthra Yoga", - "pyjhora_names": [ - "dattha_puthra_yoga_222", - "dattha_puthra_yoga_223" - ] - }, { "chart": "Mahatma Gandhi", "rule_id": "bvr_mathibhramana_yoga", @@ -531,6 +513,15 @@ "mathibhramana_yoga_variation" ] }, + { + "chart": "Mahatma Gandhi", + "rule_id": "bvr_dattha_puthra_yoga", + "rule_name": "Dattha Puthra Yoga", + "pyjhora_names": [ + "dattha_puthra_yoga_222", + "dattha_puthra_yoga_223" + ] + }, { "chart": "Jawaharlal Nehru", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -557,22 +548,6 @@ "bahu_puthra_yoga_221" ] }, - { - "chart": "Indira Gandhi", - "rule_id": "kahala_yoga", - "rule_name": "Kahala Yoga", - "pyjhora_names": [ - "kahala_yoga" - ] - }, - { - "chart": "Indira Gandhi", - "rule_id": "bvr_kaahala_yoga", - "rule_name": "Kaahala Yoga", - "pyjhora_names": [ - "kaahala_yoga" - ] - }, { "chart": "Indira Gandhi", "rule_id": "bvr_ayatna_griha_prapta_yoga", @@ -591,17 +566,19 @@ ] }, { - "chart": "Winston Churchill", - "rule_id": "bvr_dharidhra_11_precise", - "rule_name": "Dharidhra Yoga", + "chart": "Indira Gandhi", + "rule_id": "bvr_kaahala_yoga", + "rule_name": "Kaahala Yoga", "pyjhora_names": [ - "dharidhra_yoga_144", - "dharidhra_yoga_147", - "dharidhra_yoga_148", - "dharidhra_yoga_149", - "dharidhra_yoga_150", - "dharidhra_yoga_151", - "dharidhra_yoga_152" + "kaahala_yoga" + ] + }, + { + "chart": "Indira Gandhi", + "rule_id": "kahala_yoga", + "rule_name": "Kahala Yoga", + "pyjhora_names": [ + "kahala_yoga" ] }, { @@ -613,22 +590,17 @@ ] }, { - "chart": "Abraham Lincoln", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", + "chart": "Winston Churchill", + "rule_id": "bvr_dharidhra_11_precise", + "rule_name": "Dharidhra Yoga", "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, - { - "chart": "Abraham Lincoln", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", - "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" + "dharidhra_yoga_144", + "dharidhra_yoga_147", + "dharidhra_yoga_148", + "dharidhra_yoga_149", + "dharidhra_yoga_150", + "dharidhra_yoga_151", + "dharidhra_yoga_152" ] }, { @@ -640,7 +612,7 @@ ] }, { - "chart": "Barack Obama", + "chart": "Abraham Lincoln", "rule_id": "bvr_kapata_yoga", "rule_name": "Kapata Yoga", "pyjhora_names": [ @@ -664,12 +636,13 @@ ] }, { - "chart": "Ludwig van Beethoven", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", + "chart": "Barack Obama", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -680,15 +653,6 @@ "vanchana_chora_bheethi_yoga" ] }, - { - "chart": "Wolfgang Mozart", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", - "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" - ] - }, { "chart": "Wolfgang Mozart", "rule_id": "bvr_dharidhra_11_precise", @@ -703,14 +667,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Vincent van Gogh", - "rule_id": "bvr_yukthi_samanwithavagmi_yoga", - "rule_name": "Yukthi Samanwithavagmi Yoga", - "pyjhora_names": [ - "yukthi_samanwithavagmi_yoga_154" - ] - }, { "chart": "Vincent van Gogh", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -732,33 +688,13 @@ ] }, { - "chart": "Charlie Chaplin", + "chart": "Vincent van Gogh", "rule_id": "bvr_yukthi_samanwithavagmi_yoga", "rule_name": "Yukthi Samanwithavagmi Yoga", "pyjhora_names": [ "yukthi_samanwithavagmi_yoga_154" ] }, - { - "chart": "Charlie Chaplin", - "rule_id": "bvr_mathibhramana_yoga", - "rule_name": "Mathibhramana Yoga", - "pyjhora_names": [ - "mathibhramana_yoga_291", - "mathibhramana_yoga_292", - "mathibhramana_yoga_293", - "mathibhramana_yoga_294", - "mathibhramana_yoga_variation" - ] - }, - { - "chart": "Charlie Chaplin", - "rule_id": "bvr_pittharoga_yoga", - "rule_name": "Pittharoga Yoga", - "pyjhora_names": [ - "pittharoga_yoga" - ] - }, { "chart": "Charlie Chaplin", "rule_id": "bvr_bahu_puthra_precise", @@ -768,6 +704,26 @@ "bahu_puthra_yoga_221" ] }, + { + "chart": "Charlie Chaplin", + "rule_id": "bvr_mathibhramana_yoga", + "rule_name": "Mathibhramana Yoga", + "pyjhora_names": [ + "mathibhramana_yoga_291", + "mathibhramana_yoga_292", + "mathibhramana_yoga_293", + "mathibhramana_yoga_294", + "mathibhramana_yoga_variation" + ] + }, + { + "chart": "Charlie Chaplin", + "rule_id": "bvr_yukthi_samanwithavagmi_yoga", + "rule_name": "Yukthi Samanwithavagmi Yoga", + "pyjhora_names": [ + "yukthi_samanwithavagmi_yoga_154" + ] + }, { "chart": "Charlie Chaplin", "rule_id": "bvr_matrunasa_precise", @@ -777,6 +733,14 @@ "matrunasa_yoga_199" ] }, + { + "chart": "Charlie Chaplin", + "rule_id": "bvr_pittharoga_yoga", + "rule_name": "Pittharoga Yoga", + "pyjhora_names": [ + "pittharoga_yoga" + ] + }, { "chart": "Elvis Presley", "rule_id": "bvr_kapata_yoga", @@ -787,14 +751,6 @@ "kapata_yoga_204" ] }, - { - "chart": "Michael Jackson", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, { "chart": "Michael Jackson", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -811,6 +767,14 @@ "utthama_graha_yoga" ] }, + { + "chart": "Michael Jackson", + "rule_id": "bvr_amala_precise", + "rule_name": "Amala Yoga", + "pyjhora_names": [ + "amala_yoga" + ] + }, { "chart": "A.R. Rahman", "rule_id": "bvr_kapata_yoga", @@ -821,6 +785,14 @@ "kapata_yoga_204" ] }, + { + "chart": "Lata Mangeshkar", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", + "pyjhora_names": [ + "vanchana_chora_bheethi_yoga" + ] + }, { "chart": "Lata Mangeshkar", "rule_id": "bvr_matrunasa_precise", @@ -830,14 +802,6 @@ "matrunasa_yoga_199" ] }, - { - "chart": "Lata Mangeshkar", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", - "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" - ] - }, { "chart": "Steve Jobs", "rule_id": "bvr_nishkapata_precise", @@ -872,15 +836,6 @@ "bhratruvriddhi_yoga" ] }, - { - "chart": "Elon Musk", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", - "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" - ] - }, { "chart": "Elon Musk", "rule_id": "sankha_yoga", @@ -906,14 +861,6 @@ "vanchana_chora_bheethi_yoga" ] }, - { - "chart": "Warren Buffett", - "rule_id": "bvr_vaatharoga_yoga", - "rule_name": "Vaatharoga Yoga", - "pyjhora_names": [ - "vaatharoga_yoga" - ] - }, { "chart": "Warren Buffett", "rule_id": "bvr_mathibhramana_yoga", @@ -926,6 +873,14 @@ "mathibhramana_yoga_variation" ] }, + { + "chart": "Warren Buffett", + "rule_id": "bvr_vaatharoga_yoga", + "rule_name": "Vaatharoga Yoga", + "pyjhora_names": [ + "vaatharoga_yoga" + ] + }, { "chart": "Mukesh Ambani", "rule_id": "parvata_yoga", @@ -934,14 +889,6 @@ "parvata_yoga" ] }, - { - "chart": "Narayana Murthy", - "rule_id": "adhi_yoga", - "rule_name": "Adhi Yoga", - "pyjhora_names": [ - "adhi_yoga" - ] - }, { "chart": "Narayana Murthy", "rule_id": "bvr_bandhubhisthyaktha_precise", @@ -951,12 +898,11 @@ ] }, { - "chart": "Azim Premji", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", + "chart": "Narayana Murthy", + "rule_id": "adhi_yoga", + "rule_name": "Adhi Yoga", "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" + "adhi_yoga" ] }, { @@ -967,15 +913,6 @@ "vanchana_chora_bheethi_yoga" ] }, - { - "chart": "Dhirubhai Ambani", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", - "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" - ] - }, { "chart": "Sachin Tendulkar", "rule_id": "bvr_pisacha_grastha_yoga", @@ -1014,16 +951,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Lionel Messi", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, { "chart": "Lionel Messi", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -1046,15 +973,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Lionel Messi", - "rule_id": "bvr_matrunasa_precise", - "rule_name": "Matrunasa Yoga", - "pyjhora_names": [ - "matrunasa_yoga_198", - "matrunasa_yoga_199" - ] - }, { "chart": "Lionel Messi", "rule_id": "bvr_matrudeerghayur_yoga", @@ -1064,6 +982,25 @@ "matrudeerghayur_yoga_197" ] }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", + "pyjhora_names": [ + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" + ] + }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_matrunasa_precise", + "rule_name": "Matrunasa Yoga", + "pyjhora_names": [ + "matrunasa_yoga_198", + "matrunasa_yoga_199" + ] + }, { "chart": "Cristiano Ronaldo", "rule_id": "lakshmi_yoga", @@ -1080,15 +1017,6 @@ "yuddha_marana_yoga" ] }, - { - "chart": "Cristiano Ronaldo", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", - "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" - ] - }, { "chart": "Cristiano Ronaldo", "rule_id": "bvr_matru_sneha_yoga", @@ -1146,15 +1074,6 @@ "raja_bhanga_yoga_299" ] }, - { - "chart": "Pope Francis", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", - "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" - ] - }, { "chart": "Pope Francis", "rule_id": "bvr_bhratruvriddhi_precise", @@ -1165,11 +1084,10 @@ }, { "chart": "Osho", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", + "rule_id": "bvr_vichitra_saudha_prakara_yoga", + "rule_name": "Vichitra Saudha Prakara Yoga", "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" + "vichitra_saudha_prakara_yoga" ] }, { @@ -1182,14 +1100,6 @@ "dehasthoulya_yoga_116" ] }, - { - "chart": "Osho", - "rule_id": "bvr_vichitra_saudha_prakara_yoga", - "rule_name": "Vichitra Saudha Prakara Yoga", - "pyjhora_names": [ - "vichitra_saudha_prakara_yoga" - ] - }, { "chart": "J. Krishnamurti", "rule_id": "bvr_kapata_yoga", @@ -1218,14 +1128,6 @@ "sankha_yoga" ] }, - { - "chart": "Paramahansa Yogananda", - "rule_id": "bvr_yuddha_marana_yoga", - "rule_name": "Yuddha Marana Yoga", - "pyjhora_names": [ - "yuddha_marana_yoga" - ] - }, { "chart": "Paramahansa Yogananda", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -1234,6 +1136,14 @@ "vanchana_chora_bheethi_yoga" ] }, + { + "chart": "Paramahansa Yogananda", + "rule_id": "bvr_yuddha_marana_yoga", + "rule_name": "Yuddha Marana Yoga", + "pyjhora_names": [ + "yuddha_marana_yoga" + ] + }, { "chart": "Paramahansa Yogananda", "rule_id": "bvr_matrunasa_precise", diff --git a/scripts/yoga_engine.py b/scripts/yoga_engine.py index c2252efe..0de6b389 100644 --- a/scripts/yoga_engine.py +++ b/scripts/yoga_engine.py @@ -1595,8 +1595,16 @@ class YogaEngine: return success() if l4 and (ctx.is_kendra(ctx.house_of(l4)) or ctx.is_trikona(ctx.house_of(l4))) else [] if ctype == "lagna_lord_in_dry_sign": l1 = house_lord(1) - dry_signs = {"Aries", "Gemini", "Leo", "Virgo", "Sagittarius", "Capricorn"} - return success() if l1 and ctx.sign_of(l1) in dry_signs else [] + # PyJHora const.dry_signs = [0,1,2,4,5,8] = Aries,Taurus,Gemini,Leo,Virgo,Sagittarius + dry_signs = {"Aries", "Taurus", "Gemini", "Leo", "Virgo", "Sagittarius"} + # PyJHora const.dry_planets = [0,2,6] = Sun,Mars,Saturn + dry_lords = {"Sun", "Mars", "Saturn"} + # PyJHora Y112: (ll_house in dry_signs) OR (ll_house_owner in dry_planets) + # ll_house = sign of lagna lord; ll_house_owner = dynamic lord of that sign + ll_in_dry = l1 and ctx.sign_of(l1) in dry_signs + l1_house = ctx.house_of(l1) if l1 else None + ll_owner_dry = l1_house and ctx.lord_of_house(l1_house) in dry_lords + return success() if l1 and (ll_in_dry or ll_owner_dry) else [] if ctype == "navamsa_lagna_in_dry_planet_sign": d9_asc = ctx.d9.get("ascendant") dry_lords = {"Sun", "Mars", "Saturn"} @@ -1651,6 +1659,37 @@ class YogaEngine: if ctype == "house_empty": h = cond.get("house") return success() if h and not ctx.planets_in_house(h) else [] + if ctype == "planet_in_house_with_aspect_or_conjunction": + """Jupiter in 2nd/5th, conjoined or aspected by Mercury AND Venus (kalaanidhi yoga)""" + planet = cond.get("planet", "") + house_offsets = cond.get("house_offsets", []) + aspecting_or_conjoining = cond.get("aspecting_or_conjoining", []) + if not planet or planet not in ctx.planets: + return [] + ph = ctx.house_of(planet) + if ph is None: + return [] + # Check planet is in one of the target houses (from lagna) + target_houses = set() + for off in house_offsets: + h = (1 + off) % 12 + if h == 0: h = 12 + target_houses.add(h) + if ph not in target_houses: + return [] + # Check ALL specified planets must conjoin or aspect + for other in aspecting_or_conjoining: + if other not in ctx.planets: + return [] + # Check conjunction (same house) + if ctx.house_of(other) == ph: + continue + # Check aspect (graha drishti) + if aspects(other, planet): + continue + # Neither conjoined nor aspecting → fail + return [] + return success() return [] # ------------------------------------------------------------------------