ziwei 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ziwei-0.1.0/.github/workflows/checks.yml +47 -0
- ziwei-0.1.0/.github/workflows/release.yml +177 -0
- ziwei-0.1.0/AGENTS.md +69 -0
- ziwei-0.1.0/LICENSE +21 -0
- ziwei-0.1.0/MANIFEST.in +6 -0
- ziwei-0.1.0/PKG-INFO +93 -0
- ziwei-0.1.0/README.md +70 -0
- ziwei-0.1.0/docs/api.md +208 -0
- ziwei-0.1.0/docs/architecture.md +130 -0
- ziwei-0.1.0/docs/birth.md +179 -0
- ziwei-0.1.0/docs/bureau.md +23 -0
- ziwei-0.1.0/docs/calendar.md +47 -0
- ziwei-0.1.0/docs/chart.md +152 -0
- ziwei-0.1.0/docs/conf.py +65 -0
- ziwei-0.1.0/docs/contributing.md +108 -0
- ziwei-0.1.0/docs/index.md +25 -0
- ziwei-0.1.0/docs/knowledge-reference.md +10 -0
- ziwei-0.1.0/docs/knowledge.md +143 -0
- ziwei-0.1.0/docs/palaces.md +40 -0
- ziwei-0.1.0/docs/python-stdlib.inv +7 -0
- ziwei-0.1.0/docs/releasing.md +98 -0
- ziwei-0.1.0/docs/resolver.md +54 -0
- ziwei-0.1.0/docs/sihua-decades.md +115 -0
- ziwei-0.1.0/docs/stars.md +111 -0
- ziwei-0.1.0/pyproject.toml +88 -0
- ziwei-0.1.0/setup.cfg +4 -0
- ziwei-0.1.0/src/ziwei/__init__.py +1 -0
- ziwei-0.1.0/src/ziwei/birth.py +253 -0
- ziwei-0.1.0/src/ziwei/bureau.py +54 -0
- ziwei-0.1.0/src/ziwei/calendar.py +305 -0
- ziwei-0.1.0/src/ziwei/chart.py +208 -0
- ziwei-0.1.0/src/ziwei/config.py +86 -0
- ziwei-0.1.0/src/ziwei/decades.py +112 -0
- ziwei-0.1.0/src/ziwei/ganzhi.py +289 -0
- ziwei-0.1.0/src/ziwei/knowledge/__init__.py +17 -0
- ziwei-0.1.0/src/ziwei/knowledge/catalog.py +232 -0
- ziwei-0.1.0/src/ziwei/knowledge/data.py +1452 -0
- ziwei-0.1.0/src/ziwei/knowledge/model.py +331 -0
- ziwei-0.1.0/src/ziwei/palaces.py +151 -0
- ziwei-0.1.0/src/ziwei/py.typed +0 -0
- ziwei-0.1.0/src/ziwei/render.py +64 -0
- ziwei-0.1.0/src/ziwei/resolver.py +171 -0
- ziwei-0.1.0/src/ziwei/serialization.py +409 -0
- ziwei-0.1.0/src/ziwei/sihua.py +155 -0
- ziwei-0.1.0/src/ziwei/stars.py +475 -0
- ziwei-0.1.0/src/ziwei/timezone.py +176 -0
- ziwei-0.1.0/src/ziwei.egg-info/PKG-INFO +93 -0
- ziwei-0.1.0/src/ziwei.egg-info/SOURCES.txt +83 -0
- ziwei-0.1.0/src/ziwei.egg-info/dependency_links.txt +1 -0
- ziwei-0.1.0/src/ziwei.egg-info/requires.txt +2 -0
- ziwei-0.1.0/src/ziwei.egg-info/top_level.txt +1 -0
- ziwei-0.1.0/tests/conftest.py +94 -0
- ziwei-0.1.0/tests/test_api_documents.py +116 -0
- ziwei-0.1.0/tests/test_birth.py +437 -0
- ziwei-0.1.0/tests/test_bureau.py +56 -0
- ziwei-0.1.0/tests/test_calendar.py +300 -0
- ziwei-0.1.0/tests/test_chart.py +488 -0
- ziwei-0.1.0/tests/test_checks.py +577 -0
- ziwei-0.1.0/tests/test_config.py +111 -0
- ziwei-0.1.0/tests/test_external_time_cases.py +165 -0
- ziwei-0.1.0/tests/test_ganzhi.py +143 -0
- ziwei-0.1.0/tests/test_inputs_optimized.py +169 -0
- ziwei-0.1.0/tests/test_installed_check.py +362 -0
- ziwei-0.1.0/tests/test_knowledge.py +702 -0
- ziwei-0.1.0/tests/test_knowledge_reference.py +297 -0
- ziwei-0.1.0/tests/test_palaces.py +115 -0
- ziwei-0.1.0/tests/test_release.py +278 -0
- ziwei-0.1.0/tests/test_render.py +75 -0
- ziwei-0.1.0/tests/test_resolver.py +484 -0
- ziwei-0.1.0/tests/test_serialization.py +397 -0
- ziwei-0.1.0/tests/test_sihua_decades.py +302 -0
- ziwei-0.1.0/tests/test_sihua_decades_knowledge.py +114 -0
- ziwei-0.1.0/tests/test_sihua_decades_resolver.py +155 -0
- ziwei-0.1.0/tests/test_stars.py +445 -0
- ziwei-0.1.0/tests/test_stars_knowledge.py +219 -0
- ziwei-0.1.0/tests/test_stars_resolver.py +302 -0
- ziwei-0.1.0/tests/test_timezone.py +309 -0
- ziwei-0.1.0/tests/test_workflow.py +418 -0
- ziwei-0.1.0/tools/artifacts.py +148 -0
- ziwei-0.1.0/tools/check.py +208 -0
- ziwei-0.1.0/tools/consumption.py +59 -0
- ziwei-0.1.0/tools/installed_check.py +272 -0
- ziwei-0.1.0/tools/knowledge_reference.py +313 -0
- ziwei-0.1.0/tools/release.py +176 -0
- ziwei-0.1.0/uv.lock +1486 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
quality:
|
|
12
|
+
name: quality (${{ matrix.os }}, ${{ matrix.python }})
|
|
13
|
+
runs-on: ${{ matrix.os }}
|
|
14
|
+
timeout-minutes: 15
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false
|
|
17
|
+
matrix:
|
|
18
|
+
include:
|
|
19
|
+
- os: ubuntu-latest
|
|
20
|
+
python: "3.11"
|
|
21
|
+
uv-checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2" # uv-x86_64-unknown-linux-gnu.tar.gz
|
|
22
|
+
- os: ubuntu-latest
|
|
23
|
+
python: "3.14"
|
|
24
|
+
uv-checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2" # uv-x86_64-unknown-linux-gnu.tar.gz
|
|
25
|
+
- os: ubuntu-24.04-arm
|
|
26
|
+
python: "3.14"
|
|
27
|
+
uv-checksum: "9bf43b4d1a07665bf64d4c4e710930b382321a785e0eb10aac07f46471f86a31" # uv-aarch64-unknown-linux-gnu.tar.gz
|
|
28
|
+
- os: macos-latest
|
|
29
|
+
python: "3.14"
|
|
30
|
+
uv-checksum: "5bb0e5fe008a773c3dbcb97ff79cd89e1241464fe9d2f986d52ad8f1b037bd62" # uv-aarch64-apple-darwin.tar.gz
|
|
31
|
+
- os: windows-latest
|
|
32
|
+
python: "3.14"
|
|
33
|
+
uv-checksum: "4c4d49d8738847d9b71ba319e49a5688c93eac0fe6204b1df24e98528dddf39a" # uv-x86_64-pc-windows-msvc.zip
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
36
|
+
with:
|
|
37
|
+
persist-credentials: false
|
|
38
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
39
|
+
with:
|
|
40
|
+
python-version: ${{ matrix.python }}
|
|
41
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
42
|
+
with:
|
|
43
|
+
version: "0.12.5"
|
|
44
|
+
checksum: ${{ matrix.uv-checksum }}
|
|
45
|
+
enable-cache: false
|
|
46
|
+
- run: uv sync --locked --python ${{ matrix.python }}
|
|
47
|
+
- run: uv run --locked python tools/check.py
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: Candidate version already committed on main
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
sha:
|
|
11
|
+
description: Full lowercase SHA of the latest main commit when dispatching
|
|
12
|
+
required: true
|
|
13
|
+
type: string
|
|
14
|
+
|
|
15
|
+
permissions: {}
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: ziwei-publish
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
build:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 15
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
env:
|
|
28
|
+
RELEASE_VERSION: ${{ inputs.version }}
|
|
29
|
+
RELEASE_SHA: ${{ inputs.sha }}
|
|
30
|
+
outputs:
|
|
31
|
+
version: ${{ steps.release.outputs.version }}
|
|
32
|
+
source_sha: ${{ steps.release.outputs.source_sha }}
|
|
33
|
+
sdist_name: ${{ steps.release.outputs.sdist_name }}
|
|
34
|
+
wheel_name: ${{ steps.release.outputs.wheel_name }}
|
|
35
|
+
sdist_sha256: ${{ steps.release.outputs.sdist_sha256 }}
|
|
36
|
+
wheel_sha256: ${{ steps.release.outputs.wheel_sha256 }}
|
|
37
|
+
artifact_id: ${{ steps.upload.outputs.artifact-id }}
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
40
|
+
with:
|
|
41
|
+
ref: ${{ github.sha }}
|
|
42
|
+
persist-credentials: false
|
|
43
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.14"
|
|
46
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
47
|
+
with:
|
|
48
|
+
version: "0.12.5"
|
|
49
|
+
checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2"
|
|
50
|
+
enable-cache: false
|
|
51
|
+
- run: uv sync --locked --python 3.14
|
|
52
|
+
- name: Check source checkout
|
|
53
|
+
run: &verify-source |
|
|
54
|
+
set -euo pipefail
|
|
55
|
+
test -z "$(git status --porcelain --untracked-files=all)"
|
|
56
|
+
git diff --exit-code "$GITHUB_SHA" --
|
|
57
|
+
- run: uv run --locked python tools/release.py validate
|
|
58
|
+
- run: uv run --locked python tools/check.py --artifacts-dir dist
|
|
59
|
+
env:
|
|
60
|
+
SCRATCH: ${{ runner.temp }}
|
|
61
|
+
- name: Check source remained unchanged
|
|
62
|
+
run: *verify-source
|
|
63
|
+
- id: release
|
|
64
|
+
run: uv run --locked python tools/release.py prepare
|
|
65
|
+
- id: upload
|
|
66
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
67
|
+
with:
|
|
68
|
+
name: ziwei-${{ steps.release.outputs.version }}-${{ github.run_id }}
|
|
69
|
+
path: dist/
|
|
70
|
+
if-no-files-found: error
|
|
71
|
+
overwrite: false
|
|
72
|
+
retention-days: 14
|
|
73
|
+
|
|
74
|
+
consume:
|
|
75
|
+
needs: build
|
|
76
|
+
runs-on: ${{ matrix.os }}
|
|
77
|
+
timeout-minutes: 15
|
|
78
|
+
permissions:
|
|
79
|
+
contents: read
|
|
80
|
+
strategy:
|
|
81
|
+
fail-fast: false
|
|
82
|
+
matrix:
|
|
83
|
+
include:
|
|
84
|
+
- os: ubuntu-latest
|
|
85
|
+
python: "3.11"
|
|
86
|
+
checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2"
|
|
87
|
+
- os: ubuntu-latest
|
|
88
|
+
python: "3.12"
|
|
89
|
+
checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2"
|
|
90
|
+
- os: ubuntu-latest
|
|
91
|
+
python: "3.13"
|
|
92
|
+
checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2"
|
|
93
|
+
- os: ubuntu-latest
|
|
94
|
+
python: "3.14"
|
|
95
|
+
checksum: "68a509da24b06b4223a1c0175fb5eb5bc79342b76cbeff0cfe51ac3f5b17b6b2"
|
|
96
|
+
- os: ubuntu-24.04-arm
|
|
97
|
+
python: "3.14"
|
|
98
|
+
checksum: "9bf43b4d1a07665bf64d4c4e710930b382321a785e0eb10aac07f46471f86a31"
|
|
99
|
+
- os: macos-latest
|
|
100
|
+
python: "3.14"
|
|
101
|
+
checksum: "5bb0e5fe008a773c3dbcb97ff79cd89e1241464fe9d2f986d52ad8f1b037bd62"
|
|
102
|
+
- os: windows-latest
|
|
103
|
+
python: "3.14"
|
|
104
|
+
checksum: "4c4d49d8738847d9b71ba319e49a5688c93eac0fe6204b1df24e98528dddf39a"
|
|
105
|
+
env:
|
|
106
|
+
RELEASE_VERSION: ${{ needs.build.outputs.version }}
|
|
107
|
+
RELEASE_SHA: ${{ needs.build.outputs.source_sha }}
|
|
108
|
+
SDIST_SHA256: ${{ needs.build.outputs.sdist_sha256 }}
|
|
109
|
+
WHEEL_SHA256: ${{ needs.build.outputs.wheel_sha256 }}
|
|
110
|
+
PYTHON_VERSION: ${{ matrix.python }}
|
|
111
|
+
steps:
|
|
112
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
113
|
+
with:
|
|
114
|
+
ref: ${{ github.sha }}
|
|
115
|
+
persist-credentials: false
|
|
116
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
117
|
+
with:
|
|
118
|
+
python-version: ${{ matrix.python }}
|
|
119
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
120
|
+
with:
|
|
121
|
+
version: "0.12.5"
|
|
122
|
+
checksum: ${{ matrix.checksum }}
|
|
123
|
+
enable-cache: false
|
|
124
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
125
|
+
with:
|
|
126
|
+
artifact-ids: ${{ needs.build.outputs.artifact_id }}
|
|
127
|
+
path: dist
|
|
128
|
+
digest-mismatch: error
|
|
129
|
+
- run: uv sync --locked --python "$PYTHON_VERSION"
|
|
130
|
+
shell: bash
|
|
131
|
+
- run: uv run --locked python tools/release.py consume
|
|
132
|
+
env:
|
|
133
|
+
SCRATCH: ${{ runner.temp }}
|
|
134
|
+
|
|
135
|
+
publish-pypi:
|
|
136
|
+
if: github.ref == 'refs/heads/main'
|
|
137
|
+
needs: [build, consume]
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
timeout-minutes: 10
|
|
140
|
+
environment: pypi
|
|
141
|
+
permissions:
|
|
142
|
+
id-token: write
|
|
143
|
+
steps:
|
|
144
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
145
|
+
with:
|
|
146
|
+
artifact-ids: ${{ needs.build.outputs.artifact_id }}
|
|
147
|
+
path: dist
|
|
148
|
+
digest-mismatch: error
|
|
149
|
+
- name: Verify exact publish bytes
|
|
150
|
+
id: verify-bytes
|
|
151
|
+
shell: bash
|
|
152
|
+
env:
|
|
153
|
+
DIST_DIR: dist
|
|
154
|
+
RELEASE_VERSION: ${{ needs.build.outputs.version }}
|
|
155
|
+
SDIST_NAME: ${{ needs.build.outputs.sdist_name }}
|
|
156
|
+
WHEEL_NAME: ${{ needs.build.outputs.wheel_name }}
|
|
157
|
+
SDIST_SHA256: ${{ needs.build.outputs.sdist_sha256 }}
|
|
158
|
+
WHEEL_SHA256: ${{ needs.build.outputs.wheel_sha256 }}
|
|
159
|
+
run: |
|
|
160
|
+
set -euo pipefail
|
|
161
|
+
[[ "$RELEASE_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
|
|
162
|
+
[[ "$SDIST_NAME" == "ziwei-${RELEASE_VERSION}.tar.gz" ]]
|
|
163
|
+
[[ "$WHEEL_NAME" == "ziwei-${RELEASE_VERSION}-py3-none-any.whl" ]]
|
|
164
|
+
[[ "$SDIST_SHA256" =~ ^[0-9a-f]{64}$ && "$WHEEL_SHA256" =~ ^[0-9a-f]{64}$ ]]
|
|
165
|
+
[[ -d "$DIST_DIR" && ! -L "$DIST_DIR" ]]
|
|
166
|
+
[[ -d "$DIST_DIR/packages" && ! -L "$DIST_DIR/packages" ]]
|
|
167
|
+
[[ $(find "$DIST_DIR/packages" -mindepth 1 -maxdepth 1 | wc -l) -eq 2 ]]
|
|
168
|
+
[[ -f "$DIST_DIR/packages/$SDIST_NAME" && ! -L "$DIST_DIR/packages/$SDIST_NAME" ]]
|
|
169
|
+
[[ -f "$DIST_DIR/packages/$WHEEL_NAME" && ! -L "$DIST_DIR/packages/$WHEEL_NAME" ]]
|
|
170
|
+
printf '%s %s\n' "$SDIST_SHA256" "$DIST_DIR/packages/$SDIST_NAME" \
|
|
171
|
+
"$WHEEL_SHA256" "$DIST_DIR/packages/$WHEEL_NAME" | sha256sum --check --strict
|
|
172
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
173
|
+
with:
|
|
174
|
+
repository-url: https://upload.pypi.org/legacy/
|
|
175
|
+
packages-dir: dist/packages
|
|
176
|
+
attestations: true
|
|
177
|
+
skip-existing: false
|
ziwei-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Agent 指令
|
|
2
|
+
|
|
3
|
+
## 范围
|
|
4
|
+
|
|
5
|
+
本仓是处于初始化阶段的 Python 紫微斗数库。实现功能前先读 `README.md`、`docs/architecture.md`、
|
|
6
|
+
`docs/knowledge.md` 与对应 issue。GitHub issue 记录功能范围与验收条件。
|
|
7
|
+
|
|
8
|
+
历法与时间(公历与农历互转、闰月、节气时刻、真太阳时)使用 celestial-calendar。本仓负责出生记录与
|
|
9
|
+
口径解析、安星规则、四化与流派变体、十二宫与大限、命盘组合与序列化,以及知识记录与查询。
|
|
10
|
+
|
|
11
|
+
## 领域契约
|
|
12
|
+
|
|
13
|
+
- 原始出生记录与解析后的计算输入分开保存。未知时辰、未知性别显式保留;完整命盘入口拒绝缺项,
|
|
14
|
+
不代填子时或默认性别。
|
|
15
|
+
- 闰月归属、子时换日、换年是三个独立口径,各自为具名选项并进入结果记录。请求的口径不可用时
|
|
16
|
+
显式失败,不静默换成另一种。
|
|
17
|
+
- 历法算法、流派规则、实现手段分别表达。所选农历算法、支持范围与版本随结果保存。
|
|
18
|
+
- 安星表、四化表与大限规则须注明来源与适用条件。流派有分歧时建模为具名变体,不合成一张无出处的表;
|
|
19
|
+
未决口径先向作者确认再编码。
|
|
20
|
+
- 天文与历法原值、安星结果、知识解释分开。显示用的星曜名或宫位名不改变计算结果。
|
|
21
|
+
- 先写具体的 celestial 适配。共享抽象只在真实实现或调用方需要时加入。
|
|
22
|
+
|
|
23
|
+
## Python
|
|
24
|
+
|
|
25
|
+
完整类型标注;模块与函数 snake_case,类型 PascalCase;两空格缩进。输入、配置、规则与结果默认不可变;
|
|
26
|
+
冻结 dataclass 同时隔离可变成员与调用方持有的数据。偏向普通纯函数与声明式规则表。
|
|
27
|
+
文件读取、原生库初始化、缓存等效果放在所属边界并显式表达。不使用全局可变配置与静默替代。
|
|
28
|
+
|
|
29
|
+
通用概念使用惯用英语,如 `timezone`、`BirthRecord`、`Gender`;只有术数专有词用拼音,如
|
|
30
|
+
`Ziwei`、`Tianfu`、`Minggong`、`Ganzhi`、`sihua`。专有词枚举提供拼音成员与中文别名
|
|
31
|
+
(`紫微 = ZIWEI`),其他枚举使用英语成员并可提供中文别名。测试与示例优先使用中文别名。
|
|
32
|
+
JSON 中的领域值用中文。
|
|
33
|
+
定义归所属领域模块,入口负责组合。名字与类型承载含义,注释解释原因与约束。公开输入校验在
|
|
34
|
+
`python -O` 下仍须有效。
|
|
35
|
+
|
|
36
|
+
支持 Python 3.11–3.14。先 `uv sync --locked`,再 `uv run --locked python tools/check.py` 运行与 CI
|
|
37
|
+
相同的检查。配置与工具版本钉在 `pyproject.toml` 与 `uv.lock`;更新依赖时同时修改两者,并在
|
|
38
|
+
最低与最高 Python 版本各验一次。开发包提供完整命盘、JSON保存/恢复、重算与文本盘面,
|
|
39
|
+
并支持独立知识查询。
|
|
40
|
+
|
|
41
|
+
## 知识与文档
|
|
42
|
+
|
|
43
|
+
PR 标题与正文、issue、评论与审阅回复使用中文。文档中文。代码标识符、命令、原文引述、
|
|
44
|
+
固定署名与机器识别字段保留原形。
|
|
45
|
+
|
|
46
|
+
本仓也是知识库。概念、来源记录、规则变体与陈述需要稳定且与语言无关的标识。知识查询不得依赖
|
|
47
|
+
命盘或原生历法初始化。来源状态、前提状态、默认展示资格与命盘匹配分别记录。
|
|
48
|
+
|
|
49
|
+
可执行规则归所属领域模块,知识从那里引用,参考表由同一来源生成。原文引述、译文与仓内原作说明
|
|
50
|
+
可区分。引文保留来源原有字词、标点与标记,不规范化口诀或古籍原文。保留不确定与前提不全,
|
|
51
|
+
不把它们写成适用结论。
|
|
52
|
+
|
|
53
|
+
标识、签名、单位、默认值与机器可读规则只有一份来源。本文件是唯一的 agent 指令源;
|
|
54
|
+
读者文档沿上面的路径维护。只在模块有功能时才创建源文件。
|
|
55
|
+
|
|
56
|
+
## 验证与交付
|
|
57
|
+
|
|
58
|
+
测试领域边界与独立来源的参考盘例,写明口径配置与容差。序列化往返检验保全,重算与外部参考
|
|
59
|
+
检验不同性质。安星规则以独立来源盘例与边界用例验收:闰月、子时、正月初一与立春之间、立春瞬间两侧、
|
|
60
|
+
支持范围端点、真太阳时跨日。
|
|
61
|
+
|
|
62
|
+
提交前运行完整检查命令。证明新增检查会拒绝代表性缺陷。来源忠实度、别名、不必要的抽象、
|
|
63
|
+
测试范围缺口与自动结果分开审阅。在 PR 中记录实际执行的命令与未解决的限制。
|
|
64
|
+
|
|
65
|
+
PR 正文分内容、测试、验证、范围说明四节,末尾署名 `Built by @0xf3cd with <工具> (<模型>).`,
|
|
66
|
+
不写会话链接。提交不带 `Co-Authored-By:`;squash 合并以 PR 正文为提交正文。
|
|
67
|
+
|
|
68
|
+
示例使用合成数据或适当匿名化的盘例:化名,出生地到省。公开文件与讨论只含项目相关信息。
|
|
69
|
+
提交经维护者批准的签名路径。合并与发布需要明确授权。
|
ziwei-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 0xf3cd
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
ziwei-0.1.0/MANIFEST.in
ADDED
ziwei-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ziwei
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: 紫微斗数排盘与有出处的知识
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Documentation, https://github.com/0xf3cd/ziwei/tree/main/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/0xf3cd/ziwei
|
|
8
|
+
Project-URL: Issues, https://github.com/0xf3cd/ziwei/issues
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Typing :: Typed
|
|
17
|
+
Requires-Python: <3.15,>=3.11
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: celestial-calendar==0.8.0
|
|
21
|
+
Requires-Dist: tzdata==2026.5
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
# ziwei
|
|
25
|
+
|
|
26
|
+
Python 紫微斗数排盘与知识库。历法与时间由
|
|
27
|
+
[celestial-calendar](https://github.com/0xf3cd/celestial-calendar) 提供;本仓记录紫微斗数的安星规则、
|
|
28
|
+
四化口径、流派变体与出处,并组织可复现的命盘结果。
|
|
29
|
+
|
|
30
|
+
目前提供出生记录、显式口径配置、民用时刻消歧、干支基础、celestial 历法适配、解析层
|
|
31
|
+
(公历/农历记录到计算输入)、命宫身宫与十二宫、五行局、28星安星、具名生年四化与大限,
|
|
32
|
+
以及完整命盘组合、带版本的JSON保存/恢复、重算、文本十二宫格和独立知识目录。
|
|
33
|
+
用法见[出生输入](docs/birth.md)、[历法与时间](docs/calendar.md)、[解析层](docs/resolver.md)、
|
|
34
|
+
[命宫身宫与十二宫](docs/palaces.md)、[五行局](docs/bureau.md)、[安星](docs/stars.md)、
|
|
35
|
+
[四化与大限](docs/sihua-decades.md)、[完整命盘与记录](docs/chart.md)和[知识查询](docs/knowledge.md),
|
|
36
|
+
开发检查与协作约定见[参与开发](docs/contributing.md)。
|
|
37
|
+
首次发布的前置配置、审批与产物核验见[发布准备](docs/releasing.md)。
|
|
38
|
+
|
|
39
|
+
当前源码为首版候选,版本号不表示已经上架PyPI;已发布版本以
|
|
40
|
+
[发布记录](https://github.com/0xf3cd/ziwei/releases)为准。
|
|
41
|
+
|
|
42
|
+
## 安装要求
|
|
43
|
+
|
|
44
|
+
支持Python 3.11–3.14。运行时精确依赖`celestial-calendar==0.8.0`与`tzdata==2026.5`。
|
|
45
|
+
celestial-calendar 0.8.0在PyPI只提供下列原生wheel,没有源码分发包;ziwei自身的纯Python wheel不扩大这个范围:
|
|
46
|
+
|
|
47
|
+
| 平台 | 架构与最低系统要求 |
|
|
48
|
+
|---|---|
|
|
49
|
+
| macOS | arm64,macOS 14或更新 |
|
|
50
|
+
| Linux | x86_64,glibc 2.26或更新;aarch64,glibc 2.24或更新 |
|
|
51
|
+
| Windows | amd64 |
|
|
52
|
+
|
|
53
|
+
Intel macOS、Windows ARM64、较旧macOS和musl Linux不在上述制品覆盖范围内,不能依靠pip自动回退源码构建。
|
|
54
|
+
请使用独立虚拟环境;与不同精确版本的celestial-calendar或tzdata显式共装会冲突。
|
|
55
|
+
安装ziwei时,pip也可能将环境中已有的较新celestial-calendar或tzdata降到上述精确版本。
|
|
56
|
+
当前源代码开发安装与检查见[参与开发](docs/contributing.md),版本与首次发布仍以发布记录为准。
|
|
57
|
+
|
|
58
|
+
## 首版目标
|
|
59
|
+
|
|
60
|
+
已知出生时刻与性别,排出可复现的本命盘:
|
|
61
|
+
|
|
62
|
+
- 保存出生原始记录,显式处理时区与可选的真太阳时,保留解析后的农历年月日时与所用历法算法。
|
|
63
|
+
- 闰月归属、子时换日、换年三个口径作为具名配置,不设静默默认。
|
|
64
|
+
- 安命宫、身宫与十二宫宫干,定五行局,安紫微、天府两系十四主星。
|
|
65
|
+
- 安六吉、六煞、禄存与天马;按所选具名四化表取生年四化。
|
|
66
|
+
- 起大限:顺逆由年干阴阳与性别定,首限起始虚岁由五行局数定。
|
|
67
|
+
- 输出不可变结构、文本盘面与带版本的序列化,保留输入、口径、历法版本与派生结果。
|
|
68
|
+
|
|
69
|
+
交付任务与验收见 [v0.1.0 milestone](https://github.com/0xf3cd/ziwei/milestone/1)。
|
|
70
|
+
|
|
71
|
+
## 设计边界
|
|
72
|
+
|
|
73
|
+
- [仓库结构与计算边界](docs/architecture.md)
|
|
74
|
+
- [知识组织与来源](docs/knowledge.md)
|
|
75
|
+
- [参与开发](docs/contributing.md)
|
|
76
|
+
|
|
77
|
+
首版同时支持独立查知识:不排盘、不加载原生历法库,也能查到星曜、宫位、四化等概念,
|
|
78
|
+
以及安星规则的流派变体与出处。来源核验状态、适用前提与展示资格分别记录。
|
|
79
|
+
|
|
80
|
+
通用概念用惯用英语,术数专有词用拼音,枚举另有中文别名;文档、issue 与 PR 使用中文。
|
|
81
|
+
|
|
82
|
+
## 后续方向
|
|
83
|
+
|
|
84
|
+
- [杂曜、运限与展示](https://github.com/0xf3cd/ziwei/milestone/2):杂曜、庙旺利陷、小限与流年流月、
|
|
85
|
+
飞星四化、格局识别、盘面展示。
|
|
86
|
+
- [解释知识与研究](https://github.com/0xf3cd/ziwei/milestone/3):有出处的解释知识与前提判别、
|
|
87
|
+
1972 年前的历史时刻、多源排盘比对、与八字的联合入口。
|
|
88
|
+
|
|
89
|
+
这些 milestone 记录方向,不设发布日期。每项技术在实现前须明确定义、出处与参考盘例。
|
|
90
|
+
|
|
91
|
+
## 许可证
|
|
92
|
+
|
|
93
|
+
[MIT](LICENSE)。
|
ziwei-0.1.0/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# ziwei
|
|
2
|
+
|
|
3
|
+
Python 紫微斗数排盘与知识库。历法与时间由
|
|
4
|
+
[celestial-calendar](https://github.com/0xf3cd/celestial-calendar) 提供;本仓记录紫微斗数的安星规则、
|
|
5
|
+
四化口径、流派变体与出处,并组织可复现的命盘结果。
|
|
6
|
+
|
|
7
|
+
目前提供出生记录、显式口径配置、民用时刻消歧、干支基础、celestial 历法适配、解析层
|
|
8
|
+
(公历/农历记录到计算输入)、命宫身宫与十二宫、五行局、28星安星、具名生年四化与大限,
|
|
9
|
+
以及完整命盘组合、带版本的JSON保存/恢复、重算、文本十二宫格和独立知识目录。
|
|
10
|
+
用法见[出生输入](docs/birth.md)、[历法与时间](docs/calendar.md)、[解析层](docs/resolver.md)、
|
|
11
|
+
[命宫身宫与十二宫](docs/palaces.md)、[五行局](docs/bureau.md)、[安星](docs/stars.md)、
|
|
12
|
+
[四化与大限](docs/sihua-decades.md)、[完整命盘与记录](docs/chart.md)和[知识查询](docs/knowledge.md),
|
|
13
|
+
开发检查与协作约定见[参与开发](docs/contributing.md)。
|
|
14
|
+
首次发布的前置配置、审批与产物核验见[发布准备](docs/releasing.md)。
|
|
15
|
+
|
|
16
|
+
当前源码为首版候选,版本号不表示已经上架PyPI;已发布版本以
|
|
17
|
+
[发布记录](https://github.com/0xf3cd/ziwei/releases)为准。
|
|
18
|
+
|
|
19
|
+
## 安装要求
|
|
20
|
+
|
|
21
|
+
支持Python 3.11–3.14。运行时精确依赖`celestial-calendar==0.8.0`与`tzdata==2026.5`。
|
|
22
|
+
celestial-calendar 0.8.0在PyPI只提供下列原生wheel,没有源码分发包;ziwei自身的纯Python wheel不扩大这个范围:
|
|
23
|
+
|
|
24
|
+
| 平台 | 架构与最低系统要求 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| macOS | arm64,macOS 14或更新 |
|
|
27
|
+
| Linux | x86_64,glibc 2.26或更新;aarch64,glibc 2.24或更新 |
|
|
28
|
+
| Windows | amd64 |
|
|
29
|
+
|
|
30
|
+
Intel macOS、Windows ARM64、较旧macOS和musl Linux不在上述制品覆盖范围内,不能依靠pip自动回退源码构建。
|
|
31
|
+
请使用独立虚拟环境;与不同精确版本的celestial-calendar或tzdata显式共装会冲突。
|
|
32
|
+
安装ziwei时,pip也可能将环境中已有的较新celestial-calendar或tzdata降到上述精确版本。
|
|
33
|
+
当前源代码开发安装与检查见[参与开发](docs/contributing.md),版本与首次发布仍以发布记录为准。
|
|
34
|
+
|
|
35
|
+
## 首版目标
|
|
36
|
+
|
|
37
|
+
已知出生时刻与性别,排出可复现的本命盘:
|
|
38
|
+
|
|
39
|
+
- 保存出生原始记录,显式处理时区与可选的真太阳时,保留解析后的农历年月日时与所用历法算法。
|
|
40
|
+
- 闰月归属、子时换日、换年三个口径作为具名配置,不设静默默认。
|
|
41
|
+
- 安命宫、身宫与十二宫宫干,定五行局,安紫微、天府两系十四主星。
|
|
42
|
+
- 安六吉、六煞、禄存与天马;按所选具名四化表取生年四化。
|
|
43
|
+
- 起大限:顺逆由年干阴阳与性别定,首限起始虚岁由五行局数定。
|
|
44
|
+
- 输出不可变结构、文本盘面与带版本的序列化,保留输入、口径、历法版本与派生结果。
|
|
45
|
+
|
|
46
|
+
交付任务与验收见 [v0.1.0 milestone](https://github.com/0xf3cd/ziwei/milestone/1)。
|
|
47
|
+
|
|
48
|
+
## 设计边界
|
|
49
|
+
|
|
50
|
+
- [仓库结构与计算边界](docs/architecture.md)
|
|
51
|
+
- [知识组织与来源](docs/knowledge.md)
|
|
52
|
+
- [参与开发](docs/contributing.md)
|
|
53
|
+
|
|
54
|
+
首版同时支持独立查知识:不排盘、不加载原生历法库,也能查到星曜、宫位、四化等概念,
|
|
55
|
+
以及安星规则的流派变体与出处。来源核验状态、适用前提与展示资格分别记录。
|
|
56
|
+
|
|
57
|
+
通用概念用惯用英语,术数专有词用拼音,枚举另有中文别名;文档、issue 与 PR 使用中文。
|
|
58
|
+
|
|
59
|
+
## 后续方向
|
|
60
|
+
|
|
61
|
+
- [杂曜、运限与展示](https://github.com/0xf3cd/ziwei/milestone/2):杂曜、庙旺利陷、小限与流年流月、
|
|
62
|
+
飞星四化、格局识别、盘面展示。
|
|
63
|
+
- [解释知识与研究](https://github.com/0xf3cd/ziwei/milestone/3):有出处的解释知识与前提判别、
|
|
64
|
+
1972 年前的历史时刻、多源排盘比对、与八字的联合入口。
|
|
65
|
+
|
|
66
|
+
这些 milestone 记录方向,不设发布日期。每项技术在实现前须明确定义、出处与参考盘例。
|
|
67
|
+
|
|
68
|
+
## 许可证
|
|
69
|
+
|
|
70
|
+
[MIT](LICENSE)。
|