gliquid 0.3.0__tar.gz → 0.3.2__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 (141) hide show
  1. {gliquid-0.3.0 → gliquid-0.3.2}/.githooks/pre-commit +4 -10
  2. {gliquid-0.3.0 → gliquid-0.3.2}/.github/workflows/release.yml +5 -19
  3. {gliquid-0.3.0 → gliquid-0.3.2}/.github/workflows/tests.yml +9 -15
  4. gliquid-0.3.2/.gitignore +42 -0
  5. {gliquid-0.3.0 → gliquid-0.3.2}/CHANGELOG.md +208 -1
  6. {gliquid-0.3.0 → gliquid-0.3.2}/CITATION.cff +3 -5
  7. {gliquid-0.3.0 → gliquid-0.3.2}/CONTRIBUTING.md +11 -20
  8. {gliquid-0.3.0 → gliquid-0.3.2}/PKG-INFO +1 -1
  9. {gliquid-0.3.0 → gliquid-0.3.2}/conftest.py +3 -3
  10. gliquid-0.3.2/notebooks/GaRu_adjustment.ipynb +377 -0
  11. gliquid-0.3.2/notebooks/PbTb_adjustment.ipynb +320 -0
  12. {gliquid-0.3.0 → gliquid-0.3.2}/notebooks/colab_demo.ipynb +3 -1
  13. gliquid-0.3.2/notebooks/fitting_demo.ipynb +335 -0
  14. gliquid-0.3.2/notebooks/interpolation_demo.ipynb +137 -0
  15. gliquid-0.3.2/pyproject.toml +141 -0
  16. {gliquid-0.3.0 → gliquid-0.3.2}/scripts/run_notebooks.py +2 -4
  17. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/_version.py +2 -2
  18. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/api.py +13 -7
  19. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/binary.py +293 -41
  20. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/cache.py +3 -0
  21. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/lifecycle.py +1 -1
  22. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/ternary_imputation.py +18 -1
  23. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/liquidus_sheets.py +70 -21
  24. {gliquid-0.3.0/src/gliquid/models/20261013_191431 → gliquid-0.3.2/src/gliquid/models/20261028_105725}/feature_names.json +29 -31
  25. gliquid-0.3.2/src/gliquid/models/20261028_105725/features_antisymmetric.json +1 -0
  26. gliquid-0.3.2/src/gliquid/models/20261028_105725/features_symmetric.json +1 -0
  27. gliquid-0.3.2/src/gliquid/models/20261028_105725/manifest.json +447 -0
  28. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/L0_a.ubj +0 -0
  29. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/L0_b.ubj +0 -0
  30. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/L1_a.ubj +0 -0
  31. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/best_params.json +26 -0
  32. {gliquid-0.3.0/src/gliquid/models/20261013_191431 → gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0}/metadata.json +2 -2
  33. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/model_summary.txt +53 -0
  34. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_0/preprocess.json +317 -0
  35. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/L0_a.ubj +0 -0
  36. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/L0_b.ubj +0 -0
  37. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/L1_a.ubj +0 -0
  38. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/best_params.json +26 -0
  39. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/metadata.json +37 -0
  40. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/model_summary.txt +53 -0
  41. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_10/preprocess.json +317 -0
  42. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/L0_a.ubj +0 -0
  43. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/L0_b.ubj +0 -0
  44. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/L1_a.ubj +0 -0
  45. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/best_params.json +26 -0
  46. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/metadata.json +37 -0
  47. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/model_summary.txt +53 -0
  48. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_20/preprocess.json +317 -0
  49. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/L0_a.ubj +0 -0
  50. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/L0_b.ubj +0 -0
  51. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/L1_a.ubj +0 -0
  52. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/best_params.json +26 -0
  53. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/metadata.json +37 -0
  54. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/model_summary.txt +53 -0
  55. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_30/preprocess.json +317 -0
  56. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/L0_a.ubj +0 -0
  57. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/L0_b.ubj +0 -0
  58. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/L1_a.ubj +0 -0
  59. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/best_params.json +26 -0
  60. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/metadata.json +37 -0
  61. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/model_summary.txt +53 -0
  62. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_42/preprocess.json +317 -0
  63. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/L0_a.ubj +0 -0
  64. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/L0_b.ubj +0 -0
  65. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/L1_a.ubj +0 -0
  66. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/best_params.json +26 -0
  67. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/metadata.json +37 -0
  68. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/model_summary.txt +53 -0
  69. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_50/preprocess.json +317 -0
  70. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/L0_a.ubj +0 -0
  71. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/L0_b.ubj +0 -0
  72. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/L1_a.ubj +0 -0
  73. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/best_params.json +26 -0
  74. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/metadata.json +37 -0
  75. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/model_summary.txt +53 -0
  76. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_60/preprocess.json +317 -0
  77. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/L0_a.ubj +0 -0
  78. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/L0_b.ubj +0 -0
  79. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/L1_a.ubj +0 -0
  80. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/best_params.json +26 -0
  81. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/metadata.json +37 -0
  82. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/model_summary.txt +53 -0
  83. gliquid-0.3.2/src/gliquid/models/20261028_105725/seed_70/preprocess.json +317 -0
  84. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/phase.py +35 -4
  85. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/ternary_surface.py +12 -6
  86. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/production_model_runner.py +237 -86
  87. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/reference/phase_transitions.json +2065 -1552
  88. gliquid-0.3.2/src/gliquid/reference/spurious_structures.json +1037 -0
  89. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/solution.py +125 -17
  90. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/ternary.py +116 -30
  91. gliquid-0.3.2/tox.ini +89 -0
  92. gliquid-0.3.0/.gitignore +0 -55
  93. gliquid-0.3.0/notebooks/GaRu_adjustment.ipynb +0 -7861
  94. gliquid-0.3.0/notebooks/PbTb_adjustment.ipynb +0 -7686
  95. gliquid-0.3.0/notebooks/fitting_demo.ipynb +0 -18603
  96. gliquid-0.3.0/notebooks/interpolation_demo.ipynb +0 -324
  97. gliquid-0.3.0/pyproject.toml +0 -237
  98. gliquid-0.3.0/src/gliquid/models/20261013_191431/L0_a.ubj +0 -0
  99. gliquid-0.3.0/src/gliquid/models/20261013_191431/L0_b.ubj +0 -0
  100. gliquid-0.3.0/src/gliquid/models/20261013_191431/L1_a.ubj +0 -0
  101. gliquid-0.3.0/src/gliquid/models/20261013_191431/best_params.json +0 -26
  102. gliquid-0.3.0/src/gliquid/models/20261013_191431/features_antisymmetric.json +0 -1
  103. gliquid-0.3.0/src/gliquid/models/20261013_191431/features_symmetric.json +0 -1
  104. gliquid-0.3.0/src/gliquid/models/20261013_191431/manifest.json +0 -164
  105. gliquid-0.3.0/src/gliquid/models/20261013_191431/model_summary.txt +0 -53
  106. gliquid-0.3.0/src/gliquid/models/20261013_191431/preprocess.json +0 -323
  107. gliquid-0.3.0/src/gliquid/reference/spurious_structures.json +0 -328
  108. gliquid-0.3.0/tox.ini +0 -137
  109. {gliquid-0.3.0 → gliquid-0.3.2}/.gitattributes +0 -0
  110. {gliquid-0.3.0 → gliquid-0.3.2}/.github/CODEOWNERS +0 -0
  111. {gliquid-0.3.0 → gliquid-0.3.2}/.github/dependabot.yml +0 -0
  112. {gliquid-0.3.0 → gliquid-0.3.2}/LICENSE +0 -0
  113. {gliquid-0.3.0 → gliquid-0.3.2}/README.md +0 -0
  114. {gliquid-0.3.0 → gliquid-0.3.2}/assets/digitized_pd_anatomy.png +0 -0
  115. {gliquid-0.3.0 → gliquid-0.3.2}/assets/gliq_logo_tall.png +0 -0
  116. {gliquid-0.3.0 → gliquid-0.3.2}/assets/invariant_points_and_reactions.png +0 -0
  117. {gliquid-0.3.0 → gliquid-0.3.2}/assets/ru_si_assessed_pd.png +0 -0
  118. {gliquid-0.3.0 → gliquid-0.3.2}/requirements/min-constraints.txt +0 -0
  119. {gliquid-0.3.0 → gliquid-0.3.2}/scripts/run_colab_notebook.py +0 -0
  120. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/__init__.py +0 -0
  121. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/config.py +0 -0
  122. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/hsx.py +0 -0
  123. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/hull_editor.py +0 -0
  124. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/__init__.py +0 -0
  125. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/ablation.py +0 -0
  126. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/binary_imputation.py +0 -0
  127. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/imputation/core.py +0 -0
  128. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/models/.gitkeep +0 -0
  129. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/mpds.py +0 -0
  130. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/__init__.py +0 -0
  131. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/binary_figs.py +0 -0
  132. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/binary_tx.py +0 -0
  133. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/export.py +0 -0
  134. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/liquidus_fields.py +0 -0
  135. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/phase_highlight.py +0 -0
  136. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/style.py +0 -0
  137. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/ternary_labels.py +0 -0
  138. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/plotting/ternary_projection.py +0 -0
  139. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/reference/omegas_hcp.json +0 -0
  140. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/shap_compat.py +0 -0
  141. {gliquid-0.3.0 → gliquid-0.3.2}/src/gliquid/solid_coverage.py +0 -0
