stringjax 0.1.0__tar.gz → 0.1.1__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.
- stringjax-0.1.1/.github/workflows/release.yml +81 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/test-install.yml +5 -6
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/test.yml +2 -2
- {stringjax-0.1.0 → stringjax-0.1.1}/.readthedocs.yaml +1 -2
- stringjax-0.1.1/CHANGELOG.md +52 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/CITATION.cff +5 -5
- {stringjax-0.1.0 → stringjax-0.1.1}/CONTRIBUTING.md +4 -7
- {stringjax-0.1.0 → stringjax-0.1.1}/PKG-INFO +19 -21
- {stringjax-0.1.0 → stringjax-0.1.1}/README.md +12 -15
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/requirements.txt +2 -3
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/about.md +6 -7
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/citation.md +1 -1
- stringjax-0.1.1/documentation/source/compatibility.md +32 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/conf.py +37 -34
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/contributing.md +1 -2
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/faq.md +3 -3
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/index.rst +2 -3
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/install.md +6 -4
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/design_principles.md +1 -1
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/ecosystem.md +26 -12
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/index.md +5 -5
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/motivation.md +3 -3
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_jaxpolylog.ipynb +18 -13
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_jaxvacua.ipynb +21 -18
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_stringforge.ipynb +28 -26
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/troubleshooting.md +10 -7
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/tutorials.rst +2 -2
- {stringjax-0.1.0 → stringjax-0.1.1}/pyproject.toml +16 -5
- {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/_version.py +1 -1
- {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/cli.py +1 -1
- stringjax-0.1.1/stringjax/doctor.py +130 -0
- stringjax-0.1.1/tests/test_doctor.py +89 -0
- stringjax-0.1.0/CHANGELOG.md +0 -19
- stringjax-0.1.0/documentation/source/compatibility.md +0 -27
- stringjax-0.1.0/stringjax/doctor.py +0 -102
- stringjax-0.1.0/tests/test_doctor.py +0 -32
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/docs.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/lint.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/.gitignore +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/LICENSE +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/constraints.txt +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/Makefile +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/make.bat +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/_static/.gitkeep +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/_templates/.gitkeep +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/environment-cpu.yml +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/requirements-cpu.txt +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/requirements-gpu.txt +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/__init__.py +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/py.typed +0 -0
- {stringjax-0.1.0 → stringjax-0.1.1}/tests/test_cli.py +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
# Build, check and publish the package to PyPI when a version tag `vX.Y.Z` is pushed.
|
|
4
|
+
#
|
|
5
|
+
# Publishing uses PyPI Trusted Publishing: no API token is stored anywhere. Once per
|
|
6
|
+
# project, the PyPI project's Settings -> Publishing must name this repository (owner
|
|
7
|
+
# StringJAX), the workflow file `release.yml` and the environment `pypi`.
|
|
8
|
+
#
|
|
9
|
+
# Release flow:
|
|
10
|
+
# 1. set the version in the package metadata and date the CHANGELOG entry;
|
|
11
|
+
# commit and push to main
|
|
12
|
+
# 2. git tag -a vX.Y.Z -m "<package> X.Y.Z" && git push origin vX.Y.Z
|
|
13
|
+
#
|
|
14
|
+
# The build job refuses a tag that differs from the built version (write the tag
|
|
15
|
+
# with the normalised version, e.g. v0.2.0rc1, as in the wheel's file name).
|
|
16
|
+
# Running the workflow by hand (Actions -> release -> Run workflow) builds and checks
|
|
17
|
+
# without publishing, whichever branch or tag it is started on. PyPI never accepts
|
|
18
|
+
# a file twice, so re-publishing an existing version fails.
|
|
19
|
+
|
|
20
|
+
on:
|
|
21
|
+
push:
|
|
22
|
+
tags: ["v*"]
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
build:
|
|
30
|
+
name: Build and check
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
|
|
35
|
+
- uses: actions/setup-python@v5
|
|
36
|
+
with:
|
|
37
|
+
python-version: "3.12"
|
|
38
|
+
|
|
39
|
+
- name: Build sdist and wheel
|
|
40
|
+
run: |
|
|
41
|
+
python -m pip install --upgrade pip build twine
|
|
42
|
+
python -m build
|
|
43
|
+
|
|
44
|
+
- name: Check metadata
|
|
45
|
+
run: python -m twine check --strict dist/*
|
|
46
|
+
|
|
47
|
+
- name: The tag matches the built version
|
|
48
|
+
if: github.event_name == 'push' && github.ref_type == 'tag'
|
|
49
|
+
run: |
|
|
50
|
+
wheels=(dist/*.whl)
|
|
51
|
+
if [ "${#wheels[@]}" -ne 1 ]; then
|
|
52
|
+
echo "::error::expected one wheel, found ${#wheels[@]}"; exit 1
|
|
53
|
+
fi
|
|
54
|
+
built=$(basename "${wheels[0]}" | cut -d- -f2)
|
|
55
|
+
if [ "$built" != "${GITHUB_REF_NAME#v}" ]; then
|
|
56
|
+
echo "::error::tag $GITHUB_REF_NAME does not match the built version $built"; exit 1
|
|
57
|
+
fi
|
|
58
|
+
echo "tag $GITHUB_REF_NAME matches the built version $built"
|
|
59
|
+
|
|
60
|
+
- uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: dist
|
|
63
|
+
path: dist/
|
|
64
|
+
if-no-files-found: error
|
|
65
|
+
|
|
66
|
+
publish:
|
|
67
|
+
name: Publish to PyPI
|
|
68
|
+
needs: build
|
|
69
|
+
# only a pushed tag publishes; a manual run, even one started on a tag, does not
|
|
70
|
+
if: github.event_name == 'push' && github.ref_type == 'tag'
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
environment: pypi
|
|
73
|
+
permissions:
|
|
74
|
+
id-token: write # Trusted Publishing
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/download-artifact@v4
|
|
77
|
+
with:
|
|
78
|
+
name: dist
|
|
79
|
+
path: dist/
|
|
80
|
+
|
|
81
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -3,12 +3,11 @@ name: test-install
|
|
|
3
3
|
# Full-ecosystem install check: verifies that the metapackage resolves and installs
|
|
4
4
|
# a coherent set of member packages, and that the environment helper runs.
|
|
5
5
|
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# ordinary pull requests are not blocked. Re-enable `pull_request` once the members
|
|
9
|
-
# are released.
|
|
6
|
+
# It installs the member packages from PyPI (all are published), so it runs on pull
|
|
7
|
+
# requests as well as by hand and weekly.
|
|
10
8
|
|
|
11
9
|
on:
|
|
10
|
+
pull_request:
|
|
12
11
|
workflow_dispatch:
|
|
13
12
|
schedule:
|
|
14
13
|
- cron: "0 6 * * 1" # every Monday 06:00 UTC
|
|
@@ -19,7 +18,7 @@ jobs:
|
|
|
19
18
|
strategy:
|
|
20
19
|
fail-fast: false
|
|
21
20
|
matrix:
|
|
22
|
-
python-version: ["3.12"]
|
|
21
|
+
python-version: ["3.12", "3.13"]
|
|
23
22
|
steps:
|
|
24
23
|
- uses: actions/checkout@v4
|
|
25
24
|
- uses: actions/setup-python@v5
|
|
@@ -29,6 +28,6 @@ jobs:
|
|
|
29
28
|
run: python -m pip install .
|
|
30
29
|
- name: Import the ecosystem
|
|
31
30
|
run: |
|
|
32
|
-
python -c "import stringjax, jaxvacua, jaxpolylog; print(stringjax.__version__)"
|
|
31
|
+
python -c "import stringjax, jaxvacua, jaxpolylog, stringjax_tools; print(stringjax.__version__)"
|
|
33
32
|
- name: Run diagnostics
|
|
34
33
|
run: stringjax doctor
|
|
@@ -12,14 +12,14 @@ jobs:
|
|
|
12
12
|
fail-fast: false
|
|
13
13
|
matrix:
|
|
14
14
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
15
|
-
python-version: ["3.12"]
|
|
15
|
+
python-version: ["3.12", "3.13"]
|
|
16
16
|
steps:
|
|
17
17
|
- uses: actions/checkout@v4
|
|
18
18
|
- uses: actions/setup-python@v5
|
|
19
19
|
with:
|
|
20
20
|
python-version: ${{ matrix.python-version }}
|
|
21
21
|
# Install the metapackage WITHOUT its dependencies so the unit tests do not
|
|
22
|
-
# require the
|
|
22
|
+
# require the member packages. The doctor/CLI helpers
|
|
23
23
|
# are designed to work even when no member is installed.
|
|
24
24
|
- name: Install (no deps) + pytest
|
|
25
25
|
run: |
|
|
@@ -11,7 +11,7 @@ build:
|
|
|
11
11
|
|
|
12
12
|
sphinx:
|
|
13
13
|
configuration: documentation/source/conf.py
|
|
14
|
-
fail_on_warning:
|
|
14
|
+
fail_on_warning: true
|
|
15
15
|
|
|
16
16
|
# Install only the documentation toolchain. The hub does not import the member
|
|
17
17
|
# packages, and `documentation/source/conf.py` falls back to a default version
|
|
@@ -22,5 +22,4 @@ python:
|
|
|
22
22
|
- requirements: documentation/requirements.txt
|
|
23
23
|
|
|
24
24
|
formats:
|
|
25
|
-
- pdf
|
|
26
25
|
- htmlzip
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `stringjax` metapackage are documented here. The format
|
|
4
|
+
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project
|
|
5
|
+
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.1] - 2026-10-28
|
|
10
|
+
### Changed
|
|
11
|
+
- Requirements follow the released members: `jaxvacua>=0.1.3,<0.2` (the first release with the
|
|
12
|
+
`all` and `bounding` extras that `stringjax[all]` and the documentation name) and, in the `data`
|
|
13
|
+
and `all` extras, `stringforge>=0.1.3,<0.2`. The compatibility page gains a 0.1.1 row and adds
|
|
14
|
+
`stringjax-tools`; `jaxpolylog` and `stringjax-tools` are marked as coming through `jaxvacua`, which
|
|
15
|
+
sets their ranges (the 0.1.0 page's `jaxpolylog>=0.3,<0.4` was enforced by no package).
|
|
16
|
+
- `stringjax doctor` lists `stringjax-tools` among the members. `float64_enabled` now reports the
|
|
17
|
+
precision a jaxvacua session runs in: JAX starts in float32 and jaxvacua switches to float64 on
|
|
18
|
+
import unless `JAXVACUA_PRECISION=float32`, so before jaxvacua is imported the value comes from that
|
|
19
|
+
variable; it used to test a bare JAX array and so reported float64 as disabled in a working
|
|
20
|
+
environment. The new `jax_enable_x64` key keeps JAX's setting as it is. A `JAXVACUA_PRECISION`
|
|
21
|
+
other than `float64` or `float32`, which jaxvacua rejects at import, is reported as such
|
|
22
|
+
(`jaxvacua_precision_invalid`). The precision hint no longer says that JAX reads
|
|
23
|
+
`JAXVACUA_PRECISION`.
|
|
24
|
+
- Gurobi: the documentation and the doctor's hint state that `gurobipy` is a core dependency of
|
|
25
|
+
`jaxvacua` (its default moduli sampling uses it) whose pip wheel carries a size-limited licence,
|
|
26
|
+
instead of "everything else works without it"; if it is missing, the hint is `pip install gurobipy`.
|
|
27
|
+
- Python 3.13: classifier added; the unit tests and the `test-install` workflow run on 3.12 and 3.13.
|
|
28
|
+
`test-install` (the core install from PyPI) also runs on pull requests, since the members are on
|
|
29
|
+
PyPI, and imports `stringjax_tools`. Read the Docs builds with `fail_on_warning: true` and no longer
|
|
30
|
+
builds a PDF (its LaTeX builder cannot render the ecosystem page's mermaid diagram), and the
|
|
31
|
+
documentation takes its version from `stringjax/_version.py` (it showed 0.1.0 when stringjax was
|
|
32
|
+
not installed).
|
|
33
|
+
- The ecosystem page and the README list `stringjax-tools`; the ecosystem page links the jaxvacua and
|
|
34
|
+
stringforge documentation; the landing page, introduction, motivation and tutorials pages no longer
|
|
35
|
+
count "three member packages".
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- Release workflow `.github/workflows/release.yml`: pushing a tag `vX.Y.Z` builds the sdist and wheel,
|
|
39
|
+
runs `twine check --strict`, refuses a tag that differs from the built version, and publishes to PyPI
|
|
40
|
+
through Trusted Publishing (no API token). Run by hand, it builds and checks without publishing.
|
|
41
|
+
|
|
42
|
+
## [0.1.0] - 2026-06-11
|
|
43
|
+
### Added
|
|
44
|
+
- Initial release of the `stringjax` umbrella metapackage.
|
|
45
|
+
- Dependency aggregation for the ecosystem: `jaxvacua` (core), with `data`
|
|
46
|
+
(`stringforge`) and `all` extras.
|
|
47
|
+
- `stringjax doctor` and `stringjax versions` command-line helpers, plus the
|
|
48
|
+
`stringjax.report()` diagnostics API.
|
|
49
|
+
- Documentation hub skeleton (Sphinx + MyST).
|
|
50
|
+
|
|
51
|
+
[Unreleased]: https://github.com/StringJAX/stringjax/compare/v0.1.0...HEAD
|
|
52
|
+
[0.1.0]: https://github.com/StringJAX/stringjax/releases/tag/v0.1.0
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
cff-version: 1.2.0
|
|
2
2
|
message: >-
|
|
3
3
|
If you use the StringJAX ecosystem, please cite the specific package(s) you used
|
|
4
|
-
(e.g. JAXVacua, JAXPolyLog, StringForge) rather than this umbrella metapackage.
|
|
5
|
-
title: "StringJAX:
|
|
4
|
+
(e.g. JAXVacua, JAXPolyLog, StringForge, StringJAX Tools) rather than this umbrella metapackage.
|
|
5
|
+
title: "The StringJAX project: Compiling String Theory with JAX"
|
|
6
6
|
abstract: >-
|
|
7
7
|
Umbrella metapackage and tooling for the StringJAX ecosystem of differentiable
|
|
8
8
|
string-theory codes.
|
|
@@ -12,9 +12,9 @@ authors:
|
|
|
12
12
|
given-names: Andreas
|
|
13
13
|
repository-code: "https://github.com/StringJAX/stringjax"
|
|
14
14
|
url: "https://stringjax.readthedocs.io"
|
|
15
|
-
license:
|
|
16
|
-
version: 0.1.
|
|
17
|
-
date-released: "2026-
|
|
15
|
+
license: GPL-3.0-or-later
|
|
16
|
+
version: 0.1.1
|
|
17
|
+
date-released: "2026-10-28"
|
|
18
18
|
keywords:
|
|
19
19
|
- string theory
|
|
20
20
|
- flux vacua
|
|
@@ -27,7 +27,7 @@ without dependencies and add the tooling directly:
|
|
|
27
27
|
```bash
|
|
28
28
|
python -m pip install -e . --no-deps
|
|
29
29
|
python -m pip install ruff mypy pytest
|
|
30
|
-
python -m pip install -r
|
|
30
|
+
python -m pip install -r documentation/requirements.txt # only if building the docs
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Checks to run before opening a pull request
|
|
@@ -37,7 +37,7 @@ ruff check . # lint
|
|
|
37
37
|
ruff format --check . # formatting
|
|
38
38
|
mypy src/stringjax # type checks
|
|
39
39
|
pytest # tests (if present)
|
|
40
|
-
sphinx-build -W -b html
|
|
40
|
+
sphinx-build -W -b html documentation/source documentation/build/html # documentation build (warnings are errors)
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
`stringjax doctor` should also run cleanly in your environment.
|
|
@@ -54,8 +54,5 @@ sphinx-build -W -b html docs docs/_build/html # docs build (warnings are error
|
|
|
54
54
|
## Versioning
|
|
55
55
|
|
|
56
56
|
The metapackage follows [Semantic Versioning](https://semver.org). Bump the version
|
|
57
|
-
only when a member's compatibility window changes (see
|
|
58
|
-
|
|
59
|
-
## Code of conduct
|
|
60
|
-
|
|
61
|
-
By participating you agree to abide by the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
57
|
+
only when a member's compatibility window changes (see
|
|
58
|
+
`documentation/source/compatibility.md`).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: stringjax
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Umbrella metapackage and tooling for the StringJAX ecosystem of differentiable string-theory codes.
|
|
5
5
|
Project-URL: Homepage, https://github.com/StringJAX
|
|
6
6
|
Project-URL: Documentation, https://stringjax.readthedocs.io
|
|
@@ -17,14 +17,15 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
|
|
|
17
17
|
Classifier: Operating System :: OS Independent
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
21
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
21
22
|
Requires-Python: >=3.12
|
|
22
|
-
Requires-Dist: jaxvacua<0.2,>=0.1
|
|
23
|
+
Requires-Dist: jaxvacua<0.2,>=0.1.3
|
|
23
24
|
Provides-Extra: all
|
|
24
|
-
Requires-Dist: jaxvacua[all]<0.2,>=0.1; extra == 'all'
|
|
25
|
-
Requires-Dist: stringforge<0.2,>=0.1; extra == 'all'
|
|
25
|
+
Requires-Dist: jaxvacua[all]<0.2,>=0.1.3; extra == 'all'
|
|
26
|
+
Requires-Dist: stringforge<0.2,>=0.1.3; extra == 'all'
|
|
26
27
|
Provides-Extra: data
|
|
27
|
-
Requires-Dist: stringforge<0.2,>=0.1; extra == 'data'
|
|
28
|
+
Requires-Dist: stringforge<0.2,>=0.1.3; extra == 'data'
|
|
28
29
|
Provides-Extra: dev
|
|
29
30
|
Requires-Dist: mypy; extra == 'dev'
|
|
30
31
|
Requires-Dist: pytest; extra == 'dev'
|
|
@@ -47,9 +48,6 @@ Description-Content-Type: text/markdown
|
|
|
47
48
|
<a href="https://www.gnu.org/licenses/gpl-3.0"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg" alt="License: GPL v3"/></a>
|
|
48
49
|
</p>
|
|
49
50
|
|
|
50
|
-
<!-- The Docs/PyPI badges populate once the project is published; the Python and
|
|
51
|
-
License badges are static. -->
|
|
52
|
-
|
|
53
51
|
**Differentiable tools for string compactifications in JAX.**
|
|
54
52
|
|
|
55
53
|
StringJAX is the umbrella project for a family of interoperating, separately
|
|
@@ -79,16 +77,17 @@ pip install "stringjax[all]" # + databases (StringForge) and the flux-boundi
|
|
|
79
77
|
GPU/TPU/Apple-Silicon need one extra step for JAX — see the
|
|
80
78
|
[installation guide](https://stringjax.readthedocs.io/en/latest/install.html).
|
|
81
79
|
|
|
82
|
-
> Note: `stringjax` is
|
|
83
|
-
>
|
|
80
|
+
> Note: `stringjax` is released under **GPL-3.0-or-later**, matching the licence
|
|
81
|
+
> of `jaxvacua`; your usage of the ecosystem is subject to those terms.
|
|
84
82
|
|
|
85
83
|
## Packages
|
|
86
84
|
|
|
87
85
|
| Package | Role | Install | Docs | GitHub |
|
|
88
86
|
|----------------|-------------------------------------|-----------------------------|------|--------|
|
|
89
|
-
| **JAXVacua** | Type IIB flux-vacuum engine | `pip install jaxvacua` | [DOC](https://jaxvacua.readthedocs.io) | ([GitHub](https://github.com/
|
|
90
|
-
| **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/
|
|
91
|
-
| **StringForge**| Calabi
|
|
87
|
+
| **JAXVacua** | Type IIB flux-vacuum engine | `pip install jaxvacua` | [DOC](https://jaxvacua.readthedocs.io) | ([GitHub](https://github.com/StringJAX/jaxvacua)) |
|
|
88
|
+
| **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/StringJAX/jaxpolylog)) |
|
|
89
|
+
| **StringForge**| Calabi-Yau databases & vacua vault | `pip install stringforge` | [DOC](https://stringforge.readthedocs.io) | ([GitHub](https://github.com/StringJAX/stringforge)) |
|
|
90
|
+
| **StringJAX Tools** | Shared JAX transform helpers | `pip install stringjax-tools` | [DOC](https://stringjax-tools.readthedocs.io) | ([GitHub](https://github.com/StringJAX/stringjax_tools)) |
|
|
92
91
|
|
|
93
92
|
`StringJAX` itself is the project/brand and is *not* an installable physics package.
|
|
94
93
|
|
|
@@ -97,17 +96,17 @@ GPU/TPU/Apple-Silicon need one extra step for JAX — see the
|
|
|
97
96
|
```python
|
|
98
97
|
import jaxvacua as jvc
|
|
99
98
|
|
|
100
|
-
jvc.set_precision("float64")
|
|
101
|
-
|
|
102
|
-
finder = jvc.FluxVacuaFinder.
|
|
103
|
-
vacua
|
|
99
|
+
jvc.set_precision("float64") # before heavy compute
|
|
100
|
+
eft = jvc.FluxEFT(h12=2, model_ID=1, limit="LCS", maximum_degree=5)
|
|
101
|
+
finder = jvc.FluxVacuaFinder.from_eft(eft)
|
|
102
|
+
vacua = finder.sample_SUSY_flux_vacua(N=100, mode="ISD")
|
|
104
103
|
print(len(vacua), "candidate vacua")
|
|
105
104
|
```
|
|
106
105
|
|
|
107
106
|
Check your environment at any time:
|
|
108
107
|
|
|
109
108
|
```bash
|
|
110
|
-
stringjax doctor # versions, JAX backend/devices, float64 status, Gurobi
|
|
109
|
+
stringjax doctor # versions, JAX backend/devices, float64 status, Gurobi presence
|
|
111
110
|
stringjax versions # just the member-package versions
|
|
112
111
|
```
|
|
113
112
|
|
|
@@ -146,5 +145,4 @@ collected in the documentation.
|
|
|
146
145
|
|
|
147
146
|
## Contributing
|
|
148
147
|
|
|
149
|
-
See [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
|
150
|
-
[code of conduct](CODE_OF_CONDUCT.md). Questions are welcome in GitHub Discussions.
|
|
148
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md). Questions are welcome in GitHub Discussions.
|
|
@@ -7,9 +7,6 @@
|
|
|
7
7
|
<a href="https://www.gnu.org/licenses/gpl-3.0"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg" alt="License: GPL v3"/></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
|
-
<!-- The Docs/PyPI badges populate once the project is published; the Python and
|
|
11
|
-
License badges are static. -->
|
|
12
|
-
|
|
13
10
|
**Differentiable tools for string compactifications in JAX.**
|
|
14
11
|
|
|
15
12
|
StringJAX is the umbrella project for a family of interoperating, separately
|
|
@@ -39,16 +36,17 @@ pip install "stringjax[all]" # + databases (StringForge) and the flux-boundi
|
|
|
39
36
|
GPU/TPU/Apple-Silicon need one extra step for JAX — see the
|
|
40
37
|
[installation guide](https://stringjax.readthedocs.io/en/latest/install.html).
|
|
41
38
|
|
|
42
|
-
> Note: `stringjax` is
|
|
43
|
-
>
|
|
39
|
+
> Note: `stringjax` is released under **GPL-3.0-or-later**, matching the licence
|
|
40
|
+
> of `jaxvacua`; your usage of the ecosystem is subject to those terms.
|
|
44
41
|
|
|
45
42
|
## Packages
|
|
46
43
|
|
|
47
44
|
| Package | Role | Install | Docs | GitHub |
|
|
48
45
|
|----------------|-------------------------------------|-----------------------------|------|--------|
|
|
49
|
-
| **JAXVacua** | Type IIB flux-vacuum engine | `pip install jaxvacua` | [DOC](https://jaxvacua.readthedocs.io) | ([GitHub](https://github.com/
|
|
50
|
-
| **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/
|
|
51
|
-
| **StringForge**| Calabi
|
|
46
|
+
| **JAXVacua** | Type IIB flux-vacuum engine | `pip install jaxvacua` | [DOC](https://jaxvacua.readthedocs.io) | ([GitHub](https://github.com/StringJAX/jaxvacua)) |
|
|
47
|
+
| **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/StringJAX/jaxpolylog)) |
|
|
48
|
+
| **StringForge**| Calabi-Yau databases & vacua vault | `pip install stringforge` | [DOC](https://stringforge.readthedocs.io) | ([GitHub](https://github.com/StringJAX/stringforge)) |
|
|
49
|
+
| **StringJAX Tools** | Shared JAX transform helpers | `pip install stringjax-tools` | [DOC](https://stringjax-tools.readthedocs.io) | ([GitHub](https://github.com/StringJAX/stringjax_tools)) |
|
|
52
50
|
|
|
53
51
|
`StringJAX` itself is the project/brand and is *not* an installable physics package.
|
|
54
52
|
|
|
@@ -57,17 +55,17 @@ GPU/TPU/Apple-Silicon need one extra step for JAX — see the
|
|
|
57
55
|
```python
|
|
58
56
|
import jaxvacua as jvc
|
|
59
57
|
|
|
60
|
-
jvc.set_precision("float64")
|
|
61
|
-
|
|
62
|
-
finder = jvc.FluxVacuaFinder.
|
|
63
|
-
vacua
|
|
58
|
+
jvc.set_precision("float64") # before heavy compute
|
|
59
|
+
eft = jvc.FluxEFT(h12=2, model_ID=1, limit="LCS", maximum_degree=5)
|
|
60
|
+
finder = jvc.FluxVacuaFinder.from_eft(eft)
|
|
61
|
+
vacua = finder.sample_SUSY_flux_vacua(N=100, mode="ISD")
|
|
64
62
|
print(len(vacua), "candidate vacua")
|
|
65
63
|
```
|
|
66
64
|
|
|
67
65
|
Check your environment at any time:
|
|
68
66
|
|
|
69
67
|
```bash
|
|
70
|
-
stringjax doctor # versions, JAX backend/devices, float64 status, Gurobi
|
|
68
|
+
stringjax doctor # versions, JAX backend/devices, float64 status, Gurobi presence
|
|
71
69
|
stringjax versions # just the member-package versions
|
|
72
70
|
```
|
|
73
71
|
|
|
@@ -106,5 +104,4 @@ collected in the documentation.
|
|
|
106
104
|
|
|
107
105
|
## Contributing
|
|
108
106
|
|
|
109
|
-
See [`CONTRIBUTING.md`](CONTRIBUTING.md)
|
|
110
|
-
[code of conduct](CODE_OF_CONDUCT.md). Questions are welcome in GitHub Discussions.
|
|
107
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md). Questions are welcome in GitHub Discussions.
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# Documentation toolchain for the StringJAX hub.
|
|
2
2
|
# Mirrors jaxvacua/documentation/requirements.txt so both umbrella + member
|
|
3
3
|
# docs build with the same Sphinx + MyST stack. The hub does not import the
|
|
4
|
-
# member physics packages, and conf.py
|
|
5
|
-
# `stringjax
|
|
6
|
-
# ecosystem is published to PyPI.
|
|
4
|
+
# member physics packages, and conf.py reads the version from
|
|
5
|
+
# `stringjax/_version.py`, so the docs build without installing stringjax.
|
|
7
6
|
tqdm
|
|
8
7
|
Sphinx
|
|
9
8
|
sphinx-book-theme
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# About StringJAX
|
|
2
2
|
|
|
3
3
|
StringJAX is an umbrella project for differentiable, JAX-native tools that study
|
|
4
|
-
string compactifications — from Calabi
|
|
4
|
+
string compactifications — from Calabi-Yau geometry through the four-dimensional
|
|
5
5
|
effective theory to moduli stabilisation and phenomenology. This page explains why
|
|
6
6
|
the project exists, the principles it is built on, and where it is heading.
|
|
7
7
|
|
|
@@ -42,7 +42,7 @@ StringJAX takes a different starting point. By building every component on
|
|
|
42
42
|
|
|
43
43
|
| Layer | Member package | Responsibility |
|
|
44
44
|
|-------|----------------|----------------|
|
|
45
|
-
| Geometry & data | **StringForge** | Calabi
|
|
45
|
+
| Geometry & data | **StringForge** | Calabi-Yau databases and the vacua vault |
|
|
46
46
|
| Special functions | **JAXPolyLog** | Differentiable polylogarithms / instanton sums |
|
|
47
47
|
| Effective theory & vacua | **JAXVacua** | Type IIB flux-EFT construction and vacuum search |
|
|
48
48
|
| Distribution | **StringJAX** | Installer, environment doctor, documentation hub |
|
|
@@ -74,12 +74,11 @@ can evolve at their own pace without coordinated "big bang" releases.
|
|
|
74
74
|
- **Versioning.** The umbrella follows [Semantic Versioning](https://semver.org)
|
|
75
75
|
and pins members to compatible ranges; see the {doc}`compatibility` matrix. A
|
|
76
76
|
member's breaking change widens the umbrella's window in a new minor release.
|
|
77
|
-
- **Licensing.** The `stringjax` metapackage is
|
|
78
|
-
|
|
79
|
-
to those terms. See {doc}`install`.
|
|
77
|
+
- **Licensing.** The `stringjax` metapackage is released under
|
|
78
|
+
**GPL-3.0-or-later**, matching the licence of `jaxvacua`; downstream use of the
|
|
79
|
+
ecosystem is subject to those terms. See {doc}`install`.
|
|
80
80
|
- **Citation.** Users cite the specific member packages they used, not the
|
|
81
81
|
umbrella; see {doc}`citation`.
|
|
82
82
|
- **Contributions.** Physics belongs in the member repositories; the umbrella
|
|
83
83
|
accepts packaging, tooling, and documentation changes. See the project's
|
|
84
|
-
contributing guide
|
|
85
|
-
```
|
|
84
|
+
contributing guide.
|
|
@@ -32,7 +32,7 @@ The flux-vacuum engine. Cite the release paper and the archived software version
|
|
|
32
32
|
title = {{JAXPolyLog}: differentiable polylogarithms in {JAX}},
|
|
33
33
|
year = {2026},
|
|
34
34
|
note = {TODO: Zenodo DOI},
|
|
35
|
-
url = {https://github.com/
|
|
35
|
+
url = {https://github.com/StringJAX/jaxpolylog},
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Compatibility matrix
|
|
2
|
+
|
|
3
|
+
The `stringjax` metapackage installs a mutually-tested set of member packages. It
|
|
4
|
+
uses **compatible version ranges** (e.g. `>=0.1,<0.2`) so that *patch* releases of a
|
|
5
|
+
member require no new `stringjax` release; a new `stringjax` is published only when a
|
|
6
|
+
member's compatibility window changes.
|
|
7
|
+
|
|
8
|
+
| `stringjax` | `jaxvacua` | `jaxpolylog` | `stringforge` | `stringjax-tools` | Python |
|
|
9
|
+
|-------------|--------------|--------------|---------------|-------------------|--------|
|
|
10
|
+
| 0.1.1 | >=0.1.3,<0.2 | >=0.4 (a) | >=0.1.3,<0.2 | >=0.1 (a) | >=3.12 |
|
|
11
|
+
| 0.1.0 | >=0.1,<0.2 | (a) | >=0.1,<0.2 | (a) | >=3.12 |
|
|
12
|
+
|
|
13
|
+
```{note}
|
|
14
|
+
(a) `jaxpolylog`, `stringjax-tools` and `cytools` are installed transitively through
|
|
15
|
+
`jaxvacua`; `stringjax` itself does not constrain them, so their ranges are those of
|
|
16
|
+
the installed `jaxvacua` (from `jaxvacua` 0.1.3 on: `jaxpolylog>=0.4.0`,
|
|
17
|
+
`stringjax-tools>=0.1.0`). The 0.1.0 documentation listed `jaxpolylog>=0.3,<0.4`, a
|
|
18
|
+
bound that no package enforced.
|
|
19
|
+
`stringforge` is installed via the `data` or `all` extras.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Reproducibility
|
|
23
|
+
|
|
24
|
+
For bit-stable reproduction of a specific study, install from the pinned files in the
|
|
25
|
+
repository:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install -r requirements-cpu.txt -c constraints.txt
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
and record the output of `stringjax versions` (or `stringjax doctor`) alongside your
|
|
32
|
+
results.
|
|
@@ -8,56 +8,59 @@ grid-card landing page.
|
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
import re
|
|
12
|
+
from pathlib import Path
|
|
12
13
|
|
|
13
14
|
# -- Project information -----------------------------------------------------
|
|
14
|
-
project
|
|
15
|
-
author
|
|
15
|
+
project = "StringJAX"
|
|
16
|
+
author = "Andreas Schachner"
|
|
16
17
|
copyright = "2026, Andreas Schachner"
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
# The version from the source tree (``stringjax/_version.py``), not from installed metadata:
|
|
20
|
+
# Read the Docs installs only the documentation requirements, and an installed stringjax
|
|
21
|
+
# may be an older release.
|
|
22
|
+
_version_py = Path(__file__).resolve().parents[2] / "stringjax" / "_version.py"
|
|
23
|
+
_match = re.search(r'^__version__\s*=\s*"([^"]+)"', _version_py.read_text(), re.MULTILINE)
|
|
24
|
+
release = _match.group(1) if _match else "0.0.0"
|
|
22
25
|
version = ".".join(release.split(".")[:2])
|
|
23
26
|
|
|
24
27
|
|
|
25
28
|
# -- General configuration ---------------------------------------------------
|
|
26
29
|
extensions = [
|
|
27
|
-
"sphinx.ext.autodoc",
|
|
30
|
+
"sphinx.ext.autodoc", # optional autodoc for any local module
|
|
28
31
|
"sphinx.ext.autosummary",
|
|
29
|
-
"sphinx.ext.intersphinx",
|
|
32
|
+
"sphinx.ext.intersphinx", # cross-link to member docs + NumPy / JAX / SciPy
|
|
30
33
|
"sphinx.ext.mathjax",
|
|
31
|
-
"sphinx.ext.napoleon",
|
|
34
|
+
"sphinx.ext.napoleon", # NumPy / Google-style docstrings
|
|
32
35
|
"sphinx_autodoc_typehints",
|
|
33
36
|
"sphinx_copybutton",
|
|
34
37
|
"sphinx_design",
|
|
35
38
|
"sphinx_togglebutton",
|
|
36
39
|
"sphinxcontrib.mermaid",
|
|
37
|
-
"myst_nb",
|
|
40
|
+
"myst_nb", # Markdown + executable notebooks
|
|
38
41
|
]
|
|
39
42
|
|
|
40
43
|
source_suffix = {
|
|
41
|
-
".rst":
|
|
42
|
-
".md":
|
|
44
|
+
".rst": "restructuredtext",
|
|
45
|
+
".md": "myst-nb",
|
|
43
46
|
".ipynb": "myst-nb",
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
# The hub orients; it does not execute heavy notebooks itself. Cell
|
|
47
50
|
# outputs that ship in the .ipynb files are rendered as-is.
|
|
48
|
-
nb_execution_mode
|
|
51
|
+
nb_execution_mode = "off"
|
|
49
52
|
nb_execution_allow_errors = False
|
|
50
|
-
nb_merge_streams
|
|
51
|
-
nb_execution_timeout
|
|
53
|
+
nb_merge_streams = True
|
|
54
|
+
nb_execution_timeout = 120
|
|
52
55
|
|
|
53
56
|
myst_enable_extensions = ["colon_fence", "deflist", "linkify", "dollarmath"]
|
|
54
|
-
myst_heading_anchors
|
|
57
|
+
myst_heading_anchors = 4
|
|
55
58
|
|
|
56
59
|
autosummary_generate = True
|
|
57
|
-
napoleon_use_rtype
|
|
58
|
-
add_module_names
|
|
60
|
+
napoleon_use_rtype = False
|
|
61
|
+
add_module_names = False
|
|
59
62
|
|
|
60
|
-
templates_path
|
|
63
|
+
templates_path = ["_templates"]
|
|
61
64
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
|
62
65
|
suppress_warnings = [
|
|
63
66
|
# member-package autodoc can emit cosmetic warnings about Google-style
|
|
@@ -67,16 +70,16 @@ suppress_warnings = [
|
|
|
67
70
|
|
|
68
71
|
|
|
69
72
|
# -- HTML output -------------------------------------------------------------
|
|
70
|
-
html_theme
|
|
71
|
-
html_title
|
|
72
|
-
html_static_path
|
|
73
|
+
html_theme = "sphinx_book_theme"
|
|
74
|
+
html_title = "StringJAX"
|
|
75
|
+
html_static_path = ["_static"]
|
|
73
76
|
html_theme_options = {
|
|
74
|
-
"repository_url":
|
|
75
|
-
"repository_branch":
|
|
76
|
-
"path_to_docs":
|
|
77
|
-
"use_repository_button":
|
|
78
|
-
"use_issues_button":
|
|
79
|
-
"use_edit_page_button":
|
|
77
|
+
"repository_url": "https://github.com/StringJAX/stringjax",
|
|
78
|
+
"repository_branch": "main",
|
|
79
|
+
"path_to_docs": "documentation/source",
|
|
80
|
+
"use_repository_button": True,
|
|
81
|
+
"use_issues_button": True,
|
|
82
|
+
"use_edit_page_button": True,
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
|
|
@@ -91,11 +94,11 @@ mathjax3_config = {
|
|
|
91
94
|
# Cross-references into the member packages' documentation. Mappings are
|
|
92
95
|
# enabled only when a stable ``objects.inv`` is published.
|
|
93
96
|
intersphinx_mapping = {
|
|
94
|
-
"python":
|
|
95
|
-
"numpy":
|
|
96
|
-
"scipy":
|
|
97
|
-
"jax":
|
|
98
|
-
"jaxpolylog": ("https://jaxpolylog.readthedocs.io/en/latest",
|
|
97
|
+
"python": ("https://docs.python.org/3", None),
|
|
98
|
+
"numpy": ("https://numpy.org/doc/stable", None),
|
|
99
|
+
"scipy": ("https://docs.scipy.org/doc/scipy", None),
|
|
100
|
+
"jax": ("https://jax.readthedocs.io/en/latest", None),
|
|
101
|
+
"jaxpolylog": ("https://jaxpolylog.readthedocs.io/en/latest", None),
|
|
99
102
|
# "jaxvacua": ("https://jaxvacua.readthedocs.io/en/latest", None),
|
|
100
103
|
# "stringforge":("https://stringforge.readthedocs.io/en/latest", None),
|
|
101
104
|
}
|
|
@@ -8,7 +8,6 @@ StringForge); this `stringjax` repository hosts only the metapackage, the
|
|
|
8
8
|
For the full guidelines — development setup, running the tests, building the docs,
|
|
9
9
|
and the pull-request checklist — see the
|
|
10
10
|
[`CONTRIBUTING.md`](https://github.com/StringJAX/stringjax/blob/main/CONTRIBUTING.md)
|
|
11
|
-
in the repository root
|
|
12
|
-
[code of conduct](https://github.com/StringJAX/stringjax/blob/main/CODE_OF_CONDUCT.md).
|
|
11
|
+
in the repository root.
|
|
13
12
|
|
|
14
13
|
Questions and "how do I …?" discussions are best raised in GitHub Discussions.
|