v3.9.0: Prashna问事占星完整系统

- 新增 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能力表+触发词
This commit is contained in:
732642856
2026-04-25 22:36:52 +08:00
parent 97ed75e69e
commit 62abe08ece
5 changed files with 977 additions and 5 deletions
+48 -4
View File
@@ -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大新计算模块)
+461
View File
@@ -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` | 大运辅助验证 |
+175
View File
@@ -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. **综合多方证词** — 不依赖单一因素
+58 -1
View File
@@ -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)
+235
View File
@@ -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()