@@ -1,13 +1,7 @@
1
1
  #!/bin/sh
2
- # ruff format gate for staged Python, over the same three paths the CI lint job checks.
3
- #
4
- # Reformats the staged files and re-stages them, so the commit records formatted code. A file
5
- # with unstaged changes alongside its staged ones is left alone and the commit aborts: `git add`
6
- # on a partially staged file would sweep the unstaged hunks into the commit too.
7
- #
8
- # Activate: git config core.hooksPath .githooks
9
- # Skip once: git commit --no-verify
10
- # `ruff check` is not run here; the CI lint job runs it and fails on any finding.
2
+ # ruff format for staged Python under src/gliquid and tests/, re-staged after formatting.
3
+ # A file that also has unstaged changes aborts the commit instead of being re-staged.
4
+ # Activate: git config core.hooksPath .githooks. `ruff check` runs in CI, not here.
11
5
 
12
6
  ruff_bin=""
13
7
  if [ -n "$GLIQUID_RUFF" ] && [ -x "$GLIQUID_RUFF" ]; then
@@ -31,7 +25,7 @@ run_ruff() {
31
25
  }
32
26
 
33
27
  staged=$(git diff --cached --name-only --diff-filter=ACM \
34
- | grep -E '^(src/gliquid|tests|tests_internal)/.*\.py$')
28
+ | grep -E '^(src/gliquid|tests)/.*\.py$')
35
29
  [ -n "$staged" ] || exit 0
36
30
 
37
31
  unstaged=$(git diff --name-only)
@@ -6,11 +6,7 @@ on:
6
6
  push:
7
7
  tags: ['v*']
8
8
 
