From ede8b96d2c11154bd37826fe4fb2863713475da1 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Fri, 5 Jun 2026 22:37:25 +0800 Subject: [PATCH] Release v6.0.40 Yoga source parity --- CHANGELOG.md | 45 ++ SKILL.md | 8 +- references/validation_logic_report.json | 775 ++++++++---------------- references/yoga_rules.json | 38 +- scripts/yoga_engine.py | 12 + 5 files changed, 331 insertions(+), 547 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67a6a2d3..7dc8e5d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,50 @@ # 印度占星 Skill 更新日志 +## v6.0.40(2026-06-05)—— Yoga F1 91% 源码口径续航 + +> **目标**:在 v6.0.39 首次突破 F1 90% 后继续推进,但仍保持“准确率优先、源码确认后再改”的路线;优先处理 Top residual 中 PyJHora 源码口径明确、收益高且过拟合风险低的规则。 + +### 引擎与 helper 修复 + +- `scripts/yoga_engine.py` 新增 `pyjhora_natural_benefics()`,复刻 PyJHora `yoga._get_natural_benefics()`: + - natural benefics 默认只含 `Jupiter`、`Venus`; + - `Mercury` 只有在独处,或与 `Jupiter` / `Venus` 同宫时才作为 benefic; + - 不再把 Moon 无条件纳入这组 PyJHora Yoga helper。 + +### 高影响规则对齐 + +- `bvr_amala_precise`:对齐 PyJHora/BVR-13 的实际实现,从“第10宫只有吉星”改为“任一 PyJHora natural benefic 落 Lagna 或 Moon 起算第10宫”。 +- `bvr_kaalanirdesat_puthranaasa_yoga`:Variant 230 改用 `pyjhora_planets_aspecting_raasi()`,对齐 PyJHora `house.planets_aspecting_the_raasi()` 行为,替代常规 `rasi_aspects_house()` 语义。 +- `bvr_bhaga_chumbana_yoga`:从旧 compound 占位条件改为 custom 源码口径: + - 7宫主在4宫且 Venus 在4宫;或 + - Lagna lord 在 D1 或 Navamsa 落陷。 + +### 验证结果 + +- `scripts/validate_logic_v2.py`: + - Precision **94.63%**(v6.0.39 为 93.82%) + - Recall **89.04%**(v6.0.39 为 86.70%) + - F1 **91.75%**(v6.0.39 为 90.12%) + - FP:54;FN:117 +- `scripts/run_quality_gate.py --skip-yoga-logic`:通过。 + - pytest **35 passed** + - BPHS/Ashtakavarga 不变量 **18/18** + - golden case 通过 + - capability audit valid,0 problem / 0 warning + +### 规则库状态 + +- JSON 规则总数:**475** +- 启用规则:**381** +- 当前验证报告:`references/validation_logic_report.json` + +### 后续优化点 + +- 下一轮 Top residual 仍以源码确认优先:`bvr_vanchana_chora_bheethi_yoga`、`bvr_kapata_yoga`、`bvr_mathibhramana_yoga`、`bvr_sumukha_precise`、`bvr_dama_yoga`、`bvr_matru_sneha_yoga`、`bvr_ayatna_griha_prapta_yoga`。 +- `bvr_vanchana_chora_bheethi_yoga` 的剩余差异很可能与 Gulika/Maandi house-index、PyJHora `benefics_and_malefics()` 动态凶吉口径有关;下一轮应先复现 PyJHora 输入层再改规则。 + +--- + ## v6.0.39(2026-06-05)—— Yoga F1 90% 源码口径冲刺 > **目标**:继续用户要求的“准确率优先”路线,不为指标盲目调参;只在确认 PyJHora 源码口径后修改规则或 helper,使 D1/Rasi Yoga 逻辑验证首次突破 F1 90%。 diff --git a/SKILL.md b/SKILL.md index bf91f7f7..21d661b7 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: jyotish-vedic-astrology -version: 6.0.39 +version: 6.0.40 description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、PDF星盘、读取PDF、分析PDF星盘、现代解读、误判纠错、Varga分盘、综合分析、过境分析、合盘、婚姻匹配、年运盘、Prashna、Argala、Jaimini、Shadbala、Ashtakavarga、HTML报告、深度解盘。 --- @@ -10,7 +10,7 @@ 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.39-yoga-f1-90-source-parity | **详细变更**:`CHANGELOG.md` +> **版本**:v6.0.40-yoga-f1-91-source-parity | **详细变更**:`CHANGELOG.md` --- @@ -301,9 +301,9 @@ $PYTHON $SCRIPT <子命令> [参数] --- -**版本**:v6.0.39-yoga-f1-90-source-parity +**版本**:v6.0.40-yoga-f1-91-source-parity **创建日期**:2026-04-20 -**最后更新**:2026-06-05(v6.0.39 继续对齐 PyJHora Yoga 源码口径,实现 Scorpio/Aquarius 动态 co-lord resolver,修复 `bheri_yoga`、`bvr_sada_sanchara_precise`、`bvr_bandhu_pujya_yoga` 等高影响规则;当前 475 条 JSON 规则、381 条启用规则,D1/Rasi 逻辑验证 Precision=93.82%、Recall=86.70%、F1=90.12%,质量门禁通过,报告以 `references/validation_logic_report.json` 为准) +**最后更新**:2026-06-05(v6.0.40 继续坚持 PyJHora 源码口径优先,修复 `bvr_amala_precise`、`bvr_kaalanirdesat_puthranaasa_yoga`、`bvr_bhaga_chumbana_yoga` 并新增 `pyjhora_natural_benefics()` helper;当前 475 条 JSON 规则、381 条启用规则,D1/Rasi 逻辑验证 Precision=94.63%、Recall=89.04%、F1=91.75%,质量门禁通过,报告以 `references/validation_logic_report.json` 为准) --- diff --git a/references/validation_logic_report.json b/references/validation_logic_report.json index 552f0224..c66b486c 100644 --- a/references/validation_logic_report.json +++ b/references/validation_logic_report.json @@ -2,7 +2,7 @@ "summary": { "charts_tested": 60, "comparable_rules": 72, - "skill_total": 987, + "skill_total": 1005, "pyjhora_total": 1068, "unmapped_pyjhora": 706, "missing_mappings": { @@ -131,18 +131,18 @@ "yuddhatpoorvadridhachitta_yoga" ] }, - "agreements": 926, - "false_positives": 61, - "false_negatives": 142, - "precision": 0.9382, - "recall": 0.867, - "f1": 0.9012 + "agreements": 951, + "false_positives": 54, + "false_negatives": 117, + "precision": 0.9463, + "recall": 0.8904, + "f1": 0.9175 }, "false_positives": [ { "chart": "Albert Einstein", - "rule_id": "vihaga_nabhasa", - "rule_name": "Vihaga Nabhasa Yoga" + "rule_id": "bvr_dehasthoulya_yoga", + "rule_name": "Dehasthoulya Yoga" }, { "chart": "Albert Einstein", @@ -156,8 +156,8 @@ }, { "chart": "Albert Einstein", - "rule_id": "bvr_dehasthoulya_yoga", - "rule_name": "Dehasthoulya Yoga" + "rule_id": "vihaga_nabhasa", + "rule_name": "Vihaga Nabhasa Yoga" }, { "chart": "Marie Curie", @@ -169,15 +169,10 @@ "rule_id": "sankha_yoga", "rule_name": "Sankha Yoga" }, - { - "chart": "Stephen Hawking", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "Thomas Edison", - "rule_id": "bvr_bhratruvriddhi_precise", - "rule_name": "Bhratruvriddhi Yoga" + "rule_id": "bvr_017_vosi_precise", + "rule_name": "Vosi Yoga" }, { "chart": "Thomas Edison", @@ -186,19 +181,14 @@ }, { "chart": "Thomas Edison", - "rule_id": "bvr_017_vosi_precise", - "rule_name": "Vosi Yoga" + "rule_id": "bvr_bhratruvriddhi_precise", + "rule_name": "Bhratruvriddhi Yoga" }, { "chart": "Max Planck", "rule_id": "bvr_bandhubhisthyaktha_precise", "rule_name": "Bandhubhisthyaktha Yoga" }, - { - "chart": "Max Planck", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "Niels Bohr", "rule_id": "vihaga_nabhasa", @@ -224,21 +214,11 @@ "rule_id": "pushkala_yoga", "rule_name": "Pushkala Yoga" }, - { - "chart": "Winston Churchill", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "John F. Kennedy", "rule_id": "brahma_yoga", "rule_name": "Brahma Yoga" }, - { - "chart": "John F. Kennedy", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "Abraham Lincoln", "rule_id": "bvr_bahu_puthra_precise", @@ -269,6 +249,11 @@ "rule_id": "bvr_018_ubhayachara_precise", "rule_name": "Ubhayachara Yoga" }, + { + "chart": "Pablo Picasso", + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" + }, { "chart": "Pablo Picasso", "rule_id": "bvr_kapata_yoga", @@ -276,8 +261,8 @@ }, { "chart": "Vincent van Gogh", - "rule_id": "bvr_dharidhra_11_precise", - "rule_name": "Dharidhra Yoga" + "rule_id": "bvr_krisanga_yoga", + "rule_name": "Krisanga Yoga" }, { "chart": "Vincent van Gogh", @@ -286,24 +271,14 @@ }, { "chart": "Vincent van Gogh", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga" + "rule_id": "bvr_dharidhra_11_precise", + "rule_name": "Dharidhra Yoga" }, { "chart": "Charlie Chaplin", "rule_id": "bvr_vanchana_chora_bheethi_yoga", "rule_name": "Vanchana Chora Bheethi Yoga" }, - { - "chart": "Charlie Chaplin", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, - { - "chart": "Michael Jackson", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "A.R. Rahman", "rule_id": "bvr_bandhubhisthyaktha_precise", @@ -324,11 +299,6 @@ "rule_id": "adhi_yoga", "rule_name": "Adhi Yoga" }, - { - "chart": "Elon Musk", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "Mukesh Ambani", "rule_id": "bvr_bahu_puthra_precise", @@ -340,9 +310,9 @@ "rule_name": "Yukthi Samanwithavagmi Yoga" }, { - "chart": "Ratan Tata", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" + "chart": "Narayana Murthy", + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" }, { "chart": "Narayana Murthy", @@ -350,9 +320,9 @@ "rule_name": "Bhratruvriddhi Yoga" }, { - "chart": "Narayana Murthy", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" + "chart": "Sachin Tendulkar", + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" }, { "chart": "Virat Kohli", @@ -399,11 +369,6 @@ "rule_id": "bvr_kapata_yoga", "rule_name": "Kapata Yoga" }, - { - "chart": "Pele", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" - }, { "chart": "Roger Federer", "rule_id": "bvr_bhratruvriddhi_precise", @@ -420,9 +385,9 @@ "rule_name": "Dharidhra Yoga" }, { - "chart": "Swami Vivekananda", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga" + "chart": "Queen Elizabeth II", + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" }, { "chart": "Princess Diana", @@ -448,16 +413,21 @@ "false_negatives": [ { "chart": "Albert Einstein", - "rule_id": "bvr_dharidhra_11_precise", - "rule_name": "Dharidhra Yoga", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "dharidhra_yoga_144", - "dharidhra_yoga_147", - "dharidhra_yoga_148", - "dharidhra_yoga_149", - "dharidhra_yoga_150", - "dharidhra_yoga_151", - "dharidhra_yoga_152" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" + ] + }, + { + "chart": "Albert Einstein", + "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", + "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "pyjhora_names": [ + "kaalanirdesat_puthranaasa_yoga_230", + "kaalanirdesat_puthranaasa_yoga_229" ] }, { @@ -474,28 +444,16 @@ }, { "chart": "Albert Einstein", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", + "rule_id": "bvr_dharidhra_11_precise", + "rule_name": "Dharidhra Yoga", "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, - { - "chart": "Marie Curie", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, - { - "chart": "Marie Curie", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" + "dharidhra_yoga_144", + "dharidhra_yoga_147", + "dharidhra_yoga_148", + "dharidhra_yoga_149", + "dharidhra_yoga_150", + "dharidhra_yoga_151", + "dharidhra_yoga_152" ] }, { @@ -506,23 +464,6 @@ "parvata_yoga" ] }, - { - "chart": "Nikola Tesla", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, - { - "chart": "Nikola Tesla", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", - "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" - ] - }, { "chart": "Charles Darwin", "rule_id": "bvr_utthama_graha_yoga", @@ -531,6 +472,23 @@ "utthama_graha_yoga" ] }, + { + "chart": "Charles Darwin", + "rule_id": "bvr_kalaanidhi_yoga", + "rule_name": "Kalaanidhi Yoga", + "pyjhora_names": [ + "kalaanidhi_yoga", + "kalanidhi_yoga" + ] + }, + { + "chart": "Charles Darwin", + "rule_id": "bvr_matru_sneha_yoga", + "rule_name": "Matru Sneha Yoga", + "pyjhora_names": [ + "matru_sneha_yoga" + ] + }, { "chart": "Charles Darwin", "rule_id": "bvr_sumukha_precise", @@ -548,32 +506,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_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", - "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" - ] - }, - { - "chart": "Charles Darwin", - "rule_id": "bvr_matru_sneha_yoga", - "rule_name": "Matru Sneha Yoga", - "pyjhora_names": [ - "matru_sneha_yoga" - ] - }, { "chart": "Thomas Edison", "rule_id": "bvr_matru_sneha_yoga", @@ -617,10 +549,10 @@ }, { "chart": "Max Planck", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", + "rule_id": "bvr_amala_precise", + "rule_name": "Amala Yoga", "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" + "amala_yoga" ] }, { @@ -637,20 +569,10 @@ }, { "chart": "Max Planck", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", "pyjhora_names": [ - "amala_yoga" - ] - }, - { - "chart": "Richard Feynman", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" + "vanchana_chora_bheethi_yoga" ] }, { @@ -671,12 +593,13 @@ ] }, { - "chart": "Mahatma Gandhi", - "rule_id": "bvr_dattha_puthra_yoga", - "rule_name": "Dattha Puthra Yoga", + "chart": "Richard Feynman", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "dattha_puthra_yoga_222", - "dattha_puthra_yoga_223" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -692,11 +615,12 @@ ] }, { - "chart": "Jawaharlal Nehru", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", + "chart": "Mahatma Gandhi", + "rule_id": "bvr_dattha_puthra_yoga", + "rule_name": "Dattha Puthra Yoga", "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" + "dattha_puthra_yoga_222", + "dattha_puthra_yoga_223" ] }, { @@ -710,11 +634,10 @@ }, { "chart": "Jawaharlal Nehru", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "vanchana_chora_bheethi_yoga" ] }, { @@ -726,20 +649,12 @@ "bahu_puthra_yoga_221" ] }, - { - "chart": "Narendra Modi", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, { "chart": "Indira Gandhi", - "rule_id": "bvr_utthama_graha_yoga", - "rule_name": "Utthama Griha Yoga", + "rule_id": "kahala_yoga", + "rule_name": "Kahala Yoga", "pyjhora_names": [ - "utthama_graha_yoga" + "kahala_yoga" ] }, { @@ -753,10 +668,10 @@ }, { "chart": "Indira Gandhi", - "rule_id": "kahala_yoga", - "rule_name": "Kahala Yoga", + "rule_id": "bvr_utthama_graha_yoga", + "rule_name": "Utthama Griha Yoga", "pyjhora_names": [ - "kahala_yoga" + "utthama_graha_yoga" ] }, { @@ -797,22 +712,6 @@ "matru_sneha_yoga" ] }, - { - "chart": "John F. Kennedy", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, - { - "chart": "John F. Kennedy", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, { "chart": "Nelson Mandela", "rule_id": "bvr_sumukha_precise", @@ -829,14 +728,6 @@ "utthama_graha_yoga" ] }, - { - "chart": "Abraham Lincoln", - "rule_id": "bvr_sumukha_precise", - "rule_name": "Sumukha Yoga", - "pyjhora_names": [ - "sumukha_yoga" - ] - }, { "chart": "Abraham Lincoln", "rule_id": "bvr_kalaanidhi_yoga", @@ -848,11 +739,18 @@ }, { "chart": "Abraham Lincoln", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "rule_id": "bvr_matru_sneha_yoga", + "rule_name": "Matru Sneha Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "matru_sneha_yoga" + ] + }, + { + "chart": "Abraham Lincoln", + "rule_id": "bvr_sumukha_precise", + "rule_name": "Sumukha Yoga", + "pyjhora_names": [ + "sumukha_yoga" ] }, { @@ -866,11 +764,13 @@ ] }, { - "chart": "Abraham Lincoln", - "rule_id": "bvr_matru_sneha_yoga", - "rule_name": "Matru Sneha Yoga", + "chart": "Barack Obama", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "matru_sneha_yoga" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -888,21 +788,12 @@ ] }, { - "chart": "Barack Obama", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", + "chart": "Ludwig van Beethoven", + "rule_id": "bvr_kalaanidhi_yoga", + "rule_name": "Kalaanidhi Yoga", "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, - { - "chart": "Barack Obama", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" + "kalaanidhi_yoga", + "kalanidhi_yoga" ] }, { @@ -921,29 +812,6 @@ "vanchana_chora_bheethi_yoga" ] }, - { - "chart": "Ludwig van Beethoven", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", - "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" - ] - }, - { - "chart": "Wolfgang Mozart", - "rule_id": "bvr_dharidhra_11_precise", - "rule_name": "Dharidhra Yoga", - "pyjhora_names": [ - "dharidhra_yoga_144", - "dharidhra_yoga_147", - "dharidhra_yoga_148", - "dharidhra_yoga_149", - "dharidhra_yoga_150", - "dharidhra_yoga_151", - "dharidhra_yoga_152" - ] - }, { "chart": "Wolfgang Mozart", "rule_id": "bvr_krisanga_yoga", @@ -954,11 +822,17 @@ ] }, { - "chart": "Pablo Picasso", - "rule_id": "bvr_dama_yoga", - "rule_name": "Dama Yoga", + "chart": "Wolfgang Mozart", + "rule_id": "bvr_dharidhra_11_precise", + "rule_name": "Dharidhra Yoga", "pyjhora_names": [ - "dama_yoga" + "dharidhra_yoga_144", + "dharidhra_yoga_147", + "dharidhra_yoga_148", + "dharidhra_yoga_149", + "dharidhra_yoga_150", + "dharidhra_yoga_151", + "dharidhra_yoga_152" ] }, { @@ -970,23 +844,11 @@ ] }, { - "chart": "Vincent van Gogh", - "rule_id": "bvr_yukthi_samanwithavagmi_yoga", - "rule_name": "Yukthi Samanwithavagmi Yoga", + "chart": "Pablo Picasso", + "rule_id": "bvr_dama_yoga", + "rule_name": "Dama Yoga", "pyjhora_names": [ - "yukthi_samanwithavagmi_yoga_154" - ] - }, - { - "chart": "Vincent van Gogh", - "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" + "dama_yoga" ] }, { @@ -999,19 +861,22 @@ }, { "chart": "Vincent van Gogh", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", + "rule_id": "bvr_mathibhramana_yoga", + "rule_name": "Mathibhramana Yoga", "pyjhora_names": [ - "bhaga_chumbana_yoga" + "mathibhramana_yoga_291", + "mathibhramana_yoga_292", + "mathibhramana_yoga_293", + "mathibhramana_yoga_294", + "mathibhramana_yoga_variation" ] }, { - "chart": "Charlie Chaplin", - "rule_id": "bvr_matrunasa_precise", - "rule_name": "Matrunasa Yoga", + "chart": "Vincent van Gogh", + "rule_id": "bvr_yukthi_samanwithavagmi_yoga", + "rule_name": "Yukthi Samanwithavagmi Yoga", "pyjhora_names": [ - "matrunasa_yoga_198", - "matrunasa_yoga_199" + "yukthi_samanwithavagmi_yoga_154" ] }, { @@ -1026,6 +891,24 @@ "mathibhramana_yoga_variation" ] }, + { + "chart": "Charlie Chaplin", + "rule_id": "bvr_bahu_puthra_precise", + "rule_name": "Bahu Puthra Yoga", + "pyjhora_names": [ + "bahu_puthra_yoga_220", + "bahu_puthra_yoga_221" + ] + }, + { + "chart": "Charlie Chaplin", + "rule_id": "bvr_matrunasa_precise", + "rule_name": "Matrunasa Yoga", + "pyjhora_names": [ + "matrunasa_yoga_198", + "matrunasa_yoga_199" + ] + }, { "chart": "Charlie Chaplin", "rule_id": "bvr_pittharoga_yoga", @@ -1042,15 +925,6 @@ "yukthi_samanwithavagmi_yoga_154" ] }, - { - "chart": "Charlie Chaplin", - "rule_id": "bvr_bahu_puthra_precise", - "rule_name": "Bahu Puthra Yoga", - "pyjhora_names": [ - "bahu_puthra_yoga_220", - "bahu_puthra_yoga_221" - ] - }, { "chart": "Elvis Presley", "rule_id": "bvr_kapata_yoga", @@ -1061,6 +935,22 @@ "kapata_yoga_204" ] }, + { + "chart": "Michael Jackson", + "rule_id": "bvr_sumukha_precise", + "rule_name": "Sumukha Yoga", + "pyjhora_names": [ + "sumukha_yoga" + ] + }, + { + "chart": "Michael Jackson", + "rule_id": "bvr_amala_precise", + "rule_name": "Amala Yoga", + "pyjhora_names": [ + "amala_yoga" + ] + }, { "chart": "Michael Jackson", "rule_id": "bvr_dama_yoga", @@ -1077,14 +967,6 @@ "vanchana_chora_bheethi_yoga" ] }, - { - "chart": "Michael Jackson", - "rule_id": "bvr_sumukha_precise", - "rule_name": "Sumukha Yoga", - "pyjhora_names": [ - "sumukha_yoga" - ] - }, { "chart": "A.R. Rahman", "rule_id": "bvr_dama_yoga", @@ -1145,14 +1027,6 @@ "nishkapata_yoga_206" ] }, - { - "chart": "Steve Jobs", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", - "pyjhora_names": [ - "amala_yoga" - ] - }, { "chart": "Bill Gates", "rule_id": "bvr_raja_bhanga_yoga", @@ -1162,22 +1036,6 @@ "raja_bhanga_yoga_299" ] }, - { - "chart": "Bill Gates", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, - { - "chart": "Elon Musk", - "rule_id": "sankha_yoga", - "rule_name": "Sankha Yoga", - "pyjhora_names": [ - "sankha_yoga" - ] - }, { "chart": "Elon Musk", "rule_id": "bvr_krisanga_yoga", @@ -1189,10 +1047,10 @@ }, { "chart": "Elon Musk", - "rule_id": "bvr_amala_precise", - "rule_name": "Amala Yoga", + "rule_id": "sankha_yoga", + "rule_name": "Sankha Yoga", "pyjhora_names": [ - "amala_yoga" + "sankha_yoga" ] }, { @@ -1204,21 +1062,12 @@ "dattha_puthra_yoga_223" ] }, - { - "chart": "Jeff Bezos", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", - "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" - ] - }, { "chart": "Warren Buffett", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", + "rule_id": "bvr_vaatharoga_yoga", + "rule_name": "Vaatharoga Yoga", "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" + "vaatharoga_yoga" ] }, { @@ -1235,18 +1084,10 @@ }, { "chart": "Warren Buffett", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, - { - "chart": "Warren Buffett", - "rule_id": "bvr_vaatharoga_yoga", - "rule_name": "Vaatharoga Yoga", - "pyjhora_names": [ - "vaatharoga_yoga" + "vanchana_chora_bheethi_yoga" ] }, { @@ -1258,12 +1099,11 @@ ] }, { - "chart": "Mukesh Ambani", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "chart": "Narayana Murthy", + "rule_id": "bvr_bandhubhisthyaktha_precise", + "rule_name": "Bandhubhisthyaktha Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "bandhubhisthyaktha_yoga" ] }, { @@ -1275,11 +1115,12 @@ ] }, { - "chart": "Narayana Murthy", - "rule_id": "bvr_bandhubhisthyaktha_precise", - "rule_name": "Bandhubhisthyaktha Yoga", + "chart": "Azim Premji", + "rule_id": "bvr_krisanga_yoga", + "rule_name": "Krisanga Yoga", "pyjhora_names": [ - "bandhubhisthyaktha_yoga" + "krisanga_yoga_112", + "krisanga_yoga_113" ] }, { @@ -1290,15 +1131,6 @@ "dama_yoga" ] }, - { - "chart": "Azim Premji", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga", - "pyjhora_names": [ - "krisanga_yoga_112", - "krisanga_yoga_113" - ] - }, { "chart": "Azim Premji", "rule_id": "bvr_vanchana_chora_bheethi_yoga", @@ -1324,22 +1156,6 @@ "pisacha_grastha_yoga" ] }, - { - "chart": "Virat Kohli", - "rule_id": "bvr_dama_yoga", - "rule_name": "Dama Yoga", - "pyjhora_names": [ - "dama_yoga" - ] - }, - { - "chart": "Virat Kohli", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, { "chart": "Virat Kohli", "rule_id": "bvr_sumukha_precise", @@ -1350,19 +1166,10 @@ }, { "chart": "Virat Kohli", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "rule_id": "bvr_dama_yoga", + "rule_name": "Dama Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" - ] - }, - { - "chart": "Muhammad Ali", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", - "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" + "dama_yoga" ] }, { @@ -1375,19 +1182,10 @@ }, { "chart": "Muhammad Ali", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, - { - "chart": "Muhammad Ali", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", - "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "vanchana_chora_bheethi_yoga" ] }, { @@ -1404,23 +1202,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Michael Jordan", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, - { - "chart": "Michael Jordan", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", - "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" - ] - }, { "chart": "Lionel Messi", "rule_id": "bvr_matrudeerghayur_yoga", @@ -1430,15 +1211,6 @@ "matrudeerghayur_yoga_197" ] }, - { - "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_kapata_yoga", @@ -1451,11 +1223,19 @@ }, { "chart": "Lionel Messi", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "rule_id": "bvr_matrunasa_precise", + "rule_name": "Matrunasa Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "matrunasa_yoga_198", + "matrunasa_yoga_199" + ] + }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", + "pyjhora_names": [ + "vanchana_chora_bheethi_yoga" ] }, { @@ -1472,22 +1252,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Lionel Messi", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", - "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" - ] - }, - { - "chart": "Cristiano Ronaldo", - "rule_id": "lakshmi_yoga", - "rule_name": "Lakshmi Yoga", - "pyjhora_names": [ - "lakshmi_yoga" - ] - }, { "chart": "Cristiano Ronaldo", "rule_id": "bvr_kalaanidhi_yoga", @@ -1505,6 +1269,14 @@ "yuddha_marana_yoga" ] }, + { + "chart": "Cristiano Ronaldo", + "rule_id": "lakshmi_yoga", + "rule_name": "Lakshmi Yoga", + "pyjhora_names": [ + "lakshmi_yoga" + ] + }, { "chart": "Serena Williams", "rule_id": "bvr_ayatna_griha_prapta_yoga", @@ -1546,14 +1318,6 @@ "parvata_yoga" ] }, - { - "chart": "Swami Vivekananda", - "rule_id": "bvr_matru_sneha_yoga", - "rule_name": "Matru Sneha Yoga", - "pyjhora_names": [ - "matru_sneha_yoga" - ] - }, { "chart": "Swami Vivekananda", "rule_id": "bvr_ayatna_griha_prapta_yoga", @@ -1563,6 +1327,14 @@ "ayatna_griha_prapta_yoga_190" ] }, + { + "chart": "Swami Vivekananda", + "rule_id": "bvr_matru_sneha_yoga", + "rule_name": "Matru Sneha Yoga", + "pyjhora_names": [ + "matru_sneha_yoga" + ] + }, { "chart": "Queen Elizabeth II", "rule_id": "bvr_dama_yoga", @@ -1589,12 +1361,12 @@ ] }, { - "chart": "Dalai Lama", - "rule_id": "bvr_kaalanirdesat_puthranaasa_yoga", - "rule_name": "Kaalanirdesat Puthranaasa Yoga", + "chart": "Pope Francis", + "rule_id": "bvr_kalaanidhi_yoga", + "rule_name": "Kalaanidhi Yoga", "pyjhora_names": [ - "kaalanirdesat_puthranaasa_yoga_230", - "kaalanirdesat_puthranaasa_yoga_229" + "kalaanidhi_yoga", + "kalanidhi_yoga" ] }, { @@ -1607,12 +1379,13 @@ ] }, { - "chart": "Pope Francis", - "rule_id": "bvr_kalaanidhi_yoga", - "rule_name": "Kalaanidhi Yoga", + "chart": "Osho", + "rule_id": "bvr_dehasthoulya_yoga", + "rule_name": "Dehasthoulya Yoga", "pyjhora_names": [ - "kalaanidhi_yoga", - "kalanidhi_yoga" + "dehasthoulya_yoga_114", + "dehasthoulya_yoga_115", + "dehasthoulya_yoga_116" ] }, { @@ -1632,26 +1405,6 @@ "vichitra_saudha_prakara_yoga" ] }, - { - "chart": "Osho", - "rule_id": "bvr_dehasthoulya_yoga", - "rule_name": "Dehasthoulya Yoga", - "pyjhora_names": [ - "dehasthoulya_yoga_114", - "dehasthoulya_yoga_115", - "dehasthoulya_yoga_116" - ] - }, - { - "chart": "J. Krishnamurti", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, { "chart": "J. Krishnamurti", "rule_id": "bvr_sumukha_precise", @@ -1661,11 +1414,13 @@ ] }, { - "chart": "Ramana Maharshi", - "rule_id": "sankha_yoga", - "rule_name": "Sankha Yoga", + "chart": "J. Krishnamurti", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "sankha_yoga" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -1678,6 +1433,14 @@ "kapata_yoga_204" ] }, + { + "chart": "Ramana Maharshi", + "rule_id": "sankha_yoga", + "rule_name": "Sankha Yoga", + "pyjhora_names": [ + "sankha_yoga" + ] + }, { "chart": "Paramahansa Yogananda", "rule_id": "bvr_matrunasa_precise", @@ -1687,22 +1450,6 @@ "matrunasa_yoga_199" ] }, - { - "chart": "Paramahansa Yogananda", - "rule_id": "bvr_vanchana_chora_bheethi_yoga", - "rule_name": "Vanchana Chora Bheethi Yoga", - "pyjhora_names": [ - "vanchana_chora_bheethi_yoga" - ] - }, - { - "chart": "Paramahansa Yogananda", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga", - "pyjhora_names": [ - "bhaga_chumbana_yoga" - ] - }, { "chart": "Paramahansa Yogananda", "rule_id": "bvr_yuddha_marana_yoga", @@ -1710,6 +1457,14 @@ "pyjhora_names": [ "yuddha_marana_yoga" ] + }, + { + "chart": "Paramahansa Yogananda", + "rule_id": "bvr_vanchana_chora_bheethi_yoga", + "rule_name": "Vanchana Chora Bheethi Yoga", + "pyjhora_names": [ + "vanchana_chora_bheethi_yoga" + ] } ] } \ No newline at end of file diff --git a/references/yoga_rules.json b/references/yoga_rules.json index 262ccb3b..9ab7f5fd 100644 --- a/references/yoga_rules.json +++ b/references/yoga_rules.json @@ -8999,7 +8999,7 @@ "category": "auspicious", "logic": { "type": "custom", - "expr": "\n# Amala Yoga: only natural benefics in 10th from lagna OR from Moon\nbenefics = {'Jupiter', 'Venus', 'Mercury', 'Moon'}\ndef check_amala_from(base_h):\n h10 = ((base_h - 1 + 9) % 12) + 1\n planets_in_h10 = [p for p, info in ctx.planets.items() if info.get('house') == h10]\n if not planets_in_h10:\n return False\n return all(p in benefics for p in planets_in_h10)\nasc_h = ctx.planets.get('Ascendant', {}).get('house', 1)\nmoon_h = ctx.planets.get('Moon', {}).get('house', 1) if 'Moon' in ctx.planets else None\ncheck_amala_from(asc_h) or (moon_h and check_amala_from(moon_h))\n", + "expr": "\n# PyJHora/BVR-13 Amala Yoga: any natural benefic in 10th from Lagna or Moon.\n# Source parity: PyJHora natural benefics are Jupiter, Venus, plus Mercury only if alone or with Jupiter/Venus.\nmoon_h = house_of('Moon')\nmoon_10 = ((moon_h - 1 + 9) % 12) + 1 if moon_h else None\nany(house_of(b) in [10, moon_10] for b in pyjhora_natural_benefics())\n", "combo_template": "第10宫只有吉星" }, "effects": [ @@ -9901,37 +9901,9 @@ "bvr_id": null, "category": "kalatra", "logic": { - "type": "compound_conditions", - "conditions": [ - { - "type": "compound", - "operator": "OR", - "conditions": [ - { - "type": "compound", - "operator": "AND", - "conditions": [ - { - "type": "lord_in_house", - "lord_of": 7, - "house_offset": 3, - "note": "7th lord in 4th conjunct Venus" - }, - { - "type": "venus_in_house", - "house_offset": 3, - "note": "Venus in 4th house" - } - ] - }, - { - "type": "lagna_lord_debilitated_in_rasi_or_navamsa", - "note": "Lagna lord debilitated in rasi or navamsa" - } - ] - } - ], - "note": "" + "type": "custom", + "expr": "\n# PyJHora/BVR-240 Bhaga Chumbana Yoga.\n# A: 7th lord in 4th and Venus in 4th. B: Lagna lord debilitated in D1 or Navamsa.\nl7 = lord(7)\nl1 = lord(1)\nif l7 not in ctx.planets or l1 not in ctx.planets:\n False\nelse:\n path_a = house_of(l7) == 4 and house_of('Venus') == 4\n path_b = debil(l1) or d9_sign_of(l1) == DEBILITATION.get(l1)\n path_a or path_b\n", + "combo_template": "7宫主与金星在4宫,或上升主D1/D9落陷" }, "effects": [ "Excessive sensuality, libidinous nature" @@ -11158,7 +11130,7 @@ "category": "putra", "logic": { "type": "custom", - "expr": "\n# PyJHora 229/230. Variant 229: Rahu in 5th, L5 joined malefic, Jupiter debilitated.\n# Variant 230: natural malefics occupy or rasi-aspect both 5th from Lagna and 5th from Jupiter.\nl5 = lord(5)\nif l5 not in ctx.planets or 'Jupiter' not in ctx.planets:\n False\nelse:\n cond229 = house_of('Rahu') == 5 and debil('Jupiter') and any(m in ctx.planets and same_house(l5, m) for m in MALEFICS)\n j5 = ((house_of('Jupiter') - 1 + 4) % 12) + 1\n mal_lagna5 = any(m in ctx.planets and (house_of(m) == 5 or rasi_aspects_house(m, 5)) for m in MALEFICS)\n mal_jupiter5 = any(m in ctx.planets and (house_of(m) == j5 or rasi_aspects_house(m, j5)) for m in MALEFICS)\n cond229 or (mal_lagna5 and mal_jupiter5)\n", + "expr": "\n# PyJHora 229/230. Variant 229: Rahu in 5th, L5 joined malefic, Jupiter debilitated.\n# Variant 230: natural malefics occupy or PyJHora-style rasi-aspect both 5th from Lagna and 5th from Jupiter.\nl5 = lord(5)\nif l5 not in ctx.planets or 'Jupiter' not in ctx.planets:\n False\nelse:\n cond229 = house_of('Rahu') == 5 and debil('Jupiter') and any(m in ctx.planets and same_house(l5, m) for m in MALEFICS)\n j5 = ((house_of('Jupiter') - 1 + 4) % 12) + 1\n mal_lagna5 = any(m in ctx.planets and (house_of(m) == 5 or pyjhora_planets_aspecting_raasi(m, 5)) for m in MALEFICS)\n mal_jupiter5 = any(m in ctx.planets and (house_of(m) == j5 or pyjhora_planets_aspecting_raasi(m, j5)) for m in MALEFICS)\n cond229 or (mal_lagna5 and mal_jupiter5)\n", "combo_template": "Rahu/L5/木星或凶星影响Lagna与木星起算第5宫" }, "effects": [ diff --git a/scripts/yoga_engine.py b/scripts/yoga_engine.py index 6ea2d142..49a09139 100644 --- a/scripts/yoga_engine.py +++ b/scripts/yoga_engine.py @@ -1189,6 +1189,17 @@ class YogaEngine: occupants = ctx.planets_in_house(target) return bool(occupants) and all(p in BENEFICS for p in occupants) + def pyjhora_natural_benefics(): + """Replicate PyJHora yoga._get_natural_benefics(): Jupiter, Venus, plus benefic Mercury.""" + benefics = [p for p in ["Jupiter", "Venus"] if p in ctx.planets] + mercury_house = ctx.house_of("Mercury") + if mercury_house is not None: + mercury_alone = len(ctx.planets_in_house(mercury_house)) == 1 + mercury_with_jupiter_or_venus = any(ctx.house_of(p) == mercury_house for p in ["Jupiter", "Venus"] if p in ctx.planets) + if mercury_alone or mercury_with_jupiter_or_venus: + benefics.append("Mercury") + return benefics + # 辅助:获取星盘所有行星名列表 def _planets_list(): return list(ctx.planets.keys()) @@ -1248,6 +1259,7 @@ class YogaEngine: "only_malefics_in_house": only_malefics_in_house, "house_has_benefic": house_has_benefic, "house_has_malefic": house_has_malefic, "house_sign": house_sign, "movable_house": movable_house, + "pyjhora_natural_benefics": pyjhora_natural_benefics, "d9_house_of": d9_house_of, "d9_sign_of": d9_sign_of, "d9_lord_of_house": d9_lord_of_house, "navamsa_dispositor": navamsa_dispositor, "tithi": tithi, "is_waning_moon": is_waning_moon,