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.
Files changed (55) hide show
  1. stringjax-0.1.1/.github/workflows/release.yml +81 -0
  2. {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/test-install.yml +5 -6
  3. {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/test.yml +2 -2
  4. {stringjax-0.1.0 → stringjax-0.1.1}/.readthedocs.yaml +1 -2
  5. stringjax-0.1.1/CHANGELOG.md +52 -0
  6. {stringjax-0.1.0 → stringjax-0.1.1}/CITATION.cff +5 -5
  7. {stringjax-0.1.0 → stringjax-0.1.1}/CONTRIBUTING.md +4 -7
  8. {stringjax-0.1.0 → stringjax-0.1.1}/PKG-INFO +19 -21
  9. {stringjax-0.1.0 → stringjax-0.1.1}/README.md +12 -15
  10. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/requirements.txt +2 -3
  11. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/about.md +6 -7
  12. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/citation.md +1 -1
  13. stringjax-0.1.1/documentation/source/compatibility.md +32 -0
  14. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/conf.py +37 -34
  15. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/contributing.md +1 -2
  16. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/faq.md +3 -3
  17. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/index.rst +2 -3
  18. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/install.md +6 -4
  19. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/design_principles.md +1 -1
  20. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/ecosystem.md +26 -12
  21. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/index.md +5 -5
  22. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/intro/motivation.md +3 -3
  23. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_jaxpolylog.ipynb +18 -13
  24. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_jaxvacua.ipynb +21 -18
  25. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/notebooks/quickstart_stringforge.ipynb +28 -26
  26. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/troubleshooting.md +10 -7
  27. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/tutorials.rst +2 -2
  28. {stringjax-0.1.0 → stringjax-0.1.1}/pyproject.toml +16 -5
  29. {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/_version.py +1 -1
  30. {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/cli.py +1 -1
  31. stringjax-0.1.1/stringjax/doctor.py +130 -0
  32. stringjax-0.1.1/tests/test_doctor.py +89 -0
  33. stringjax-0.1.0/CHANGELOG.md +0 -19
  34. stringjax-0.1.0/documentation/source/compatibility.md +0 -27
  35. stringjax-0.1.0/stringjax/doctor.py +0 -102
  36. stringjax-0.1.0/tests/test_doctor.py +0 -32
  37. {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  38. {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  39. {stringjax-0.1.0 → stringjax-0.1.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  40. {stringjax-0.1.0 → stringjax-0.1.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  41. {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/docs.yml +0 -0
  42. {stringjax-0.1.0 → stringjax-0.1.1}/.github/workflows/lint.yml +0 -0
  43. {stringjax-0.1.0 → stringjax-0.1.1}/.gitignore +0 -0
  44. {stringjax-0.1.0 → stringjax-0.1.1}/LICENSE +0 -0
  45. {stringjax-0.1.0 → stringjax-0.1.1}/constraints.txt +0 -0
  46. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/Makefile +0 -0
  47. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/make.bat +0 -0
  48. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/_static/.gitkeep +0 -0
  49. {stringjax-0.1.0 → stringjax-0.1.1}/documentation/source/_templates/.gitkeep +0 -0
  50. {stringjax-0.1.0 → stringjax-0.1.1}/environment-cpu.yml +0 -0
  51. {stringjax-0.1.0 → stringjax-0.1.1}/requirements-cpu.txt +0 -0
  52. {stringjax-0.1.0 → stringjax-0.1.1}/requirements-gpu.txt +0 -0
  53. {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/__init__.py +0 -0
  54. {stringjax-0.1.0 → stringjax-0.1.1}/stringjax/py.typed +0 -0
  55. {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
- # NOTE: this requires the member packages (jaxvacua, jaxpolylog, ...) to be available
7
- # on PyPI. Until they are published it is run manually / on a schedule only, so that
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 (possibly unpublished) member packages. The doctor/CLI helpers
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: false
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: differentiable, JAX-native tools for string compactifications"
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: MIT
16
- version: 0.1.0
17
- date-released: "2026-01-01"
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 docs/requirements.txt # only if building the docs
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 docs docs/_build/html # docs build (warnings are errors)
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 `docs/compatibility.md`).
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: stringjax
3
- Version: 0.1.0
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 permissively licensed (MIT), but using the ecosystem pulls
83
- > in `jaxvacua`, which is **GPL-3.0**; your usage is subject to those terms.
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/AndreasSchachner/jaxvacua)) |
90
- | **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/AndreasSchachner/jaxpolylog)) |
91
- | **StringForge**| Calabi–Yau databases & vacua vault | `pip install stringforge` | [DOC](https://stringforge.readthedocs.io) | ([GitHub](https://github.com/AndreasSchachner/stringforge)) |
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") # before heavy compute
101
- model = jvc.FluxEFT(h12=2, model_ID=1, limit="LCS", maximum_degree=5)
102
- finder = jvc.FluxVacuaFinder.from_model(model)
103
- vacua = finder.sample_SUSY_flux_vacua(N=100, mode="ISD")
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 availability
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) and the
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 permissively licensed (MIT), but using the ecosystem pulls
43
- > in `jaxvacua`, which is **GPL-3.0**; your usage is subject to those terms.
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/AndreasSchachner/jaxvacua)) |
50
- | **JAXPolyLog** | Differentiable polylogarithms | `pip install jaxpolylog` | [DOC](https://jaxpolylog.readthedocs.io) | ([GitHub](https://github.com/AndreasSchachner/jaxpolylog)) |
51
- | **StringForge**| Calabi–Yau databases & vacua vault | `pip install stringforge` | [DOC](https://stringforge.readthedocs.io) | ([GitHub](https://github.com/AndreasSchachner/stringforge)) |
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") # before heavy compute
61
- model = jvc.FluxEFT(h12=2, model_ID=1, limit="LCS", maximum_degree=5)
62
- finder = jvc.FluxVacuaFinder.from_model(model)
63
- vacua = finder.sample_SUSY_flux_vacua(N=100, mode="ISD")
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 availability
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) and the
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 falls back to a default version if
5
- # `stringjax` itself is not installed, so the docs build even before the
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–Yau geometry through the four-dimensional
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–Yau databases and the vacua vault |
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 MIT-licensed, but installing the
78
- ecosystem pulls in GPL-3.0 members (notably JAXVacua); downstream use is subject
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 and code of conduct.
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/AndreasSchachner/jaxpolylog},
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
- from importlib.metadata import version as _v
11
+ import re
12
+ from pathlib import Path
12
13
 
13
14
  # -- Project information -----------------------------------------------------
14
- project = "StringJAX"
15
- author = "Andreas Schachner"
15
+ project = "StringJAX"
16
+ author = "Andreas Schachner"
16
17
  copyright = "2026, Andreas Schachner"
17
18
 
18
- try:
19
- release = _v("stringjax")
20
- except Exception: # pragma: no cover
21
- release = "0.1.0"
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", # optional autodoc for any local module
30
+ "sphinx.ext.autodoc", # optional autodoc for any local module
28
31
  "sphinx.ext.autosummary",
29
- "sphinx.ext.intersphinx", # cross-link to member docs + NumPy / JAX / SciPy
32
+ "sphinx.ext.intersphinx", # cross-link to member docs + NumPy / JAX / SciPy
30
33
  "sphinx.ext.mathjax",
31
- "sphinx.ext.napoleon", # NumPy / Google-style docstrings
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", # Markdown + executable notebooks
40
+ "myst_nb", # Markdown + executable notebooks
38
41
  ]
39
42
 
40
43
  source_suffix = {
41
- ".rst": "restructuredtext",
42
- ".md": "myst-nb",
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 = "off"
51
+ nb_execution_mode = "off"
49
52
  nb_execution_allow_errors = False
50
- nb_merge_streams = True
51
- nb_execution_timeout = 120
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 = 4
57
+ myst_heading_anchors = 4
55
58
 
56
59
  autosummary_generate = True
57
- napoleon_use_rtype = False
58
- add_module_names = False
60
+ napoleon_use_rtype = False
61
+ add_module_names = False
59
62
 
60
- templates_path = ["_templates"]
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 = "sphinx_book_theme"
71
- html_title = "StringJAX"
72
- html_static_path = ["_static"]
73
+ html_theme = "sphinx_book_theme"
74
+ html_title = "StringJAX"
75
+ html_static_path = ["_static"]
73
76
  html_theme_options = {
74
- "repository_url": "https://github.com/StringJAX/stringjax",
75
- "repository_branch": "main",
76
- "path_to_docs": "documentation/source",
77
- "use_repository_button": True,
78
- "use_issues_button": True,
79
- "use_edit_page_button": True,
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": ("https://docs.python.org/3", None),
95
- "numpy": ("https://numpy.org/doc/stable", None),
96
- "scipy": ("https://docs.scipy.org/doc/scipy", None),
97
- "jax": ("https://jax.readthedocs.io/en/latest", None),
98
- "jaxpolylog": ("https://jaxpolylog.readthedocs.io/en/latest", None),
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 and the
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.