9
- # No API token appears anywhere in this file, by design. Both publish jobs use PyPI Trusted
10
- # Publishing (OIDC): GitHub mints a short-lived identity token at job runtime from
11
- # `permissions: id-token: write`, and the index trusts this repository + workflow + GitHub
12
- # environment. The token-based alternative (a stored __token__ password) is deliberately not
13
- # used -- a leaked long-lived token is exactly what Trusted Publishing removes.
9
+ # No API token: both publish jobs use PyPI Trusted Publishing (OIDC via id-token: write).
14
10
  permissions:
15
11
  contents: read
16
12
 
@@ -22,11 +18,7 @@ jobs:
22
18
  steps:
23
19
  - uses: actions/checkout@v4
24
20
  with:
25
- # NOT optional, and the single most dangerous thing to get wrong in this file.
26
- # hatch-vcs reads the version from git tags; the default shallow clone has none.
27
- # The build would NOT fail -- it would silently emit the pyproject
28
- # fallback-version (0.0.0) and publish it. That fallback is 0.0.0 rather than the
29
- # release version precisely so this failure is visible in the artifact name.
21
+ # Required: without tags hatch-vcs silently builds and publishes version 0.0.0.
30
22
  fetch-depth: 0
31
23
 
32
24
  - name: Set up Python
