From 62abe08eceb7bb39f87614920c69e6350466acf0 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sat, 25 Apr 2026 22:36:52 +0800 Subject: [PATCH] =?UTF-8?q?v3.9.0:=20Prashna=E9=97=AE=E4=BA=8B=E5=8D=A0?= =?UTF-8?q?=E6=98=9F=E5=AE=8C=E6=95=B4=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 prashna-complete-guide.md (350行, 10大计算体系+十步断卦+35 Sahams) - 新增 prashna.py 引擎 (240行, 8种CLI模式) - 新增 single-event-inquiry-protocol.md 单事推理模板 - jyotish_engine.py 新增第23子命令 prashna - SKILL.md v3.8.0→v3.9.0, 新增§14 Prashna能力表+触发词 --- SKILL.md | 52 ++- references/prashna-complete-guide.md | 461 ++++++++++++++++++++ references/single-event-inquiry-protocol.md | 175 ++++++++ scripts/jyotish_engine.py | 59 ++- scripts/prashna.py | 235 ++++++++++ 5 files changed, 977 insertions(+), 5 deletions(-) create mode 100644 references/prashna-complete-guide.md create mode 100644 references/single-event-inquiry-protocol.md create mode 100644 scripts/prashna.py diff --git a/SKILL.md b/SKILL.md index 2233e1db..b39329b6 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,7 +1,7 @@ --- name: jyotish-vedic-astrology -version: 3.8.0 -description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。覆盖行星配置、Yoga格局、Nakshatra解读、宫位分析、现代生活场景映射、现代措辞解读、案例对比分析、自动出生时间矫正、常见误判纠错、Dasha+Transit推运、精确预测、PDF星盘读取、Swiss Ephemeris计算引擎、星盘计算、分盘计算、名人案例查询、Shadbala六重力量、Ashtakavarga八分法(BPHS完整表SAV=337)、Hermes记忆系统、事件预测、R1-R10数学验证(含R2b BAV列→SAV列校验)、P1-P12行星审计(含P3仓库耦合+P8年龄状态+冲突仲裁3条规则)、验前事、MD→HTML报告生成(羊皮纸主题)、BPHS十六分盘精确计算(D2-D60)、度数精确相位系统(Drishti)、Jaimini完整系统(Chara Karaka 7/8+Chara Dasha+Karakamsha)、高级Nakshatra分析(Tara Bala+Sub-Lord KP系统)、Argala门闩系统(Virodha反干预)、Tajika年运盘(Muntha+YearLord+Mudda Dasha+Tri-Pataka三旗)、合盘分析(Ashta Koota 36分制+Mangal Dosha+Papasamya+Dasha兼容性)、配偶多层综合分析(DK+7宫主+金星+木星+昼夜区分+Rahu辅助六层交叉确认)、行星度数精确旺衰判定(精确度数+渐变效应+Moolatrikona区间+行星生命阶段+Sandhi交界点)、燃烧阈值、落陷取消Neecha Bhanga、Sect昼夜区分法、Pushkara Navamsha、Vargottama。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、吠陀占星、印占、PDF星盘、读取PDF、分析PDF星盘、矫正出生时间、出生时间验证、生时矫正、现代解读、现代措辞、误判纠错、错题本、Varga分盘、全球占星师方法论、三合盘、综合分析、过境分析、Double Transit、Sade Sati、合盘、婚姻匹配、关系分析、Koota、Mangal Dosha、年运盘、Varshaphala、太阳返照、Tajika、星宿速查、综合解盘工作流、应期预测、推运应期、事件时机、什么时候结婚、什么时候升职、什么时候发财、Argala、门闩、行星干预、Dasa收敛、Yogini大运、Chara Dasha、AI解盘、算星盘、排盘、计算星盘、查名人、Shadbala、六重力量、Ashtakavarga、八分法、行星力量、记忆系统、事件预测、验证、校验、审计、验前事、R1-R10、P1-P12、仓库耦合、冲突仲裁、报告生成、HTML报告、精确相位、Drishti、Jaimini、Chara Karaka、Atmakaraka、Darakaraka、Karakamsha、Tara Bala、Sub-Lord、KP系统、Navamsa、D9、D60、Shashtyamsa、十六分盘、门闩分析、Muntha、年主星、三旗系统、合盘评分、Nadi Koota、Gana、Yoni、Papasamya、Dasha兼容、配偶分析、配偶星、配偶征象、婚姻分析、配偶画像、DK配偶星、多层配偶、昼夜区分、旺衰度数、行星燃烧、落陷取消、Neecha Bhanga、Sect昼夜、Pushkara、Vargottama、行星尊严、Moolatrikona、行星生命阶段、Avastha、深度解盘、全面分析、星盘深度阅读、频率分析、收敛验证、婚姻深层分析、配偶画像、综合深度分析。 +version: 3.9.0 +description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。覆盖行星配置、Yoga格局、Nakshatra解读、宫位分析、现代生活场景映射、现代措辞解读、案例对比分析、自动出生时间矫正、常见误判纠错、Dasha+Transit推运、精确预测、PDF星盘读取、Swiss Ephemeris计算引擎、星盘计算、分盘计算、名人案例查询、Shadbala六重力量、Ashtakavarga八分法(BPHS完整表SAV=337)、Hermes记忆系统、事件预测、R1-R10数学验证(含R2b BAV列→SAV列校验)、P1-P12行星审计(含P3仓库耦合+P8年龄状态+冲突仲裁3条规则)、验前事、MD→HTML报告生成(羊皮纸主题)、BPHS十六分盘精确计算(D2-D60)、度数精确相位系统(Drishti)、Jaimini完整系统(Chara Karaka 7/8+Chara Dasha+Karakamsha)、高级Nakshatra分析(Tara Bala+Sub-Lord KP系统)、Argala门闩系统(Virodha反干预)、Tajika年运盘(Muntha+YearLord+Mudda Dasha+Tri-Pataka三旗)、合盘分析(Ashta Koota 36分制+Mangal Dosha+Papasamya+Dasha兼容性)、配偶多层综合分析(DK+7宫主+金星+木星+昼夜区分+Rahu辅助六层交叉确认)、行星度数精确旺衰判定(精确度数+渐变效应+Moolatrikona区间+行星生命阶段+Sandhi交界点)、燃烧阈值、落陷取消Neecha Bhanga、Sect昼夜区分法、Pushkara Navamsha、Vargottama。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、吠陀占星、印占、PDF星盘、读取PDF、分析PDF星盘、矫正出生时间、出生时间验证、生时矫正、现代解读、现代措辞、误判纠错、错题本、Varga分盘、全球占星师方法论、三合盘、综合分析、过境分析、Double Transit、Sade Sati、合盘、婚姻匹配、关系分析、Koota、Mangal Dosha、年运盘、Varshaphala、太阳返照、Tajika、星宿速查、综合解盘工作流、应期预测、推运应期、事件时机、什么时候结婚、什么时候升职、什么时候发财、Argala、门闩、行星干预、Dasa收敛、Yogini大运、Chara Dasha、AI解盘、算星盘、排盘、计算星盘、查名人、Shadbala、六重力量、Ashtakavarga、八分法、行星力量、记忆系统、事件预测、验证、校验、审计、验前事、R1-R10、P1-P12、仓库耦合、冲突仲裁、报告生成、HTML报告、精确相位、Drishti、Jaimini、Chara Karaka、Atmakaraka、Darakaraka、Karakamsha、Tara Bala、Sub-Lord、KP系统、Navamsa、D9、D60、Shashtyamsa、十六分盘、门闩分析、Muntha、年主星、三旗系统、合盘评分、Nadi Koota、Gana、Yoni、Papasamya、Dasha兼容、配偶分析、配偶星、配偶征象、婚姻分析、配偶画像、DK配偶星、多层配偶、昼夜区分、旺衰度数、行星燃烧、落陷取消、Neecha Bhanga、Sect昼夜、Pushkara、Vargottama、行星尊严、Moolatrikona、行星生命阶段、Avastha、深度解盘、全面分析、星盘深度阅读、频率分析、收敛验证、婚姻深层分析、配偶画像、综合深度分析、Prashna问事占星、问事占星、时卦、卜卦占星、问卜、Horary、问事、提问占星、Arudha Lagna、映像上升、Trisphuta、三重合点、Sphuta、Gulika、古利卡、Saham、敏感点、失物查询、寻物、Chor Graha、盗贼星、Kunda验证、Prasna Marga、十步断卦。 --- # 印度占星专业解盘与推运系统 @@ -208,6 +208,48 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力 - **分盘深度阅读**:19分盘系统化三级方法论(Level 1-3)+行星频率分析核心技法(≥40%=核心主题)+Vargottama检测矩阵+分盘组合阅读模式(三角/生命线/财富链/关系链)+Swiss Ephemeris交叉验证 → 详见 `references/divisional-chart-deep-reading.md` - **综合深度分析工作流**:12模块完整工作流(D1→特殊Lagna→Karaka→Shadbala→Avastha→Bhava Bala→Vimsopaka→19分盘→AV→Dasha收敛→D9婚姻→综合结论)+PDF 11页提取最佳实践+引擎调用流程+报告生成+质量检查清单 → 详见 `references/deep-analysis-complete-workflow.md` +### 14. Prashna 问事占星系统 ⭐ v3.9.0 + +**核心原理:** 基于提问时刻铸造即时星盘,通过共时性原则(Synchronicity)回答具体问题。不需要出生数据。 + +**十大核心计算模块:** + +| 模块 | 功能 | 说明 | +|------|------|------| +| Prashna星盘 | 基于提问时间/地点铸造 | Swiss Ephemeris精确计算 | +| Arudha Lagna | 映像上升点(真实vs表象) | BPHS经典法+1/7宫例外规则 | +| Trisphuta | 三重合点(日+月+Gulika) | Prasna Marga Ch.5 | +| Catusphuta/Pancasphuta | 四重/五重组合 | 递进式综合判断 | +| Gulika | 古利卡(土星暗影子星) | 八等分法计算 | +| Prana/Deha/Mrityu | 生命三维度Sphuta | 寿命/危险判断 | +| 35 Sahams | 敏感点体系 | B.V. Raman公式+30°修正 | +| Kunda验证 | 上升点正确性验证 | 81常数法 | +| Chor Graha | 失物/窃贼分析 | 方向+窃贼+恢复概率 | +| Mrityu Chakra | 死亡轮(重病专用) | Navamsa+Mrityu Rashi | + +**十步断卦框架:** +1. 评估星盘活力(上升+月亮) +2. 对比 Lagna vs Arudha Lagna +3. 检验相关宫位 +4. 比较征象星力量 +5. 检查 Tajika Yoga(Ithasala等) +6. 计算 Sphuta 组合 +7. 排查阻碍因素 +8. 权衡吉凶证词 +9. 时间判断 +10. 大运/过境辅助验证 + +**引擎命令:** +```bash +python3 scripts/prashna.py chart --datetime "2026-04-25 14:30" --lat 39.9 --lon 116.4 +python3 scripts/jyotish_engine.py prashna --datetime "2026-04-25 14:30" --lat 39.9 --lon 116.4 --mode chart +# --mode: chart|arudha|sphutas|sahams|lost-item|life|kunda +``` + +**参考资料:** `references/prashna-complete-guide.md`(完整方法论)+ `references/kp-astrology-complete-system.md`(KP 1-249法)+ `references/tajika-yoga-complete-guide.md`(Tajika Yoga) + +**适用场景:** 是非判断、时机选择、失物寻人、婚姻结果、事业方向、健康预后、旅行安全、诉讼胜负、财务投资 + ### 13. 计算引擎集成(Swiss Ephemeris + 数据库)⭐ v3.4.0 **统一引擎入口**:`scripts/jyotish_engine.py` v3.7.1(基于 Swiss Ephemeris 天文计算库) @@ -247,6 +289,7 @@ $PYTHON $SCRIPT <子命令> [参数] | `tajika` | v3.7 Tajika年运盘(Muntha + YearLord + Mudda Dasha + Tri-Pataka) | `tajika --year REDACTED_YEAR --month 4 --day 17 --hour 14 --minute 45 --lat 36.6 --lon 114.5 --tz 8 --age 33` | | `synastry` | v3.7 合盘分析(Ashta Koota 36分 + Mangal Dosha + Papasamya) | `synastry --moon1 310.89 --moon2 45.5 --mars1 90.43 --mars2 120.3` | | `report` | MD→HTML报告生成(羊皮纸主题) | `report ./report_folder --name 一楠 --lagna Leo` | +| **`prashna`** | **⭐ v3.9 Prashna问事占星(提问时刻星盘+Arudha Lagna+Sphuta组合+Sahams+失物查询)** | `prashna --datetime "2026-04-25 14:30" --lat 39.9 --lon 116.4 --mode chart` | **外部数据源**(引擎自动读取): - 验证数据库:`~/WorkBuddy/Claw/vedic_astrology_validation.db`(15,840条案例,10种技法准确率) @@ -425,7 +468,7 @@ $PYTHON $SCRIPT full-reading --year YYYY --month MM --day DD --hour HH --minute ## 参考资料 -本Skill包含以下参考资料(存储在references/目录),共81个文件: +本Skill包含以下参考资料(存储在references/目录),共82个文件: ### AI解盘工作流(1个)⭐ v3.2 新增 0. **ai-reading-workflow-prompt.md**:AI解盘工作流Prompt工程(7阶段完整执行引擎:PDF提取→意图路由→静态分析10步→动态推运7步→应期输出→补救→现代措辞包装)⭐⭐⭐⭐⭐ @@ -538,6 +581,7 @@ $PYTHON $SCRIPT full-reading --year YYYY --month MM --day DD --hour HH --minute 79. **navamsa-marriage-deep-analysis.md**:Navamsa婚姻深度分析协议(D9婚姻五维分析法+Vargottama婚姻意义+19分盘频率分析+Pushkara Navamsa婚姻解读+D9婚姻8步旗标算法实操版+D9与D1矛盾处理)⭐⭐⭐⭐⭐ v3.8.0 新增 80. **divisional-chart-deep-reading.md**:分盘深度阅读工作流(19分盘系统化分析法:三级方法论+行星频率分析核心技法+Vargottama检测矩阵+分盘组合阅读模式+Swiss Ephemeris交叉验证)⭐⭐⭐⭐⭐ v3.8.0 新增 81. **deep-analysis-complete-workflow.md**:综合深度分析完整工作流(12模块系统化方法:D1基础→特殊Lagna→Jaimini Karaka→Shadbala→Avastha→Bhava Bala→Vimsopaka→19分盘→Ashtakavarga→多Dasha收敛→Navamsa婚姻→综合结论+PDF提取最佳实践+引擎调用流程+报告生成+质量检查清单)⭐⭐⭐⭐⭐ v3.8.0 新增 +82. **prashna-complete-guide.md**:Prashna问事占星完整指南(十大核心计算:Arudha Lagna+Trisphuta/Catusphuta/Pancasphuta+Gulika+Prana/Deha/Mrityu Sphuta+35 Sahams+Kunda验证+Chor Graha失物+Mrityu Chakra死亡轮+十步断卦框架+8类问题专题)⭐⭐⭐⭐⭐ v3.9.0 新增 ## 模板文件 @@ -568,4 +612,4 @@ $PYTHON $SCRIPT full-reading --year YYYY --month MM --day DD --hour HH --minute **版本**:3.8.0 **创建日期**:2026-04-20 -**最后更新**:2026-04-25(v3.8.0 新增深度分析方法论5篇——Shadbala实战解读方法论(五力量组合模式库+Avastha联合诊断+Bhava Bala实战解读+Vimsopaka解读+行星力量排名法)+多Dasha收敛协议(六系统交叉验证+PDF提取指南+收敛冲突处理)+Navamsa婚姻深度分析协议(D9五维分析法+Vargottama婚姻+频率分析+Pushkara+8步旗标实操)+分盘深度阅读工作流(19分盘系统化+频率分析核心技法+Vargottama检测+Swiss Ephemeris验证)+综合深度分析完整工作流(12模块方法+PDF提取最佳实践+引擎调用+报告生成+质量清单);v3.7.4 Ayanamsa修复;v3.7.3 行星尊严与度数完整参考手册;v3.7.2 配偶多层综合分析方法论;v3.7.1 full-reading全自动综合解盘+三路径路由;v3.7.0 7大新计算模块) +**最后更新**:2026-04-25(v3.9.0 新增Prashna问事占星完整系统——prashna-complete-guide.md参考文件+prashna.py计算引擎+SKILL.md §14十步断卦框架+十大核心计算模块+引擎prashna子命令集成+失物查询Chor Graha+35 Sahams敏感点+Arudha Lagna+Trisphuta组合+Gulika计算+Mrityu Chakra死亡轮+Kunda验证法);v3.8.0 深度分析方法论5篇;v3.7.4 Ayanamsa修复;v3.7.3 行星尊严与度数完整参考手册;v3.7.2 配偶多层综合分析方法论;v3.7.1 full-reading全自动综合解盘+三路径路由;v3.7.0 7大新计算模块) diff --git a/references/prashna-complete-guide.md b/references/prashna-complete-guide.md new file mode 100644 index 00000000..be1027e7 --- /dev/null +++ b/references/prashna-complete-guide.md @@ -0,0 +1,461 @@ +# Prashna Shastra(问事占星/时卦)完整指南 + +> **版本**: v1.0 | **更新**: 2026-04-25 +> **来源经典**: Prasna Marga (Harihara), Tajika Neelakanthi, BPHS, Phaladeepika +> **互补文件**: KP Prashna 见 `kp-astrology-complete-system.md`;Tajika Yoga 见 `tajika-yoga-complete-guide.md` + +--- + +## 目录 + +1. [核心原理](#1-核心原理) +2. [星盘铸造与Kunda验证](#2-星盘铸造与kunda验证) +3. [十大核心计算体系](#3-十大核心计算体系) +4. [征象星识别体系](#4-征象星识别体系) +5. [十步断卦框架](#5-十步断卦框架) +6. [问题类型专题](#6-问题类型专题) +7. [35 Sahams 敏感点](#7-35-sahams-敏感点) +8. [Tajika Yoga 快速参考](#8-tajika-yoga-快速参考) +9. [死亡轮(Mrityu Chakra)](#9-死亡轮mrityu-chakra) +10. [公式速查表](#10-公式速查表) + +--- + +## 1. 核心原理 + +**Prashna** = 梵语"提问"。在提问瞬间铸造星盘,基于**共时性原则**——内在关切与天象的对应。《Prashna Marga》称之为 **"prashna shakti"(提问之力)**。 + +| 维度 | 本命盘 | Prashna 盘 | +|------|--------|------------| +| 时间基准 | 出生时刻 | 提问时刻 | +| 覆盖范围 | 一生模式 | 单一具体问题 | +| 出生数据 | 必需 | 不需要 | + +**权威经典:** + +| 经典 | 核心贡献 | +|------|---------| +| Prasna Marga (Nilakantha, 17世纪) | Prashna 最高权威,32章 | +| Tajika Neelakanthi | Tajika Yoga 系统 | +| Shatpanchasika | 古典 Prashna 经典 | +| Krishneeyam | 喀拉拉邦 Prashna 流派 | + +--- + +## 2. 星盘铸造与Kunda验证 + +### 2.1 铸造五要素 + +1. **精确时间** — 上升点约每2小时变化一次 +2. **精确地点** — 经纬度影响上升点 +3. **可靠计算** — Swiss Ephemeris +4. **Kunda验证** — 验证上升点正确性 +5. **记录原话** — 问题措辞影响解读方向 + +### 2.2 Kunda 验证法(Prasna Marga Ch.5) + +1. Lagna 经度 → 弧分 +2. × 81(Kunda 常数) +3. ÷ 12 取余 +4. 余数 → Nakshatra +5. 若与出生 Nakshatra(或三合)一致 → 正确 +6. 不一致 → 每差1个 Nakshatra 修正10弧分 + +**示例:** Lagna 11°34' = 694' × 81 = 56,214 ÷ 12 → 余6 = Ārdrā + +--- + +## 3. 十大核心计算体系 + +### 3.1 Arudha Lagna(映像上升点) + +**概念:** 揭示"表象"而非"真实"。对比 Lagna(真实)vs AL(感知)。 + +**计算(BPHS 法):** +1. 从上升数到上升主星所在宫位,记录宫数 N +2. 从上升主星位置数 N 个宫位 → **Arudha Lagna** +3. **例外:若落在1宫或7宫,再数10个宫位** + +**速查表:** + +| 上升主星宫位 | AL宫位 | 上升主星宫位 | AL宫位 | +|---|---|---|---| +| 1宫 | **10宫** | 7宫 | **10宫** | +| 2宫 | 3宫 | 8宫 | 3宫 | +| 3宫 | 5宫 | 9宫 | 5宫 | +| 4宫 | 4宫 | 10宫 | 4宫 | +| 5宫 | 9宫 | 11宫 | 9宫 | +| 6宫 | 11宫 | 12宫 | 11宫 | + +> AL 不可能出现在 1、2、6、7、8、12 宫 + +**双主星(天蝎/水瓶)判断优先级:** +1. 不在该星座中的行星优先 +2. 伴星更多者更强 +3. 被木星/水星 Drishti 者更强 +4. 擢升 > Mulatrikona > 本宫 + +**解读:** + +| Lagna | AL | 解读 | +|-------|----|------| +| 强 | 受克 | 实际好,但感到焦虑 | +| 弱 | 强 | 看似好,实际有问题 | +| 强 | 强 | 内外一致,清晰 | +| 弱 | 弱 | 实际和感知都有问题 | + +**Bhava Pada:** 每个宫都有 Arudha(Pada),用该宫主星替代上升主星,算法相同。 + +### 3.2 Trisphuta(三重合点) + +**公式:** +``` +Trisphuta = 太阳经度 + 月亮经度 + 上升经度 (若≥360°则减360°) +``` + +**Prasna Marga 修正版(更精确):** +``` +Trisphuta = Lagna + 月亮 + Gulika +``` + +| 落位 | 含义 | +|------|------| +| 吉星星座/宫位 | 正面流动 | +| 被凶星折磨 | 内在冲突,健康问题 | +| 6/8/12 宫 | 苦难、疾病、隐藏挣扎 | +| 木星联系 | 保护与智慧 | + +### 3.3 五大 Sphuta 组合(Prasna Marga 第17-18颂) + +| 名称 | 公式 | 用途 | +|------|------|------| +| **Trisphuta** | Lagna + 月亮 + Gulika | 三因子 | +| **Catusphuta** | Trisphuta + 太阳 | 四因子 | +| **Pancasphuta** | Catusphuta + Rahu | 五因子终极 | + +**示例:** Lagna 43°9' + 月亮 18°29' + Gulika 64°26' = **126°4'** (Trisphuta) + +### 3.4 Prana / Deha / Mrityu Sphuta + +| Sphuta | 含义 | 公式 | +|--------|------|------| +| **Prana** | 生命之息 | (Lagna × 5) + Gulika | +| **Deha** | 身体 | (月亮 × 8) + Gulika | +| **Mrityu** | 死亡指标 | (Gulika × 7) + 太阳 | + +**判断:** Prana + Deha > Mrityu → 寿命长;Prana + Deha < Mrityu → 危险 + +**基于时间的替代法:** `Y = (提问 Ghatika × 35) ÷ 日长` + +| 星期 | Mrityu (Y+) | Kala (Y−) | +|------|---|---| +| 日 | +30° | −30° | +| 一 | +300° | −300° | +| 二 | +75° | −75° | +| 三 | +155° | −155° | +| 四 | +120° | −120° | +| 五 | +210° | −210° | +| 六 | +255° | −255° | + +### 3.5 Gulika(古利卡) + +**概念:** 土星的暗影子行星,与业力相关。 + +**计算:** 白昼(或夜晚)均分8份 → 土星份额结束时的上升经度 = Gulika + +| 星期 | 白天(日出后Ghatika) | 夜间(日落后Ghatika) | +|------|---|---| +| 日 | 26 | 10 | +| 一 | 22 | 6 | +| 二 | 18 | 2 | +| 三 | 14 | 26 | +| 四 | 10 | 22 | +| 五 | 6 | 18 | +| 六 | 2 | 14 | + +> 若实际日长 ≠ 30 Ghatika,按比例调整。1 Ghatika = 24分钟。 + +### 3.6 Chor Graha(盗贼行星——失物专用) + +| 宫位 | 代表 | +|------|------| +| 2宫 | 失物本身 | +| 4宫 | 位置/安全 | +| 7宫 | **窃贼** | +| 8宫 | 隐藏 | +| 11宫 | **恢复** | + +**窃贼识别:** + +| 条件 | 判断 | +|------|------| +| 7宫主凶星 + 联系Lagna | 熟人/附近人 | +| 7宫主在 Trikasthana(6,8,12) | 隐秘/远方人 | +| 7宫主在 Kendra(1,4,7,10) | 已知/附近人 | +| 7宫凶星 | 有预谋盗窃 | +| 7宫吉星 | 意外/无意拿走 | + +**物品行星对应:** 水星=文件/手机、金星=珠宝、月亮=个人物品、火星=工具/车辆、木星=书籍/黄金、土星=旧物/家具、Rahu=欺诈/网络、Ketu=疏忽遗失 + +**方向(月亮或指标星星座元素):** 火象→东、土象→南、风象→西、水象→北 + +### 3.7 Sneha / Viraha 组合 + +- **Sneha(友善):** 征象星互相友好星座/相位 → 有利 +- **Viraha(敌对):** 征象星互相敌对星座/无相位 → 不利 + +### 3.8 Arudha Sphuta + +``` +Arudha Sphuta = Arudha Rashi + Lagna的度数(仅度数) +``` + +### 3.9 Pranapada(替代计算) + +1. 提问 Ghatika × 120 ÷ 日长 + 太阳经度 +2. 调整:固定星座−120°、双体星座+120°、本位星座不变 + +### 3.10 Mandi vs Gulika + +| 学派 | 观点 | +|------|------| +| 南印度(喀拉拉) | 更重视 **Mandi**(Gulika 时段中点的上升度数) | +| 北印度 | 更重视 **Gulika**(时段端点的上升度数) | +| Prasna Marga | 视二者为同一点 | + +--- + +## 4. 征象星识别体系 + +| 角色 | 征象星 | +|------|--------| +| **提问者** | ① 上升主星 ② 月亮(共同征象星) | +| **所问事物** | 对应宫位的主星 + 自然 Karaka | + +**自然 Karaka:** 太阳=权威/父亲、月亮=母亲/心智、火星=兄弟/房产、水星=沟通/商业、木星=智慧/子女/丈夫(女盘)、金星=婚姻/妻子(男盘)、土星=长寿/延迟、Rahu=执念/海外、Ketu=超脱/损失 + +**行星特殊状态 Prashna 解读:** + +| 状态 | Prashna 含义 | +|------|-------------| +| 逆行 | 延迟、重返、重新考虑 | +| 燃烧 | 混乱、行星功能减弱 | +| 落陷 | 脆弱/失败(除非 Neecha Bhanga) | + +--- + +## 5. 十步断卦框架 + +| 步骤 | 操作 | +|------|------| +| **1** | 评估星盘活力(上升+月亮强弱) | +| **2** | 对比 Lagna vs Arudha Lagna(真实vs感知) | +| **3** | 检验相关宫位(吉星/凶星影响) | +| **4** | 比较征象星(提问者 vs 所问事物的力量对比) | +| **5** | 检查 Tajika Yoga(Ithasala/Ishrafa/Nakta/Mani) | +| **6** | 计算 Trisphuta/Sphuta 组合(综合能量) | +| **7** | 排查阻碍(燃烧/煞星阻隔/落陷/月亮空亡) | +| **8** | 权衡吉凶证词(清点正负因素) | +| **9** | 时间判断(度数差→时间;本位=短,固定=长) | +| **10** | 大运/过境辅助验证 | + +--- + +## 6. 问题类型专题 + +### 6.1 事业/工作 +- **宫位:** 10宫(事业)、6宫(日常工作)、11宫(收益) +- **征象星:** 10宫主 + 太阳 +- **成功:** 上升主与10宫主 Ithasala + 木星相位10宫 +- **失败:** 土星/Rahu 影响10宫 + Ishrafa + +### 6.2 婚姻/关系 +- **宫位:** 7宫(伴侣)、5宫(爱情) +- **征象星:** 7宫主 + 金星 + 木星(女盘丈夫) +- **和谐:** 金星强旺 + 7宫主与上升主 Ithasala + +### 6.3 财务/投资 +- **宫位:** 2宫(积蓄)、11宫(收益) +- **征象星:** 2宫主 + 11宫主 + 木星 +- **有利:** 木星强 + 2/11宫受吉星影响 + +### 6.4 健康/疾病 +- **宫位:** 1宫(身体)、6宫(疾病)、8宫(危险) +- **好转:** 强上升主 + 6宫主弱 +- **恶化:** 参考 Mrityu Chakra(§9) + +### 6.5 遗失物品/盗窃 +- **宫位:** 2宫(物品)、4宫(位置)、7宫(窃贼)、11宫(恢复) +- **找回指标:** 11宫主相位 Lagna/2宫;月亮强旺;Ithasala +- **方向:** 按指标星星座元素(火=东、土=南、风=西、水=北) +- **操作流程:** 记录时刻→铸盘→定指标星→分析位置→评估找回概率→方向搜索 + +### 6.6 旅行/出国 +- **宫位:** 3宫(短途)、9宫(长途)、12宫(海外) +- **征象星:** 9宫主 + 木星 + +### 6.7 诉讼/纠纷 +- **宫位:** 6宫(诉讼)、7宫(对手) +- **胜诉:** 上升主星力量 > 7宫主 + +### 6.8 子女 +- **宫位:** 5宫(子女)、9宫(福气) +- **征象星:** 5宫主 + 木星 + +--- + +## 7. 35 Sahams 敏感点 + +> 来源:B.V. Raman《Varshaphala》第8章 + +### 7.1 30° 修正规则 + +> 计算后,若上升点不在被减数和减数之间 → **加30°**。夜间出生互换减数和被减数(标注"日夜相同"的除外)。 + +### 7.2 最可靠的 5 个 Saham(Raman 推荐) + +| Saham | 用途 | 公式(白天) | +|-------|------|-------------| +| **Punya** | 福德 | 月亮 − 太阳 + 上升 | +| **Putra** | 子女 | 木星 − 月亮 + 上升 | +| **Vivaha** | 婚姻 | 金星 − 土星 + 上升 | +| **Roga** | 疾病 | 上升 − 月亮 + 上升 | +| **Mrityu** | 死亡 | 8宫宫头 − 月亮 + 上升 | + +### 7.3 完整 35 Saham 列表 + +**通用公式:** `Saham = 被减数 − 减数 + 上升点` + +#### 个人与精神(9个) + +| # | Saham | 含义 | 公式 | +|---|-------|------|------| +| 1 | Punya | 福德 | 月亮−太阳+上升 | +| 2 | Vidya | 学业 | 太阳−月亮+上升 | +| 3 | Yasa | 名声 | 木星−Punya+上升 | +| 5 | Mahatmya | 伟大 | Punya−火星+上升 | +| 6 | Asha | 愿望 | 土星−火星+上升 | +| 7 | Samartha | 能力 | 火星−上升主+上升 | +| 9 | Gaurava | 尊重 | 木星−月亮+太阳 | +| 28 | Sraddha | 虔诚 | 金星−火星+上升 | +| 29 | Preeti | 爱 | Sastra−Punya+上升 | + +#### 家庭与关系(8个) + +| # | Saham | 含义 | 公式 | 备注 | +|---|-------|------|------|------| +| 4 | Mitra | 朋友 | 木星−Punya+金星 | | +| 8 | Bhratru | 兄弟 | 木星−土星+上升 | ⭐日夜相同 | +| 10 | Pitru | 父亲 | 土星−太阳+上升 | | +| 12 | Matru | 母亲 | 月亮−金星+上升 | | +| 13 | Putra | 子女 | 木星−月亮+上升 | | +| 19 | Bandhu | 亲属 | 水星−月亮+上升 | | +| 23 | Paradara | 婚外情 | 金星−太阳+上升 | | +| 26 | Vivaha | 婚姻 | 金星−土星+上升 | | + +#### 事业与财富(6个) + +| # | Saham | 含义 | 公式 | 备注 | +|---|-------|------|------|------| +| 11 | Raja | 权力 | 土星−太阳+上升 | | +| 15 | Karma | 职业 | 火星−水星+上升 | | +| 22 | Artha | 财富 | 2宫头−2宫主+上升 | | +| 24 | Vanik | 贸易 | 月亮−水星+上升 | | +| 25 | Karyasiddhi | 事业成功 | 土星−太阳+太阳星座主 | | +| 31 | Vyapara | 商业 | 火星−土星+上升 | ⭐日夜相同 | + +#### 健康、危险与死亡(5个) + +| # | Saham | 含义 | 公式 | +|---|-------|------|------| +| 14 | Jeeva | 生计 | 土星−木星+上升 | +| 16 | Roga | 疾病 | 上升−月亮+上升 | +| 20 | Mrityu | 死亡 | 8宫头−月亮+上升 | +| 30 | Jadya | 慢性病 | 火星−土星+水星 | +| 35 | Apamrityu | 意外死亡 | 8宫头−火星+上升 | + +#### 其他(7个) + +| # | Saham | 含义 | 公式 | +|---|-------|------|------| +| 17 | Kali | 冲突 | 木星−火星+上升 | +| 18 | Sastra | 学问 | 木星−土星+水星 | +| 21 | Paradesa | 出国 | 9宫头−9宫主+上升 | +| 27 | Santapa | 悲伤 | 土星−月亮+6宫头 | +| 32 | Satru | 敌人 | 火星−土星+上升 | +| 33 | Jalapathana | 航行 | 巨蟹15°−土星+上升 | +| 34 | Bandhana | 监禁 | Punya−土星+上升 | + +--- + +## 8. Tajika Yoga 快速参考 + +> 完整体系见 `tajika-yoga-complete-guide.md` + +| Yoga | 含义 | Prashna 用途 | +|------|------|-------------| +| **Ithasala** | 入相位 | ✅ 成功 | +| **Ishrafa** | 出相位 | ❌ 机会已过 | +| **Nakta** | 光线传递 | 🔄 中间人成功 | +| **Yamaya** | 慢速传递 | 🔄 延迟但成功 | +| **Manahoo** | 煞星阻隔 | ⛔ 障碍 | +| **Kamboola** | 月亮参与 | 🌙 情绪加强 | + +**Ithasala 要点:** 快速行星趋近慢速行星;容许度按行星不同(月12°/日15°/火8°/木金12°/水7°/土9°) + +--- + +## 9. 死亡轮(Mrityu Chakra) + +> ⚠️ 仅用于重病/生命危险类 Prashna + +### 计算流程 + +1. 提问时间 → Vighatika → **÷ 15** = Mrityu Rashi 经度 +2. 求太阳、月亮、Gulika 的 Navamsa 位置 +3. 组合: + - Mrityu 太阳 = 太阳 Navamsa + Mrityu Rashi + - Mrityu 月亮 = 月亮 Navamsa + Mrityu Rashi + - Mrityu Gulika = Gulika Navamsa **−** Mrityu Rashi + +### 断命规则 + +| 条件 | 结论 | +|------|------| +| Mrityu Gulika 合相 Mrityu 太阳 | ⚠️ **确定死亡** | +| Mrityu Gulika 合相 Mrityu 月亮 | 🔶 **极大危险** | +| Mrityu Gulika 独立 | ✅ **病情好转** | + +--- + +## 10. 公式速查表 + +| # | 名称 | 公式 | 用途 | +|---|------|------|------| +| 1 | Arudha Lagna | 从上升数到主星N → 从主星数N | 真实vs表象 | +| 2 | Trisphuta | Lagna + 月亮 + Gulika | 三因子综合 | +| 3 | Catusphuta | Trisphuta + 太阳 | 四因子综合 | +| 4 | Pancasphuta | Catusphuta + Rahu | 五因子终极 | +| 5 | Prana Sphuta | (Lagna × 5) + Gulika | 生命之息 | +| 6 | Deha Sphuta | (月亮 × 8) + Gulika | 身体 | +| 7 | Mrityu Sphuta | (Gulika × 7) + 太阳 | 死亡指标 | +| 8 | Mrityu Sphuta(时间) | (Ghatika×35÷日长) + 星期附加值 | 基于时间 | +| 9 | Kala Sphuta | (Ghatika×35÷日长) − 星期附加值 | 时间指标 | +| 10 | Mrityu Rashi | Vighatika ÷ 15 | 死亡星座 | +| 11 | Arudha Sphuta | Arudha Rashi + Lagna度数 | 仪式-数学桥 | +| 12 | Gulika | 土星时段末的上升经度 | 暗影子星 | +| 13 | Pranapada | (Ghatika×120÷日长)+太阳±调整 | 生命点替代 | +| 14 | Saham通用 | 被减数 − 减数 + 上升 | 35敏感点 | +| 15 | Kunda验证 | Lagna(弧分)×81 mod 12 | Lagna正确性 | + +--- + +## 附录:与现有 Skill 的关系 + +| 模块 | 文件 | Prashna 中的角色 | +|------|------|-----------------| +| KP Prashna (1-249法) | `kp-astrology-complete-system.md` | 快速是/否判断 | +| KP Ruling Planets | `kp-practical-event-timing.md` | 5因子活跃行星期 | +| Tajika Yoga | `tajika-yoga-complete-guide.md` | Ithasala 等是/否判断 | +| Tajika 年运盘 | `scripts/tajika.py` | Muntha/YearLord 等 | +| Dasha 系统 | `alternative-dasha-systems.md` | 大运辅助验证 | diff --git a/references/single-event-inquiry-protocol.md b/references/single-event-inquiry-protocol.md new file mode 100644 index 00000000..12f55e20 --- /dev/null +++ b/references/single-event-inquiry-protocol.md @@ -0,0 +1,175 @@ +# Prashna 单事件问事协议模板 + +> 版本: v1.0 | 2026-04-25 +> 用途:当用户提出一个具体问题时,AI按此模板执行 Prashna 分析 + +--- + +## 输入信息收集 + +当用户提出具体问题时,记录以下信息: + +| 字段 | 必需 | 说明 | +|------|------|------| +| **问题原文** | ✅ | 用户原始提问措辞(影响宫位选择) | +| **提问时间** | ✅ | 问题完全成型的精确时刻 | +| **提问地点** | ✅ | 经纬度 | +| **问题类型** | ✅ | 事业/婚姻/财务/健康/失物/旅行/诉讼/子女 | +| **出生信息** | ❌ | 若有,用于大运/过境辅助验证 | + +--- + +## 执行流程 + +### 阶段一:铸造星盘 + +```bash +# 调用引擎 +python3 scripts/jyotish_engine.py prashna \ + --datetime "YYYY-MM-DD HH:MM" \ + --lat XX.XX --lon XX.XX --mode chart +``` + +### 阶段二:十步断卦(AI执行) + +按以下十步逐步分析,每步输出结论: + +#### Step 1: 星盘活力评估 +- [ ] 上升星座、上升主星位置和力量 +- [ ] 月亮位置和状态 +- [ ] 结论:星盘基础强弱 + +#### Step 2: Arudha Lagna 对比 +- [ ] 计算AL +- [ ] 对比 Lagna(真实) vs AL(感知) +- [ ] 结论:认知偏差程度 + +#### Step 3: 相关宫位分析 +- [ ] 确定问题对应的宫位(见下表) +- [ ] 检查宫内行星 +- [ ] 检查宫主星位置和状态 +- [ ] 结论:该领域有利/不利 + +| 问题类型 | 主宫 | 辅助宫 | 自然Karakā | +|---------|------|--------|-----------| +| 事业 | 10 | 6, 11 | 太阳 | +| 婚姻 | 7 | 5, 2 | 金星/木星(女盘) | +| 财务 | 2, 11 | 9 | 木星 | +| 健康 | 1, 6 | 8 | — | +| 失物 | 2, 4 | 7, 11 | — | +| 旅行 | 3, 9 | 12 | 木星 | +| 诉讼 | 6, 7 | 12 | — | +| 子女 | 5 | 9 | 木星 | + +#### Step 4: 征象星力量对比 +- [ ] 提问者征象星 = 上升主星 + 月亮 +- [ ] 所问事物征象星 = 对应宫主星 + 自然Karakā +- [ ] 力量对比:谁更强? +- [ ] 结论:征象星偏向何方 + +#### Step 5: Tajika Yoga 检查 +- [ ] 两个征象星之间是否有 Ithasala(入相位)? +- [ ] 是否有 Ishrafa(出相位)? +- [ ] 是否有 Nakta(中间人传递)? +- [ ] 是否有 Mani(煞星阻隔)? +- [ ] 结论:Yoga 支持成功/失败 + +#### Step 6: Sphuta 组合 +- [ ] Trisphuta 落在哪个星座/宫位? +- [ ] 是否与凶宫/凶星关联? +- [ ] 结论:综合能量走向 + +#### Step 7: 阻碍排查 +- [ ] 征象星是否燃烧? +- [ ] 征象星是否落陷? +- [ ] 月亮是否空亡? +- [ ] 是否有 Rahu/Ketu 干扰? +- [ ] 结论:阻碍因素列表 + +#### Step 8: 证词权衡 +- [ ] 清点有利证词数量 +- [ ] 清点不利证词数量 +- [ ] 结论:多数方向 + +#### Step 9: 时间判断 +- [ ] 入相位度数差 → 时间单位 +- [ ] 本位/固定/双体星座 → 快/慢/中 +- [ ] 结论:预计应期范围 + +#### Step 10: 大运辅助(如有出生数据) +- [ ] 当前大运主星 +- [ ] Prashna 指示是否与大运主题一致 +- [ ] 结论:交叉验证结果 + +### 阶段三:综合结论 + +输出格式: + +``` +## Prashna 问事占星结论 + +**问题:** [用户原始提问] +**提问时刻:** YYYY-MM-DD HH:MM @ 地点 + +### 核心结论 +[一句话明确回答:是/否/时机/方向] + +### 分析依据 +1. **征象星分析**:[Step 4 结论] +2. **Tajika Yoga**:[Step 5 结论] +3. **宫位状态**:[Step 3 结论] +4. **Sphuta 组合**:[Step 6 结论] +5. **阻碍因素**:[Step 7 结论] + +### 时间判断 +[Step 9 结论:具体时间范围] + +### 注意事项 +[Step 10 交叉验证 + Kunda 验证结果] + +### 综合评估 +| 维度 | 评估 | +|------|------| +| 星盘活力 | 强/中/弱 | +| 成功概率 | 高/中/低 | +| 时间范围 | [范围] | +| 关键阻碍 | [阻碍] | +``` + +--- + +## 特殊场景协议 + +### 失物查询专用 + +额外输出: +1. 物品指标星及位置 +2. 窃贼分析(已知/未知) +3. 方向指引(火=东、土=南、风=西、水=北) +4. 找回概率评估 +5. 建议搜索区域 + +### 健康查询专用 + +额外输出: +1. Prana/Deha/Mrityu Sphuta 判断 +2. 若涉及重病:Mrityu Chakra 分析 +3. 不输出确定性的死亡判断,只输出"风险等级" + +### 是非判断专用 + +使用 KP Prashna(1-249法)作为补充: +1. 用户报数(1-249) +2. 确定上升点 Sub-Lord +3. 检查相关宫 Cuspal Sub-Lord +4. 给出 是/否/延迟 判断 + +--- + +## 原则提醒 + +1. **问题必须真诚** — Prashna shakti 仅在真实需求时激活 +2. **同一问题不重复问** — 重复提问使第一个盘失效 +3. **不替代专业建议** — 健康/法律等问题需声明"仅供参考" +4. **措辞影响结果** — 始终记录原始问题 +5. **综合多方证词** — 不依赖单一因素 diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 6cfaae9e..1d45c787 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -1474,6 +1474,56 @@ def cmd_full_reading(args): return report +# ============================================================================ +# 23. Prashna 问事占星 (v3.9新增) +# ============================================================================ +def cmd_prashna(args): + """Prashna 问事占星:基于提问时刻的即时星盘分析""" + try: + from prashna import cast_prashna, calc_arudha, calc_sphutas, calc_life_sphutas, calc_sahams, analyze_lost_item, kunda_verify, calc_gulika_simple + except ImportError: + # 尝试从同目录导入 + import importlib.util, os + spec = importlib.util.spec_from_file_location("prashna", os.path.join(os.path.dirname(__file__), "prashna.py")) + prashna_mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(prashna_mod) + cast_prashna = prashna_mod.cast_prashna + calc_arudha = prashna_mod.calc_arudha + calc_sphutas = prashna_mod.calc_sphutas + calc_life_sphutas = prashna_mod.calc_life_sphutas + calc_sahams = prashna_mod.calc_sahams + analyze_lost_item = prashna_mod.analyze_lost_item + kunda_verify = prashna_mod.kunda_verify + calc_gulika_simple = prashna_mod.calc_gulika_simple + + if args.mode == 'chart': + return cast_prashna(args.datetime, args.lat, args.lon) + + # 其他模式需要先铸盘获取行星位置 + chart = cast_prashna(args.datetime, args.lat, args.lon) + if 'error' in chart: + return chart + + asc_lon = chart['ascendant']['lon'] + p_lons = {n: d['lon'] for n, d in chart['planets'].items()} + + if args.mode == 'arudha': + return {'arudha_lagna': calc_arudha(asc_lon, p_lons), + 'ascendant': chart['ascendant']} + elif args.mode == 'sphutas': + return calc_sphutas(p_lons, 0) + elif args.mode == 'sahams': + return calc_sahams(p_lons, asc_lon) + elif args.mode == 'lost-item': + return analyze_lost_item(p_lons, asc_lon) + elif args.mode == 'life': + return calc_life_sphutas(asc_lon, p_lons.get('Moon',0), p_lons.get('Sun',0), 0) + elif args.mode == 'kunda': + return kunda_verify(asc_lon) + else: + return cast_prashna(args.datetime, args.lat, args.lon) + + # ============================================================================ # CLI入口 # ============================================================================ @@ -1608,6 +1658,13 @@ def main(): _add_chart_args(p) p.add_argument('--age', type=int, default=None, help='当前年龄(不提供则自动计算)') + # 23. prashna (v3.9新增) + p = sub.add_parser('prashna', help='Prashna问事占星(提问时刻星盘+Arudha+Sphuta+Sahams)') + p.add_argument('--datetime', required=True, help='提问时间 YYYY-MM-DD HH:MM') + p.add_argument('--lat', type=float, required=True, help='纬度') + p.add_argument('--lon', type=float, required=True, help='经度') + p.add_argument('--mode', default='chart', choices=['chart','arudha','sphutas','sahams','lost-item','life','kunda'], help='分析模式') + args = parser.parse_args() if not args.command: parser.print_help(); sys.exit(1) @@ -1618,7 +1675,7 @@ def main(): 'validate': cmd_validate, 'audit': cmd_audit, 'report': cmd_report, 'varga-full': cmd_varga_full, 'aspects': cmd_aspects, 'jaimini': cmd_jaimini, 'nakshatra-adv': cmd_nakshatra_adv, 'argala': cmd_argala, 'tajika': cmd_tajika, - 'synastry': cmd_synastry, 'full-reading': cmd_full_reading} + 'synastry': cmd_synastry, 'full-reading': cmd_full_reading, 'prashna': cmd_prashna} result = cmds[args.command](args) output_json(result) diff --git a/scripts/prashna.py b/scripts/prashna.py new file mode 100644 index 00000000..1530f550 --- /dev/null +++ b/scripts/prashna.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python3 +""" +Prashna Shastra(问事占星)计算引擎 v1.0 +Jyotish Vedic Astrology Skill - Prashna Module +依赖: pyswisseph +""" + +import math, json, argparse +from datetime import datetime, timedelta + +SIGN_NAMES = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo', + 'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces'] +SIGN_CN = ['白羊座','金牛座','双子座','巨蟹座','狮子座','处女座', + '天秤座','天蝎座','射手座','摩羯座','水瓶座','双鱼座'] +SIGN_LORDS = ['Mars','Venus','Mercury','Moon','Sun','Mercury', + 'Venus','Mars','Jupiter','Saturn','Saturn','Jupiter'] +PLANET_CN = {'Sun':'太阳','Moon':'月亮','Mars':'火星','Mercury':'水星', + 'Jupiter':'木星','Venus':'金星','Saturn':'土星','Rahu':'罗睺','Ketu':'计都'} + +GULIKA_DAY = {'Sunday':26,'Monday':22,'Tuesday':18,'Wednesday':14,'Thursday':10,'Friday':6,'Saturday':2} +GULIKA_NIGHT = {'Sunday':10,'Monday':6,'Tuesday':2,'Wednesday':26,'Thursday':22,'Friday':18,'Saturday':14} + +SAHAM_DEFS = { + 'Punya':('福德','Moon','Sun','Asc'), 'Vidya':('学业','Sun','Moon','Asc'), + 'Bhratru':('兄弟','Jupiter','Saturn','Asc'), 'Pitru':('父亲','Saturn','Sun','Asc'), + 'Putra':('子女','Jupiter','Moon','Asc'), 'Vivaha':('婚姻','Venus','Saturn','Asc'), + 'Karma':('职业','Mars','Mercury','Asc'), 'Roga':('疾病','Asc','Moon','Asc'), + 'Raja':('权力','Saturn','Sun','Asc'), 'Asha':('愿望','Saturn','Mars','Asc'), + 'Matru':('母亲','Moon','Venus','Asc'), 'Jeeva':('生计','Saturn','Jupiter','Asc'), + 'Kali':('冲突','Jupiter','Mars','Asc'), 'Satru':('敌人','Mars','Saturn','Asc'), + 'Paradesa':('出国','H9','H9Lord','Asc'), 'Mrityu':('死亡','H8','Moon','Asc'), + 'Vidya':('学业','Sun','Moon','Asc'), 'Artha':('财富','H2','H2Lord','Asc'), + 'Vyapara':('商业','Mars','Saturn','Asc'), 'Bandhana':('监禁','Punya','Saturn','Asc'), +} + +def sign_of(lon): return int((lon % 360) / 30) +def norm(lon): return lon % 360 +def lon_cn(lon): + s, d = sign_of(lon), lon % 30 + return f"{SIGN_CN[s]} {int(d)}°{int((d%1)*60)}'" + +# ── Arudha Lagna ── +def calc_arudha(asc_lon, planet_lons): + asc_s = sign_of(asc_lon) + lord = SIGN_LORDS[asc_s] + lord_lon = planet_lons.get(lord, 0) + lord_s = sign_of(lord_lon) + count = ((lord_s - asc_s) % 12) or 12 + al_s = (lord_s + count) % 12 + if al_s == asc_s or al_s == (asc_s + 6) % 12: + al_s = (al_s + 10) % 12 + al_lon = al_s * 30 + (asc_lon % 30) + return {'longitude': norm(al_lon), 'sign_cn': SIGN_CN[al_s], 'lord': lord} + +# ── Gulika ── +def calc_gulika_simple(dt_str): + dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M") + dn = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'][dt.weekday()] + is_day = 6 <= dt.hour < 18 + gh = GULIKA_DAY.get(dn, 14) if is_day else GULIKA_NIGHT.get(dn, 14) + return {'ghatika': gh, 'minutes': gh*24, 'day': dn, 'is_daytime': is_day} + +# ── Sphuta 组合 ── +def calc_sphutas(planet_lons, gulika_lon=0): + sun, moon = planet_lons.get('Sun',0), planet_lons.get('Moon',0) + rahu = planet_lons.get('Rahu',0) + tri = norm(sun + moon + gulika_lon) + catu = norm(tri + sun) + pancha = norm(catu + rahu) + return {'trisphuta': {'lon': tri, 'cn': lon_cn(tri)}, + 'catusphuta': {'lon': catu, 'cn': lon_cn(catu)}, + 'pancasphuta': {'lon': pancha, 'cn': lon_cn(pancha)}} + +# ── Prana/Deha/Mrityu ── +def calc_life_sphutas(asc_lon, moon_lon, sun_lon, gulika_lon): + prana = norm(asc_lon * 5 + gulika_lon) + deha = norm(moon_lon * 8 + gulika_lon) + mrityu = norm(gulika_lon * 7 + sun_lon) + danger = norm(prana + deha) < mrityu + return {'prana_cn': lon_cn(prana), 'deha_cn': lon_cn(deha), 'mrityu_cn': lon_cn(mrityu), + 'judgment': '⚠️ 生命能量<死亡指标' if danger else '✅ 生命能量>死亡指标'} + +# ── Sahams ── +def calc_sahams(planet_lons, asc_lon): + asc_s = sign_of(asc_lon) + vals = dict(planet_lons) + vals['Asc'] = asc_lon + vals['AscLord'] = planet_lons.get(SIGN_LORDS[asc_s], 0) + vals['H2'] = (asc_s+1)%12*30+15; vals['H2Lord'] = planet_lons.get(SIGN_LORDS[(asc_s+1)%12], 0) + vals['H8'] = (asc_s+7)%12*30+15; vals['H9'] = (asc_s+8)%12*30+15 + vals['H9Lord'] = planet_lons.get(SIGN_LORDS[(asc_s+8)%12], 0) + + results = {} + for name, (cn, m, s, b) in SAHAM_DEFS.items(): + mv = vals.get(m, 0); sv = vals.get(s, 0); bv = vals.get(b, asc_lon) + if name == 'Punya': + pass # Punya always computable + elif isinstance(mv, str) or isinstance(sv, str): + continue + try: + v = norm(mv - sv + bv) + results[name] = {'cn': cn, 'longitude': round(v,4), 'sign_cn': SIGN_CN[sign_of(v)]} + except: pass + return results + +# ── Kunda 验证 ── +def kunda_verify(asc_lon): + mins = int(asc_lon * 60) + idx = (mins * 81) % 12 + naks = ['Ashwini','Bharani','Krittika','Rohini','Mrigashira','Ardra', + 'Punarvasu','Pushya','Ashlesha','Magha','P.Phalguni','U.Phalguni'] + return {'derived_nakshatra': naks[idx] if idx < len(naks) else '?', 'index': idx} + +# ── 失物分析 ── +def analyze_lost_item(planet_lons, asc_lon): + asc_s = sign_of(asc_lon) + h2_lord = SIGN_LORDS[(asc_s+1)%12] + h7_lord = SIGN_LORDS[(asc_s+6)%12] + h11_lord = SIGN_LORDS[(asc_s+10)%12] + h2_lon = planet_lons.get(h2_lord, 0) + h7_lon = planet_lons.get(h7_lord, 0) + h2_elem = (asc_s+1) % 4 + dirs = {0:'东方(火象)', 1:'南方(土象)', 2:'西方(风象)', 3:'北方(水象)'} + h7_house = (sign_of(h7_lon) - asc_s) % 12 + 1 + return { + 'item_lord': h2_lord, 'item_cn': PLANET_CN.get(h2_lord,''), + 'direction': dirs.get(h2_elem, '未知'), + 'thief_lord': h7_lord, 'thief_cn': PLANET_CN.get(h7_lord,''), + 'thief_in_house': h7_house, + 'thief_type': '已知/附近' if h7_house in [1,4,7,10] else '隐秘/远方' if h7_house in [6,8,12] else '待定', + 'recovery_lord': h11_lord, 'recovery_cn': PLANET_CN.get(h11_lord,'') + } + +# ── 完整 Prashna 星盘 ── +def cast_prashna(dt_str, lat, lon): + try: + import swisseph as swe + swe.set_sid_mode(swe.SIDM_LAHIRI) + except ImportError: + return {'error': '需要 pip install pyswisseph'} + + dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M") + jd = swe.julday(dt.year, dt.month, dt.day, dt.hour + dt.minute/60.0) + cusps, ascmc = swe.houses_ex(jd, lat, lon, b'W', swe.FLG_SIDEREAL) + asc_lon = ascmc[0] + + p_lons = {} + se_map = {0:'Sun',1:'Moon',2:'Mars',3:'Mercury',4:'Jupiter',5:'Venus',6:'Saturn'} + for sid, name in se_map.items(): + r = swe.calc_ut(jd, sid, swe.FLG_SIDEREAL) + p_lons[name] = r[0][0] + rahu = swe.calc_ut(jd, 8, swe.FLG_SIDEREAL)[0][0] + p_lons['Rahu'] = rahu; p_lons['Ketu'] = norm(rahu + 180) + + arudha = calc_arudha(asc_lon, p_lons) + gulika = calc_gulika_simple(dt_str) + sphutas = calc_sphutas(p_lons, 0) # 简化无精确Gulika经度 + life = calc_life_sphutas(asc_lon, p_lons['Moon'], p_lons['Sun'], 0) + sahams = calc_sahams(p_lons, asc_lon) + kunda = kunda_verify(asc_lon) + + return { + 'time': dt_str, 'lat': lat, 'lon': lon, + 'ascendant': {'lon': round(asc_lon,4), 'cn': lon_cn(asc_lon), + 'lord': SIGN_LORDS[sign_of(asc_lon)]}, + 'planets': {n: {'lon': round(l,4), 'cn': lon_cn(l)} for n,l in p_lons.items()}, + 'arudha_lagna': arudha, + 'sphutas': sphutas, + 'life_sphutas': life, + 'sahams': sahams, + 'kunda': kunda, + 'gulika_info': gulika + } + +# ── CLI ── +def main(): + p = argparse.ArgumentParser(description='Prashna Shastra Engine') + sub = p.add_subparsers(dest='cmd') + + # chart + ch = sub.add_parser('chart', help='铸造Prashna星盘') + ch.add_argument('--datetime', required=True, help='提问时间 YYYY-MM-DD HH:MM') + ch.add_argument('--lat', type=float, required=True) + ch.add_argument('--lon', type=float, required=True) + + # arudha + ar = sub.add_parser('arudha', help='计算Arudha Lagna') + ar.add_argument('--asc-lon', type=float, required=True) + ar.add_argument('--planet-lons', required=True, help='JSON: {"Sun":123.4,...}') + + # sphutas + sp = sub.add_parser('sphutas', help='计算Sphuta组合') + sp.add_argument('--planet-lons', required=True, help='JSON') + sp.add_argument('--gulika-lon', type=float, default=0) + + # sahams + sa = sub.add_parser('sahams', help='计算Sahams') + sa.add_argument('--planet-lons', required=True, help='JSON') + sa.add_argument('--asc-lon', type=float, required=True) + + # lost-item + li = sub.add_parser('lost-item', help='失物查询') + li.add_argument('--planet-lons', required=True, help='JSON') + li.add_argument('--asc-lon', type=float, required=True) + + # life-sphutas + ls = sub.add_parser('life', help='生命Sphuta') + ls.add_argument('--asc-lon', type=float, required=True) + ls.add_argument('--moon-lon', type=float, required=True) + ls.add_argument('--sun-lon', type=float, required=True) + ls.add_argument('--gulika-lon', type=float, required=True) + + args = p.parse_args() + if args.cmd == 'chart': + print(json.dumps(cast_prashna(args.datetime, args.lat, args.lon), ensure_ascii=False, indent=2)) + elif args.cmd == 'arudha': + pl = json.loads(args.planet_lons) + print(json.dumps(calc_arudha(args.asc_lon, pl), ensure_ascii=False, indent=2)) + elif args.cmd == 'sphutas': + pl = json.loads(args.planet_lons) + print(json.dumps(calc_sphutas(pl, args.gulika_lon), ensure_ascii=False, indent=2)) + elif args.cmd == 'sahams': + pl = json.loads(args.planet_lons) + print(json.dumps(calc_sahams(pl, args.asc_lon), ensure_ascii=False, indent=2)) + elif args.cmd == 'lost-item': + pl = json.loads(args.planet_lons) + print(json.dumps(analyze_lost_item(pl, args.asc_lon), ensure_ascii=False, indent=2)) + elif args.cmd == 'life': + r = calc_life_sphutas(args.asc_lon, args.moon_lon, args.sun_lon, args.gulika_lon) + print(json.dumps(r, ensure_ascii=False, indent=2)) + else: + p.print_help() + +if __name__ == '__main__': + main()