@@ -46,8 +38,7 @@ jobs:
46
38
  run: twine check dist/*
47
39
 
48
40
  - name: Show built version
49
- # Cheap tripwire for the fetch-depth failure above: a 0.0.0 filename here means the
50
- # tag was not visible to hatch-vcs, and nothing downstream should be released.
41
+ # A 0.0.0 filename means the build missed the tag: release nothing.
51
42
  run: ls -l dist/
52
43
 
53
44
  - name: Upload distributions
@@ -76,19 +67,14 @@ jobs:
76
67
  uses: pypa/gh-action-pypi-publish@release/v1
77
68
  with:
78
69
  repository-url: https://test.pypi.org/legacy/
70
+ skip-existing: true
79
71
 
80
72
  pypi:
81
73
  name: Publish to PyPI
82
74
  needs: [testpypi]
83
75
  runs-on: ubuntu-latest
84
76
 
85
- # LOAD-BEARING, NOT DECORATION. The `pypi` GitHub environment carries a
86
- # required-reviewer protection rule, configured in the repository settings UI and not
87
- # expressible in this file. That rule is the entire reason "TestPyPI first, then PyPI"
88
- # is real rather than aspirational: the run pauses here until a maintainer has looked at
89
- # what TestPyPI accepted and approves the deployment. Removing this line -- or deleting
90
- # the environment because it "looks empty" -- turns an irreversible publish into an
91
- # unattended one. PyPI cannot un-publish a version.
77
+ # Required: the `pypi` environment's reviewer rule pauses the run before PyPI. Do not remove.
92
78
  environment: pypi
93
79
  permissions:
94
80
  id-token: write # OIDC identity for Trusted Publishing; see the note at the top
@@ -1,8 +1,6 @@
1
1
  name: Run Tests
2
2
 
3
- # Every branch, not just main. This workflow previously triggered on main only, while the
4
- # code being released lived ~90 commits ahead of it -- so it had never actually run against
5
- # the package it guards.
3
+ # Every branch, and pull requests into main.
6
4
  on:
7
5
  push:
8
6
  branches: ['**']
@@ -28,10 +26,7 @@ jobs:
28
26
  steps:
29
27
  - uses: actions/checkout@v4
30
28
  with:
31
- # NOT optional. hatch-vcs derives the version from the git tag, and the default
32
- # shallow clone fetches none. Getting this wrong does not fail the checkout -- it
33
- # silently produces the pyproject fallback-version (0.0.0), which is why that
34
- # fallback is deliberately not the release version.
29
+ # Required: without tags hatch-vcs silently builds version 0.0.0.
35
30
  fetch-depth: 0
36
31
 
37
32
  - name: Set up Python
@@ -49,16 +44,15 @@ jobs:
49
44
  ${{ runner.os }}-pip-
50
45
 
51
46
  - name: Install package and test extra
52
- # Install the declared extra rather than a bare `pip install pytest`, so CI
53
- # exercises the same dependency set a contributor gets from CONTRIBUTING.md.
47
+ # The test extra, as CONTRIBUTING.md installs it.
54
48
  run: |
55
49
  python -m pip install --upgrade pip
56
50
  pip install -e '.[test]'
57
51
 
58
52
  - name: Run cached tests
59
- # Both tiers, in parallel. The live Materials Project fetches are deselected by marker;
60
- # the API job below runs the one in tests_internal.
61
- run: pytest tests tests_internal -n auto --dist worksteal -m "not needs_network" --tb=short --durations=25
53
+ # In parallel. The live Materials Project fetches are deselected by marker; the API
54
+ # job below runs them.
55
+ run: pytest tests -n auto --dist worksteal -m "not needs_network" --tb=short --durations=25
62
56
 
63
57
  test-api:
64
58
  name: API Tests
@@ -95,7 +89,7 @@ jobs:
95
89
  - name: Run API tests
96
90
  env:
97
91
  NEW_MP_API_KEY: ${{ secrets.NEW_MP_API_KEY }}
98
- run: pytest tests_internal/test_dft_data_loading.py -v --tb=short
92
+ run: pytest tests/test_dft_data_loading.py -v --tb=short
99
93
 
100
94
  lint:
101
95
  name: Lint and Format
@@ -117,7 +111,7 @@ jobs:
117
111
  pip install -e '.[test]'
118
112
 
119
113
  - name: Ruff lint
120
- run: ruff check src/gliquid tests tests_internal
114
+ run: ruff check src/gliquid tests
121
115
 
122
116
  - name: Ruff format check
123
- run: ruff format --check src/gliquid tests tests_internal
117
+ run: ruff format --check src/gliquid tests
@@ -0,0 +1,42 @@
1
+ notebooks/constraint_comparison.ipynb
2
+ notebooks/_executed/
3
+
4
+ # tox / compat testing
5
+ .tox/
6
+ compat-test-phase1.log
7
+
8
+ # pytest-testmon's record
9
+ .testmondata*
10
+
11
+ # Python build / cache / packaging artifacts
12
+ __pycache__/
13
+ *.py[cod]
14
+ build/
15
+ *.egg-info/
16
+ # Written by the hatch-vcs build hook.
17
+ src/gliquid/_version.py
18
+
19
+ # Logs
20
+ *.log
21
+
22
+ # Reagent knowledge-graph database (local only)
23
+ .reagent/
24
+
25
+ # Editor/IDE local config
26
+ .vscode/
27
+
28
+ # Local config. Keep tox.ini and requirements/ tracked: the compat matrix needs them.
29
+ .claude/
30
+ CONTEXT.md
31
+ # Path-anchored: rename these with the cache directory, or fetched files start being tracked.
32
+ cache/fit_results_cache_*
33
+ figures/benchmark_*/
34
+ # Newly fetched DFT caches; the tracked fixture set is unaffected.
35
+ cache/*_ENTRIES_MP_GGA.json
36
+
37
+ # Local secrets (API keys) - never commit
38
+ .env
39
+ .env.*
40
+
41
+ scripts/build_branch_feature_cache.py
42
+ tests/_figures/
@@ -9,6 +9,211 @@ source tree carries a version literal that could disagree with this file.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.3.2] - 2026-10-29
13
+
14
+ ### Changed
15
+
16
+ - **The liquid is linearized at its own liquidus, in binaries and ternaries alike.** A liquid whose
17
+ excess terms depend on T ('combined', 'comb-exp') takes its H and S at a composition-dependent
18
+ temperature T*(x), not at the mean component melting point. The first hull takes the
19
+ x-weighted melting point. Each further hull re-evaluates every row at the previous hull's
20
+ liquidus, the step halved where it grew, until no row's |G_lin(T_liq; T*) - G(T_liq)| exceeds
21
+ `DEFAULT_TSTAR_TOL` (0.2143 J/mol, about 2 K of liquidus) or `DEFAULT_TSTAR_MAX_HULLS` (60)
22
+ hulls are built. A binary also needs every row's estimated liquidus shift, that difference
23
+ over the entropy step across its liquidus, at most `DEFAULT_TSTAR_LIQ_TOL` (1 K): near the
24
+ top of a liquid miscibility gap the entropy step vanishes, and a row that meets the energy
25
+ tolerance can still sit tens of K off its converged liquidus as a one-row spike
26
+ (`BinaryLiquid.liquidus_shift_estimate`). A binary checks the rows inside its digitized liquidus; a ternary checks
27
+ every liquid node and stops after `DEFAULT_TERNARY_TSTAR_MAX_HULLS` (3) hulls, the B pass and
28
+ two D passes. On the 96 ternaries of the melting-point benchmark that cap leaves every node's
29
+ liquidus within 3.7 K of the converged one and no melting point or eutectic moved, while
30
+ holding the slowest systems to about 1.7 s per interpolation instead of 2.9 s.
31
+ - The first pass restricts exactly to each binary on a ternary edge, so a ternary edge no longer
32
+ depends on the third element.
33
+ - `liquid_tstar` (on `BinaryLiquid` and `TernaryLiquidInterpolation`) holds the last
34
+ evaluation's T*.
35
+ - Parameters fitted before this change, and the v29.05 model's predictions, render
36
+ differently and should be refit and retrained: the notebook systems' liquidus moves by up to
37
+ 10.5 K (Pb-Tb).
38
+ - Refit over the 853 SOLIDCOV_Q binaries, the fits' exact comb-exp liquidus matches MPDS with a
39
+ mean absolute error of 77.4 K, against 79.9 K for fits under the mean melting point, and
40
+ fitting takes about twice as long.
41
+ - **The unexpected-gap penalty counts only real gaps.** A two-liquid tie of the fitted hull
42
+ counts only where the liquid's exact Gibbs energy, with the solids, also ties two liquids at
43
+ that temperature.
44
+ - **Nelder-Mead returns its best vertex at `max_iter`** instead of raising.
45
+ - **Every initial simplex spans at least `DEFAULT_B_SPREAD_MIN` in L*_b.** A small L*_b vertex
46
+ is moved by the spread rather than scaled by 0.8.
47
+ - **`liquidus_is_continuous` allows one missing grid row**, as its tolerance intends, despite
48
+ floating-point error in the grid spacing.
49
+ - **Ternary imputation reads the liquid's Gibbs energy at the target temperature.**
50
+ `TernaryLiquidInterpolation.liquid_gibbs` takes H and S at the temperature asked for, as the
51
+ binary imputation does. A ternary imputed entry with a T-dependent edge recorded before this
52
+ change reports itself stale (`liquid_gibbs` provenance).
53
+ - **`LiquidusSheets` and `Binodal` take a `TstarField`** (the liquid's T*(x)) in place of one
54
+ temperature. `TernaryLiquidInterpolation.liquid_tstar_field()` builds it.
55
+ - **One test suite.** `tests_internal/` is merged into `tests/`, so a bare `pytest` also runs the
56
+ value pins, figure goldens and cache/network-gated families. Deselect them by marker
57
+ (`-m "not pins"`, `-m "not needs_cache"`).
58
+ - **The unary reference data are anchored on Materials Project GGA/GGA+U energies.**
59
+ `phase_transitions.json` was built from MP's mixed GGA/GGA+U/r2SCAN energies while every
60
+ convex hull uses GGA entries; every DFT energy in it is now the GGA/GGA+U thermo energy. Sources
61
+ are used in a fixed order: MP-GGA for the ground state and every phase it has, the omegas GGA
62
+ lattice stabilities (Chen et al., Nat. Commun. 14, 2856 (2023)) for BCC/FCC/HCP references MP
63
+ lacks or places below the ground state, and SGTE or an assessed literature value only where the
64
+ observed 1 atm phase order needs it or no DFT BCC/FCC/HCP value lands above the ground state.
65
+ - Ten ground states move to the stable 1 atm structure: K and Cs to bcc, Kr and Xe to fcc,
66
+ As to rhombohedral, Se to trigonal, Pu to alpha-Pu (monoclinic), N to alpha-N2 (Pa-3), H to
67
+ solid para-H2 (hcp, mp-24504), and Na to its 9R martensite (R-3m), with bcc from 36 K.
68
+ `expected_gs_spacegroup` in `spurious_structures.json` now covers 85 elements (62 observed
69
+ ground states, the rest from SGTE's stable element reference or the existing anchor), so the
70
+ hull anchor guard covers them too.
71
+ - Every real phase whose ladder enthalpy is SGTE or assessed (28 MP entries, such as gamma-Fe,
72
+ fcc-Co, beta-Zr and the Pu allotropes) is in `spurious_structures.json` with
73
+ `category: "sgte_corrected"`, so no corrected DFT entry reaches a hull; the ladder phase keeps
74
+ the structure and its id becomes `sgte-<El>-<spacegroup>`. 26 further entries with no 1 atm
75
+ stability field are blacklisted as `spurious`, each with a literature source, among them the
76
+ former H anchor (mp-730101, the H sublattice of ammonium dideuterium phosphate); only fibrous
77
+ red P (mp-1198724) is still marked `status: "derived; literature review pending"`. The 7
78
+ computational BCC/FCC/HCP prototypes among them carry `ss_structure`.
79
+ - Liquid references move for fifteen elements: Pu by -47568 J/mol (every Pu step is now SGTE),
80
+ Ti by -2765 J/mol (beta-Ti from 13146.9 to 10381.94 J/mol), Li by -436 J/mol and
81
+ -4.955 J/mol/K (the 9R -> bcc step at 74 K instead of 80 K; Maier et al., Phys. Rev. B 55,
82
+ 113 (1997)), Na by +429 J/mol and +11.93 J/mol/K (the 9R -> bcc step at 36 K), Sr by
83
+ +576 J/mol and +0.628 J/mol/K, Ba by +730 J/mol and +0.73 J/mol/K, and Ca by -31 J/mol and
84
+ -0.043 J/mol/K. Ca, Sr and Ba take the assessment of Alcock, Chase & Itkin (J. Phys. Chem.
85
+ Ref. Data 22, 1 (1993)). Ca: fcc -> bcc at 716 K with 930 J/mol instead of an unverified
86
+ 961 J/mol. Sr: fcc -> bcc at 820 K with 850 J/mol, and fusion at 1041 K with 8000 J/mol,
87
+ instead of SGTE's 844 J/mol at 830 K and CRC's 7430 J/mol at 1050 K. Ba: fusion with
88
+ 7850 J/mol instead of CRC's 7120 J/mol, at the same 1000 K. La, Ce, Sm and Gd take Konings &
89
+ Beneš (J. Phys. Chem. Ref. Data 39, 043102 (2010)), Mn, Fe and the Be transition take
90
+ NIST-JANAF (Chase 1998), and Be's fusion takes Alcock et al.: Sm by +1063 J/mol and
91
+ +1.135 J/mol/K (alpha -> beta at 970 K and beta -> gamma at 1185 K instead of 1190 K and
92
+ 1345 K, with 100, 3170 and 9100 J/mol steps), Be by +1028 J/mol and +0.659 J/mol/K (fusion
93
+ 8000 J/mol instead of 6972 J/mol), Ce by -620 J/mol and -0.579 J/mol/K (fusion 5580 J/mol
94
+ instead of 6200 J/mol), Gd by +183 J/mol and +0.064 J/mol/K (alpha -> beta at 1534 K with
95
+ 3940 J/mol, fusion at 1591 K with 9800 J/mol), Tl by +171 J/mol and +0.289 J/mol/K (fusion
96
+ 4150 J/mol and SGTE's 360 J/mol beta step), Sn by -124 J/mol and -0.433 J/mol/K (SGTE's
97
+ 1966 J/mol beta step instead of 2090 J/mol), Mn by -81 J/mol and +0.034 J/mol/K (2226, 2122
98
+ and 1879 J/mol steps at 980, 1361 and 1412 K) and La by -36 J/mol (beta at 566 K, gamma at
99
+ 1140 K, fusion 6140 J/mol at 1192 K).
100
+ - Solid-solution references (`lattice_stabilities`): 95 change by more than 0.5 J/mol, 21 are
101
+ new and 7 are dropped. Omegas values are measured from the element's MP-GGA ground-state
102
+ energy instead of a shared structure, so FCC-Ga becomes +1923 J/mol instead of 0. Mg and Cd
103
+ FCC come from
104
+ omegas, and In FCC and Hg FCC/HCP from SGTE, because the DFT values before them land below
105
+ the ground state. Hg BCC, which no DFT or SGTE source places above the ground state, takes
106
+ the enthalpy of the fitted end member of the Hg-Tl assessment (Gierlotka, Sopousek &
107
+ Fitzner, Calphad 30, 425 (2006)): +5540 J/mol, id `assessed-Hg-229`, instead of +336 J/mol.
108
+ A structure with no source above the ground state is not emitted and is listed under the
109
+ element's new `excluded_lattice_stabilities` (Eu FCC, Xe BCC).
110
+ Fitted parameters made before this change do not carry over and must be refit.
111
+
112
+ - **A ladder phase is a solid solution's end member only if it has that structure's
113
+ prototype.** Spacegroup 194 holds hcp (hP2), dhcp and graphite (hP4); `Phase` now carries
114
+ `pearson_symbol`, and `ComponentRef.ss_polymorphs` picks the end member by spacegroup and
115
+ prototype. A dhcp or graphite ground state stands in for HCP only when no hP2 lattice stability
116
+ exists, and gliquid logs a warning when it does. Pr's HCP solid solution now uses the hP2
117
+ lattice stability (+2792.66 J/mol) and alpha-Pr (dhcp) stays a line compound beside it; C, La,
118
+ Nd and Sm keep their SG 194 phase as a stand-in.
119
+
120
+ - **`ref_mode="from_dft_entries"` takes the ladder step for a real phase with no DFT entry.** A
121
+ BCC, FCC or HCP phase on the element's ladder that the DFT entries lack, such as one the
122
+ blacklist keeps off hulls, takes its ladder enthalpy above the DFT ground state when that
123
+ ground state has the ladder ground state's spacegroup. Otherwise it is left to the omegas
124
+ fallback and gliquid logs a warning.
125
+
126
+ - **Candidate Nelder-Mead fits converge on one scale and start Lupis-Elliott-consistent.** The
127
+ convergence test weighs an `L*_b` coordinate by the mean liquidus temperature, so `L*_a` and
128
+ `L*_b` are measured by their contribution to `L_k` (J/mol); the tolerance is
129
+ `CANDIDATE_TOL_J_MOL` (100 J/mol). `BinaryLiquid.nelder_mead` takes the per-coordinate `scale`.
130
+ The offset vertex of a candidate's initial simplex moves `L*_b` toward excess entropy of the
131
+ sign of `L*_a` at 0 K, in the linear and `exp(-T/tau)` forms alike.
132
+
133
+ - **The packaged model is v29.07** (bundle `20261028_105725`, replacing `20261017_003407`).
134
+ It is the mean of eight XGBoost models trained at different seeds, on the 854 binaries refit
135
+ with the liquid linearized at its own liquidus, the GGA-anchored unary references and the
136
+ Nelder-Mead changes above, with 49 symmetric and 30 antisymmetric features. On its 100 held-out
137
+ test systems it predicts the liquidus with a mean absolute percentage error of 10.98 % (median
138
+ 8.91 %) and a mean absolute error of 169.6 K. Every predicted parameter changes from 0.3.1.
139
+
140
+ ### Fixed
141
+
142
+ - **The H-S partition seed fit honours a pinned `L*_b`.** In `'comb-exp'` it fitted `L1`
143
+ with `L1_b = L1_a / tau` (zero excess entropy at 0 K) and then handed `L1_a` to candidates that
144
+ hold `L1_b = 0`; it now fits the pinned model throughout.
145
+
146
+ - **The Bi-Sr hull follows the assessed diagram's compounds.** The Materials Project hull has
147
+ vertices at Sr2Bi3 (mp-31150, x_Sr = 0.400) and Sr4Bi3 (mp-30893, x_Sr = 0.571), which the
148
+ assessed Bi-Sr diagram does not draw, and takes the P6_3/mcm polymorph of Sr5Bi3 (mp-29620).
149
+ All three are now in `spurious_structures.json`; the hull becomes SrBi3, Sr11Bi10 and the
150
+ Pnma Sr5Bi3 (mp-1197242).
151
+
152
+ - **The ternary T-x figure draws each solid phase as one vertical segment per composition.**
153
+ `render_tx_surface` joined every point of a phase into one line, which zig-zagged between
154
+ compositions; the segments are now separate.
155
+
156
+ - **`copy.deepcopy` of a `SqliteBackend` returns the same backend** instead of copying the open
157
+ store.
158
+
159
+ ## [0.3.1] - 2026-10-17
160
+
161
+ ### Added
162
+
163
+ - **Seed-averaged model bundles.** `ProductionModelRunner` loads a bundle of several models
164
+ trained at different random seeds and predicts their mean, target by target in physical units.
165
+ A portable bundle declares them as `members` (bundle schema 2, one subdirectory per model with
166
+ its own `preprocess.json` and `<target>.ubj`); a joblib bundle keeps them in
167
+ `model/seed_<s>/`, ordered by `bundle_manifest.json`'s `seeds`. SHAP explanations of such a
168
+ bundle are the mean of its members' explanations, and its golden vector is computed through the
169
+ same mean. Single-model bundles (schema 1) load and predict exactly as before.
170
+
171
+ ### Changed
172
+
173
+ - **Titanium is referenced to alpha-Ti (hcp), not omega-Ti.** omega-Ti (mp-72, P6/mmm) is a
174
+ high-pressure phase that GGA ranks 15 meV/atom below hcp; it is now in
175
+ `spurious_structures.json`, and Ti's expected ground state is SG 194. The ladder loses its
176
+ omega-to-alpha step at 180 K: beta-Ti moves from H = 14610.62 J/mol, S = 19.514 J/(mol K) to
177
+ H = 13146.9 J/mol, S = 11.3826 J/(mol K), and liquid Ti from H = 28760.62 J/mol,
178
+ S = 26.7966 J/(mol K) to H = 27296.9 J/mol, S = 18.6652 J/(mol K). The melting point stays at
179
+ 1943 K. Every hull containing Ti changes, since Ti compound formation energies are re-referenced
180
+ to alpha-Ti. Fitted parameters for Ti binaries made before this change do not carry over and must
181
+ be refit. Refit with the 0.3.0 campaign settings, the six Ti-containing compounds in the
182
+ 101-compound ternary melting-point benchmark go from 292.5 K to 139.2 K mean absolute error: the
183
+ RE-Ti-Ge compounds move from a mean error of -332 K to -130 K, while TiAlAu moves from -93 K to
184
+ -183 K. The full benchmark goes from 151.2 K to 142.1 K. The 32 fitted Ti binaries lose some
185
+ accuracy, from 81.9 K to 90.6 K mean liquidus error, mostly in refractory compound-forming
186
+ systems (Ru-Ti, C-Ti, B-Ti, Re-Ti, Fe-Ti).
187
+
188
+ - **The compact SHAP figure has a fixed layout.**
189
+ `ProductionModelRunner.create_compact_prediction_figure` saves at a fixed size
190
+ (`COMPACT_FIGURE_SIZE`, 8.0 x 4.915 in), sizes its label column for the widest feature name of
191
+ the naming scheme so every bundle draws its bars at the same place, and labels each bar with the
192
+ feature name as written.
193
+
194
+ - **The packaged model is v29.05** (bundle `20261017_003407`, replacing `20261013_191431`).
195
+ It is the mean of eight XGBoost models trained at different seeds (bundle schema 2), on the fits
196
+ refit for the alpha-Ti and Au-Tl changes above, with 49 symmetric and 30 antisymmetric features.
197
+ On its 100 held-out test systems it predicts the liquidus with a mean absolute percentage error
198
+ of 11.99 % (median 10.49 %) and a mean absolute error of 178.7 K. Every predicted parameter
199
+ changes from 0.3.0.
200
+
201
+ ### Fixed
202
+
203
+ - **The Au-Tl hull no longer carries AuTl2.** The assessed Au-Tl diagram is a simple eutectic
204
+ and draws no field at x_Tl = 0.667, but the Materials Project hull has an AuTl2 vertex there
205
+ (mp-30571). It and its same-composition polymorph mp-755435, which would otherwise take its
206
+ place on the hull, are now in `spurious_structures.json`.
207
+
208
+ - **The spurious-structure blacklist matches new-API Materials Project ids.** An entry whose id
209
+ is in the new API's letter spelling (`mp-aaaaadxv`) is matched against a rule written with the
210
+ classic number (`mp-2647`), whether the id is a bare string or a dict. Such entries used to
211
+ pass the blacklist unfiltered.
212
+
213
+ - **The Colab notebooks install on current Colab.** Their install cell adds `pymatgen<2026`, which
214
+ keeps Colab's preinstalled `requests` 2.32.4, and enables Colab's custom widget manager, which
215
+ the hull editor needs.
216
+
12
217
  ## [0.3.0] - 2026-10-13
13
218
 
14
219
  ### Added
@@ -625,7 +830,9 @@ earlier published versions to diff against; this entry describes what the packag
625
830
  - **An empty Materials Project fetch now raises rather than being cached.** A zero-entry result
626
831
  used to be written out as a 2-byte `[]`, which every later read then accepted as a warm cache.
627
832
 
628
- [Unreleased]: https://github.com/willwerj/gliquid_python/compare/v0.3.0...HEAD
833
+ [Unreleased]: https://github.com/willwerj/gliquid_python/compare/v0.3.2...HEAD
834
+ [0.3.2]: https://github.com/willwerj/gliquid_python/compare/v0.3.1...v0.3.2
835
+ [0.3.1]: https://github.com/willwerj/gliquid_python/compare/v0.3.0...v0.3.1
629
836
  [0.3.0]: https://github.com/willwerj/gliquid_python/compare/v0.2.0...v0.3.0
630
837
  [0.2.0]: https://github.com/willwerj/gliquid_python/compare/v0.1.0...v0.2.0
631
838
  [0.1.0]: https://github.com/willwerj/gliquid_python/releases/tag/v0.1.0
@@ -6,11 +6,9 @@ abstract: >-
6
6
  phase boundaries, and for interpolating multicomponent phase diagrams from the fitted binary
7
7
  liquid descriptions.
8
8
  type: software
9
- # NOTE: this version is a literal and nothing derives it. The distribution version comes from
10
- # the git tag via hatch-vcs, so this file and `date-released` below must be bumped BY HAND at
11
- # each release -- see the release checklist in CONTRIBUTING.md.
12
- version: "0.3.0"
13
- date-released: "2026-10-13"
9
+ # A literal: bump `version` and `date-released` by hand at each release (CONTRIBUTING.md).
10
+ version: "0.3.2"
11
+ date-released: "2026-10-29"
14
12
  license: MIT
15
13
  repository-code: "https://github.com/willwerj/gliquid_python"
16
14
  url: "https://viz.whsunresearch.group/gliquid/interactive-matrix.html"
@@ -26,24 +26,15 @@ directory is named `gliquid_python`. The store is the first of: `set_cache_dir()
26
26
 
27
27
  ## Running the tests
28
28
 
29
- Run `pytest` from the repository root. The suite is tiered, and which tier you get depends on
30
- what you pass:
31
-
32
- ```bash
33
- pytest # the public tests/ suite -- the default, and what a contributor runs
34
- pytest tests_internal # the maintainer tier: value pins, figure goldens, gated families
35
- pytest tests tests_internal # everything
36
- ```
37
-
38
- A bare `pytest` collects only `tests/` because `testpaths = ["tests"]` says so in
39
- `pyproject.toml`; `tests_internal/` is tracked in git but never collected implicitly, and it is
40
- excluded from the sdist.
29
+ Run `pytest` from the repository root. It collects `tests/`, which is excluded from the sdist.
30
+ The value pins, figure goldens and gated families carry markers (below), so `-m "not pins"`
31
+ or `-m "not needs_cache"` deselects them.
41
32
 
42
33
  The gate is the whole suite in parallel under pytest-xdist. Run it before you push; CI runs the
43
34
  same command with `-m "not needs_network"`:
44
35
 
45
36
  ```bash
46
- pytest tests tests_internal -n auto --dist worksteal
37
+ pytest -n auto --dist worksteal
47
38
  ```
48
39
 
49
40
  - Use `-n 8` instead of `-n auto` while a fit campaign or another heavy job runs: each worker
@@ -56,8 +47,8 @@ optional and not part of `.[test]`:
56
47
 
57
48
  ```bash
58
49
  pip install pytest-testmon
59
- pytest tests tests_internal --testmon # first run: the whole suite, recording what each test executes
60
- pytest tests tests_internal --testmon # later runs: only the tests your edits affect
50
+ pytest --testmon # first run: the whole suite, recording what each test executes
51
+ pytest --testmon # later runs: only the tests your edits affect
61
52
  ```
62
53
 
63
54
  It keeps its record in `.testmondata` at the repository root (git-ignored), needs the cache
@@ -68,7 +59,7 @@ source as text, are not selected by a change under `src/`, so run the gate befor
68
59
  Without testmon, run one module (`pytest tests/test_phase.py`), or rerun the last failures with
69
60
  `--lf` (it also needs the cache provider).
70
61
 
71
- Only git-tracked test files are collected from `tests/` and `tests_internal/`. An untracked or
62
+ Only git-tracked test files are collected from `tests/`. An untracked or
72
63
  ignored `test_*.py` is skipped and listed in the terminal summary; `git add` it, or name it on
73
64
  the command line, to run it.
74
65
 
@@ -127,12 +118,12 @@ default, because this codebase already writes to roughly 95–100 characters and
127
118
  calls that read fine today.
128
119
 
129
120
  ```bash
130
- ruff format src/gliquid tests tests_internal # before you push
131
- ruff format --check src/gliquid tests tests_internal
132
- ruff check src/gliquid tests tests_internal # CI fails on any finding, as on unformatted code
121
+ ruff format src/gliquid tests # before you push
122
+ ruff format --check src/gliquid tests
123
+ ruff check src/gliquid tests # CI fails on any finding, as on unformatted code
133
124
  ```
134
125
 
135
- A pre-commit hook in `.githooks/` runs `ruff format` over the staged files in those same three
126
+ A pre-commit hook in `.githooks/` runs `ruff format` over the staged files in those same two
136
127
  paths and re-stages them, so a commit records formatted code. It is **not active until you
137
128
  switch git's hook path to it** — that setting lives in `.git/config` and is not carried by a
138
129
  clone:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: gliquid
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: A package for fitting DFT-referenced liquid free energies from digitized equilibrium phase boundaries
5
5
  Project-URL: Homepage, https://viz.whsunresearch.group/gliquid/interactive-matrix.html
6
6
  Project-URL: TernaryInterpolation, https://viz.whsunresearch.group/gliquid/ternary-interpolation/
@@ -5,7 +5,7 @@ One OpenMP thread. ``OMP_NUM_THREADS`` is set to 1 for the session (XGBoost and
5
5
  every xdist worker and every fresh interpreter a test starts), before anything imports numpy
6
6
  or xgboost. A value already in the environment is kept.
7
7
 
8
- Tracked-only collection. Under ``tests/`` and ``tests_internal/`` only the ``test_*.py`` files
8
+ Tracked-only collection. Under ``tests/`` only the ``test_*.py`` files
9
9
  that git tracks are collected; an untracked or git-ignored one is skipped and listed in the
10
10
  terminal summary. A file named on the command line is always collected. Outside a git work
11
11
  tree, or without ``git`` on PATH, every file is collected.
@@ -25,7 +25,7 @@ Single-file store. Set ``GLIQUID_TEST_SQLITE_STORE=<path>.sqlite`` and the whole
25
25
  against a SQLite cache store instead of the ``cache/`` directory tree::
26
26
 
27
27
  python -m gliquid.cache migrate --from cache --to <path>.sqlite
28
- GLIQUID_TEST_SQLITE_STORE=<path>.sqlite python -m pytest tests tests_internal
28
+ GLIQUID_TEST_SQLITE_STORE=<path>.sqlite python -m pytest tests
29
29
 
30
30
  Unset, the suite runs against the directory store.
31
31
 
@@ -52,7 +52,7 @@ os.environ.setdefault("OMP_NUM_THREADS", "1")
52
52
  _SQLITE_STORE_ENV = "GLIQUID_TEST_SQLITE_STORE"
53
53
  _NO_HULL_MEMO_ENV = "GLIQUID_TEST_NO_HULL_MEMO"
54
54
  _HULL_MEMO_ENTRIES = 4000 # entries held across all memoised hulls; least recently used go first
55
- _GATED_DIRS = ("tests", "tests_internal")
55
+ _GATED_DIRS = ("tests",)
56
56
  _UNTRACKED_KEY = "gliquid_untracked_test_files"
57
57
  _HULL_MEMO_KEY = "gliquid_hull_memo_stats"
58
58
  _tracked_key = pytest.StashKey[frozenset | None]()