pypsbuilder 2.6.4__tar.gz → 2.6.6__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 (123) hide show
  1. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/.github/workflows/release.yml +9 -9
  2. pypsbuilder-2.6.6/.github/workflows/testing.yml +45 -0
  3. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/.github/workflows/testrelease.yml +2 -2
  4. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/.gitignore +3 -0
  5. pypsbuilder-2.6.6/.pre-commit-config.yaml +21 -0
  6. pypsbuilder-2.6.6/.readthedocs.yaml +27 -0
  7. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/CHANGELOG.md +19 -0
  8. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/CONTRIBUTING.md +3 -2
  9. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/PKG-INFO +74 -23
  10. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/README.md +69 -7
  11. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.TCResult.rst +1 -0
  12. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psexplorer.PXPS.rst +0 -1
  13. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psexplorer.TXPS.rst +0 -1
  14. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.tcapi.TC34API.rst +11 -9
  15. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.tcapi.TC35API.rst +11 -10
  16. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/command-line.rst +38 -8
  17. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/psbuilders-tutorial.rst +31 -17
  18. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/psexplorer-tutorial.rst +11 -5
  19. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pyproject.toml +16 -7
  20. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/__init__.py +4 -4
  21. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/psbuilders.py +497 -71
  22. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/psclasses.py +211 -55
  23. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/psexplorer.py +513 -674
  24. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/tcapi.py +95 -137
  25. pypsbuilder-2.6.6/pypsbuilder/tcinit.py +845 -0
  26. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/tests/test_pclasses.py +36 -0
  27. pypsbuilder-2.6.6/pypsbuilder/tests/test_psbuilders.py +200 -0
  28. pypsbuilder-2.6.6/pypsbuilder/tests/test_psclasses.py +364 -0
  29. pypsbuilder-2.6.6/pypsbuilder/tests/test_psexplorer.py +593 -0
  30. pypsbuilder-2.6.6/pypsbuilder/tests/test_tcapi.py +551 -0
  31. pypsbuilder-2.6.6/pypsbuilder/tests/test_tcinit.py +247 -0
  32. pypsbuilder-2.6.6/pypsbuilder/ui/compile_ui.sh +22 -0
  33. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/ptbuilder.ui +6 -0
  34. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/pxbuilder.ui +6 -0
  35. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/txbuilder.ui +6 -0
  36. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_ptbuilder.py +5 -1
  37. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_pxbuilder.py +5 -1
  38. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_txbuilder.py +5 -1
  39. pypsbuilder-2.6.4/.github/workflows/testing.yml +0 -43
  40. pypsbuilder-2.6.4/.pre-commit-config.yaml +0 -28
  41. pypsbuilder-2.6.4/.readthedocs.yaml +0 -24
  42. pypsbuilder-2.6.4/pypsbuilder/tcinit.py +0 -992
  43. pypsbuilder-2.6.4/pypsbuilder/ui/compile_ui.sh +0 -10
  44. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/.github/dependabot.yml +0 -0
  45. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/.zenodo.json +0 -0
  46. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/AUTHORS.md +0 -0
  47. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/LICENSE +0 -0
  48. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/codecov.yml +0 -0
  49. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/_static/theme_overrides.css +0 -0
  50. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.Dogmin.rst +0 -0
  51. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.InvPoint.rst +0 -0
  52. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.PTsection.rst +0 -0
  53. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.PXsection.rst +0 -0
  54. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.TCResultSet.rst +0 -0
  55. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.TXsection.rst +0 -0
  56. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psclasses.UniLine.rst +0 -0
  57. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api/pypsbuilder.psexplorer.PTPS.rst +0 -0
  58. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/api.rst +0 -0
  59. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/authors.rst +0 -0
  60. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/conf.py +0 -0
  61. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/create_environment.png +0 -0
  62. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/crossing.png +0 -0
  63. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/delta.png +0 -0
  64. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/install_locally.png +0 -0
  65. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/invsearch.png +0 -0
  66. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/isopleths_1.png +0 -0
  67. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/isopleths_2.png +0 -0
  68. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/modes.png +0 -0
  69. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_areas.png +0 -0
  70. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_dogmin.png +0 -0
  71. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_finished.png +0 -0
  72. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_highlight.png +0 -0
  73. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_init.png +0 -0
  74. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_inv.png +0 -0
  75. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_modes.png +0 -0
  76. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psbuilder_uni.png +0 -0
  77. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psiso_alm.png +0 -0
  78. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psiso_labelkey.png +0 -0
  79. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psiso_mode.png +0 -0
  80. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psiso_other.png +0 -0
  81. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/psshow_out.png +0 -0
  82. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/ptpath.png +0 -0
  83. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/show_data.png +0 -0
  84. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/show_grid.png +0 -0
  85. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/show_label.png +0 -0
  86. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/show_out.png +0 -0
  87. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/show_plain.png +0 -0
  88. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/images/status.png +0 -0
  89. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/index.rst +0 -0
  90. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/docs/readme.rst +0 -0
  91. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/environment.yml +0 -0
  92. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite/tc-avgpelite.txt +0 -0
  93. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite/tc-ds62.txt +0 -0
  94. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite/tc-mp50MnNCKFMASHTO.txt +0 -0
  95. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite/tc-prefs.txt +0 -0
  96. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite_34/tc-6axmn.txt +0 -0
  97. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite_34/tc-avgpelite.txt +0 -0
  98. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite_34/tc-ds62.txt +0 -0
  99. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/avgpelite_34/tc-prefs.txt +0 -0
  100. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv1-ic.txt +0 -0
  101. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv1-log.txt +0 -0
  102. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv2-ic.txt +0 -0
  103. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv2-log.txt +0 -0
  104. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv3-ic.txt +0 -0
  105. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/inv3-log.txt +0 -0
  106. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni1-ic.txt +0 -0
  107. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni1-log.txt +0 -0
  108. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni2-ic.txt +0 -0
  109. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni2-log.txt +0 -0
  110. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni3-ic.txt +0 -0
  111. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/examples/outputs/uni3-log.txt +0 -0
  112. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/notebooks/pypsbuilder.ipynb +0 -0
  113. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/images/ptbuilder.png +0 -0
  114. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/images/pxbuilder.png +0 -0
  115. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/images/pypsbuilder.png +0 -0
  116. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/images/txbuilder.png +0 -0
  117. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/tests/__init__.py +0 -0
  118. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/addinv.ui +0 -0
  119. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/adduni.ui +0 -0
  120. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui/uniguess.ui +0 -0
  121. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_addinv.py +0 -0
  122. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_adduni.py +0 -0
  123. {pypsbuilder-2.6.4 → pypsbuilder-2.6.6}/pypsbuilder/ui_uniguess.py +0 -0
@@ -13,20 +13,20 @@ jobs:
13
13
 
14
14
  permissions:
15
15
  id-token: write # IMPORTANT: mandatory for trusted publishing
16
+ contents: read
16
17
 
17
18
  steps:
18
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v7
19
20
  with:
20
21
  persist-credentials: false
22
+
21
23
  - name: Set up Python
22
- uses: actions/setup-python@v5
24
+ uses: astral-sh/setup-uv@v7
23
25
  with:
24
- python-version: "3.x"
25
- - name: Install dependencies
26
- run: |
27
- python -m pip install --upgrade pip
28
- pip install build
26
+ python-version: "3.12"
27
+
29
28
  - name: Build package
30
- run: python -m build
29
+ run: uv build
30
+
31
31
  - name: Publish distribution 📦 to PyPI
32
- uses: pypa/gh-action-pypi-publish@release/v1
32
+ run: uv publish
@@ -0,0 +1,45 @@
1
+ name: Python testing
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - "**"
7
+ pull_request:
8
+
9
+ jobs:
10
+ build:
11
+ name: Package testing
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ python-version: ["3.12", "3.13", "3.14"]
16
+
17
+ env:
18
+ QT_QPA_PLATFORM: offscreen
19
+
20
+ steps:
21
+ - name: Checkout repository
22
+ uses: actions/checkout@v7
23
+
24
+ - name: Set up Python ${{ matrix.python-version }}
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ python-version: ${{ matrix.python-version }}
28
+ enable-cache: true
29
+
30
+ - name: Install Qt runtime dependencies
31
+ run: |
32
+ sudo apt-get update
33
+ sudo apt-get install -y libegl1 libxkbcommon0
34
+
35
+ - name: Install the project
36
+ run: uv sync --extra pyqt6 --extra tests
37
+
38
+ - name: Run Python tests
39
+ run: uv run pytest --cov --cov-branch --cov-report=xml
40
+
41
+ - name: Upload coverage to Codecov
42
+ uses: codecov/codecov-action@v7
43
+ with:
44
+ token: ${{ secrets.CODECOV_TOKEN }}
45
+ slug: ondrolexa/pypsbuilder
@@ -14,11 +14,11 @@ jobs:
14
14
  id-token: write # IMPORTANT: mandatory for trusted publishing
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v7
18
18
  with:
19
19
  persist-credentials: false
20
20
  - name: Set up Python
21
- uses: actions/setup-python@v5
21
+ uses: actions/setup-python@v7
22
22
  with:
23
23
  python-version: "3.x"
24
24
  - name: Install dependencies
@@ -64,3 +64,6 @@ target/
64
64
 
65
65
  # venv
66
66
  .venv/
67
+
68
+ # uv lockfile (not committed for library project)
69
+ uv.lock
@@ -0,0 +1,21 @@
1
+ default_stages: [pre-commit, pre-push]
2
+ repos:
3
+ - repo: https://github.com/astral-sh/ruff-pre-commit
4
+ rev: v0.16.4
5
+ hooks:
6
+ - id: ruff-check
7
+ args: [--fix]
8
+ exclude: ^(venv/|docs/)
9
+ types: ['python']
10
+ - id: ruff-format
11
+ exclude: ^(venv/|docs/)
12
+ types: ['python']
13
+ - repo: local
14
+ hooks:
15
+ - id: pytest
16
+ name: pytest
17
+ entry: uv run pytest
18
+ language: system
19
+ types: [python]
20
+ pass_filenames: false
21
+ always_run: true
@@ -0,0 +1,27 @@
1
+ #.readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.com/platform/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Build documentation in the docs/ directory with Sphinx
9
+ sphinx:
10
+ configuration: docs/conf.py
11
+
12
+ # Optionally build your docs in additional formats such as PDF and ePub
13
+ formats: all
14
+
15
+ build:
16
+ os: ubuntu-26.04
17
+ tools:
18
+ python: "3.13"
19
+
20
+ # Install pypsbuilder with its docs extra via uv, matching the project's
21
+ # uv-based dev workflow (see README.md).
22
+ python:
23
+ install:
24
+ - method: uv
25
+ path: .
26
+ extras:
27
+ - docs
@@ -1,6 +1,25 @@
1
1
  # Changelog
2
2
  All notable pypsbuilder changes.
3
3
 
4
+ ## [2.6.6] - 2026-08-29
5
+ ### Fixed
6
+ - project extra jupyter renamed to lab
7
+
8
+ ## [2.6.5] - 2026-08-29
9
+ ### Added
10
+ - `Import from JSON` menu item in ptbuilder/txbuilder/pxbuilder to batch-import invariant points and univariant lines JSON
11
+ - THERMOCALC 3.51 support in `tcinit`
12
+ ### Fixed
13
+ - security: project files now load through a restricted unpickler, closing an arbitrary-code-execution risk from opening a crafted `.ptb`/`.txb`/`.pxb` file
14
+ - `eval_expr` now supports unary +/- (e.g. `-mode`)
15
+ - fixed crash opening some real project files (`annotate()` got an array instead of a scalar)
16
+ - `PS.show_grid` no longer silently drops its `expr`/`interpolation` arguments
17
+ - fixed `PXPS.fix_solutions` not reseeding THERMOCALC guesses from a solved neighbor before retrying a failed grid point
18
+ - THERMOCALC/drawpd subprocess calls no longer hang indefinitely on an unresponsive process
19
+ - fixed deprecated matplotlib colormap API usage
20
+ ### Changed
21
+ - faster diagram field lookups and grid calculation via spatial indexing and vectorized nearest-point search
22
+
4
23
  ## [2.6.4] - 2025-08-03
5
24
  ### Fixed
6
25
  - TC 3.51 compatibility added
@@ -50,8 +50,9 @@ Ready to contribute? Here's how to set up `pypsbuilder` for local development.
50
50
 
51
51
  1. Just head over to the [GitHub page](https://github.com/ondrolexa/pypsbuilder) and click the "Fork" button. It's just that simple. Once you've done that, you can use your favorite git client to clone your repo.
52
52
 
53
- 2. Create a branch for local development
53
+ 2. Set up a development environment with [uv](https://docs.astral.sh/uv/) and create a branch for local development. See the "Contributing / development install" section in [README.md](README.md) for the full command reference (running tests, formatting/linting with ruff, pre-commit hooks).
54
54
  ```
55
+ $ uv sync --group dev
55
56
  $ git checkout -b name-of-your-bugfix-or-feature
56
57
  ```
57
58
  Now you can make your changes locally.
@@ -70,4 +71,4 @@ Before you submit a pull request, check that it meets these guidelines.
70
71
 
71
72
  1. If the pull request adds functionality, the docs should be updated. Put
72
73
  your new functionality into a function with a docstring, and add the
73
- feature to the list in README.rst.
74
+ feature to the list in README.md.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: pypsbuilder
3
- Version: 2.6.4
3
+ Version: 2.6.6
4
4
  Summary: THERMOCALC front-end for constructing and analyzing PT pseudosections
5
5
  Project-URL: Homepage, https://github.com/ondrolexa/pypsbuilder
6
6
  Project-URL: Documentation, https://pypsbuilder.readthedocs.io
@@ -37,11 +37,9 @@ Keywords: THERMOCALC,petrology
37
37
  Classifier: Development Status :: 4 - Beta
38
38
  Classifier: Intended Audience :: Science/Research
39
39
  Classifier: Programming Language :: Python :: 3
40
- Classifier: Programming Language :: Python :: 3 :: Only
41
- Classifier: Programming Language :: Python :: 3.10
42
40
  Classifier: Topic :: Scientific/Engineering
43
41
  Classifier: Topic :: Utilities
44
- Requires-Python: >=3.10
42
+ Requires-Python: >=3.12
45
43
  Requires-Dist: matplotlib>=3.8
46
44
  Requires-Dist: networkx
47
45
  Requires-Dist: numpy
@@ -50,21 +48,12 @@ Requires-Dist: scikit-image
50
48
  Requires-Dist: scipy
51
49
  Requires-Dist: shapely>=2
52
50
  Requires-Dist: tqdm
53
- Provides-Extra: dev
54
- Requires-Dist: black; extra == 'dev'
55
- Requires-Dist: jupyterlab; extra == 'dev'
56
- Requires-Dist: pyqt6; extra == 'dev'
57
- Requires-Dist: pytest; extra == 'dev'
58
- Requires-Dist: pytest-cov; extra == 'dev'
59
- Requires-Dist: sphinx; extra == 'dev'
60
- Requires-Dist: sphinx-mdinclude; extra == 'dev'
61
- Requires-Dist: sphinx-rtd-theme; extra == 'dev'
62
51
  Provides-Extra: docs
63
52
  Requires-Dist: sphinx; extra == 'docs'
64
53
  Requires-Dist: sphinx-mdinclude; extra == 'docs'
65
54
  Requires-Dist: sphinx-rtd-theme; extra == 'docs'
66
- Provides-Extra: jupyter
67
- Requires-Dist: jupyterlab; extra == 'jupyter'
55
+ Provides-Extra: lab
56
+ Requires-Dist: jupyterlab; extra == 'lab'
68
57
  Provides-Extra: pyqt5
69
58
  Requires-Dist: pyqt5; extra == 'pyqt5'
70
59
  Provides-Extra: pyqt6
@@ -78,12 +67,28 @@ Description-Content-Type: text/markdown
78
67
 
79
68
  [![PyPI - Version](https://img.shields.io/pypi/v/pypsbuilder)](https://pypi.org/project/pypsbuilder/)
80
69
  [![Testing](https://github.com/ondrolexa/pypsbuilder/actions/workflows/testing.yml/badge.svg?event=push)](https://github.com/ondrolexa/pypsbuilder)
81
- [![Documentation Status](https://readthedocs.org/projects/polylx/badge/?version=stable)](https://pypsbuilder.readthedocs.io/en/latest/?badge=latest)
70
+ [![Documentation Status](https://readthedocs.org/projects/pypsbuilder/badge/?version=latest)](https://pypsbuilder.readthedocs.io/en/latest/?badge=latest)
82
71
 
83
72
  Not that simplistic THERMOCALC front-end for constructing and visualizations of P-T, T-X and P-X pseudosections
84
73
 
85
74
  ## How to install
86
75
 
76
+ ### Using uv (recommended)
77
+
78
+ If you don't already have [uv](https://docs.astral.sh/uv/) installed, see the
79
+ [installation instructions](https://docs.astral.sh/uv/getting-started/installation/).
80
+
81
+ Create an isolated environment and install **pypsbuilder** into it. **You should choose the UI framework using option** `pyqt5` **or** `pyqt6`:
82
+
83
+ uv venv
84
+ uv pip install pypsbuilder[pyqt6]
85
+
86
+ JupyterLab could also be installed providing the `lab` option:
87
+
88
+ uv pip install pypsbuilder[pyqt6,lab]
89
+
90
+ ### Using pip and venv
91
+
87
92
  It is strongly suggested to install **pypsbuilder** into separate environment. You can create
88
93
  Python virtual environment. For Linux and macOS use:
89
94
 
@@ -111,9 +116,9 @@ and install **pypsbuilder** using pip within the environment. **You should choos
111
116
 
112
117
  pip install pypsbuilder[pyqt6]
113
118
 
114
- JupyterLab could also be installed providing the `jupyter` option:
119
+ JupyterLab could also be installed providing the `lab` option:
115
120
 
116
- pip install pypsbuilder[pyqt6,jupyter]
121
+ pip install pypsbuilder[pyqt6,lab]
117
122
 
118
123
  ## I'm using conda or mamba to manage environments
119
124
 
@@ -143,15 +148,61 @@ and install with pip. As PyQt is already installed with mamba/conda, we will ins
143
148
  > pip install --no-deps pypsbuilder
144
149
  > ```
145
150
 
146
- #### Upgrade existing installation
151
+ ### Upgrade existing installation
147
152
 
148
153
  To upgrade an already installed **pypsbuilder** to the latest release:
149
154
 
150
- pip install --upgrade pypsbuilder
155
+ uv pip install --upgrade pypsbuilder[pyqt6]
156
+
157
+ ## Contributing / development install
158
+
159
+ Clone the repository and install with uv:
160
+
161
+ uv sync --group dev
162
+
163
+ This installs pypsbuilder in editable mode with UI, notebook, test and docs
164
+ extras plus dev tooling (ruff, pre-commit).
165
+
166
+ ### Running tests
167
+
168
+ Run the full test suite (must be run from the repo root, since tests
169
+ reference `./examples/outputs` with a relative path):
170
+
171
+ uv run pytest
172
+ uv run pytest --cov --cov-report=xml
173
+
174
+ Run a single test:
175
+
176
+ uv run pytest pypsbuilder/tests/test_pclasses.py::test_parse_ini1
177
+
178
+ ### Formatting and linting
179
+
180
+ pypsbuilder uses [ruff](https://docs.astral.sh/ruff/) for both formatting and linting:
181
+
182
+ uv run ruff format pypsbuilder
183
+ uv run ruff check pypsbuilder
184
+
185
+ ### pre-commit hooks
186
+
187
+ Formatting, linting and the test suite also run automatically via
188
+ [pre-commit](https://pre-commit.com/):
189
+
190
+ uv run pre-commit install
191
+ uv run pre-commit run --all-files
192
+
193
+ ### Building the package
194
+
195
+ uv build
196
+
197
+ ### Rebuilding Qt UI modules
198
+
199
+ After editing a `.ui` file in Qt Designer, regenerate the corresponding
200
+ `ui_*.py` module (requires `pyuic6`):
151
201
 
152
- or to the latest master version:
202
+ cd pypsbuilder/ui && ./compile_ui.sh
153
203
 
154
- pip install --upgrade https://github.com/ondrolexa/pypsbuilder/archive/master.zip
204
+ The script rewrites each generated file's `PyQt6` imports to `qtpy`
205
+ imports, so the app stays usable with either `pyqt5` or `pyqt6`.
155
206
 
156
207
  ## Documentation and tutorials
157
208
 
@@ -2,12 +2,28 @@
2
2
 
3
3
  [![PyPI - Version](https://img.shields.io/pypi/v/pypsbuilder)](https://pypi.org/project/pypsbuilder/)
4
4
  [![Testing](https://github.com/ondrolexa/pypsbuilder/actions/workflows/testing.yml/badge.svg?event=push)](https://github.com/ondrolexa/pypsbuilder)
5
- [![Documentation Status](https://readthedocs.org/projects/polylx/badge/?version=stable)](https://pypsbuilder.readthedocs.io/en/latest/?badge=latest)
5
+ [![Documentation Status](https://readthedocs.org/projects/pypsbuilder/badge/?version=latest)](https://pypsbuilder.readthedocs.io/en/latest/?badge=latest)
6
6
 
7
7
  Not that simplistic THERMOCALC front-end for constructing and visualizations of P-T, T-X and P-X pseudosections
8
8
 
9
9
  ## How to install
10
10
 
11
+ ### Using uv (recommended)
12
+
13
+ If you don't already have [uv](https://docs.astral.sh/uv/) installed, see the
14
+ [installation instructions](https://docs.astral.sh/uv/getting-started/installation/).
15
+
16
+ Create an isolated environment and install **pypsbuilder** into it. **You should choose the UI framework using option** `pyqt5` **or** `pyqt6`:
17
+
18
+ uv venv
19
+ uv pip install pypsbuilder[pyqt6]
20
+
21
+ JupyterLab could also be installed providing the `lab` option:
22
+
23
+ uv pip install pypsbuilder[pyqt6,lab]
24
+
25
+ ### Using pip and venv
26
+
11
27
  It is strongly suggested to install **pypsbuilder** into separate environment. You can create
12
28
  Python virtual environment. For Linux and macOS use:
13
29
 
@@ -35,9 +51,9 @@ and install **pypsbuilder** using pip within the environment. **You should choos
35
51
 
36
52
  pip install pypsbuilder[pyqt6]
37
53
 
38
- JupyterLab could also be installed providing the `jupyter` option:
54
+ JupyterLab could also be installed providing the `lab` option:
39
55
 
40
- pip install pypsbuilder[pyqt6,jupyter]
56
+ pip install pypsbuilder[pyqt6,lab]
41
57
 
42
58
  ## I'm using conda or mamba to manage environments
43
59
 
@@ -67,15 +83,61 @@ and install with pip. As PyQt is already installed with mamba/conda, we will ins
67
83
  > pip install --no-deps pypsbuilder
68
84
  > ```
69
85
 
70
- #### Upgrade existing installation
86
+ ### Upgrade existing installation
71
87
 
72
88
  To upgrade an already installed **pypsbuilder** to the latest release:
73
89
 
74
- pip install --upgrade pypsbuilder
90
+ uv pip install --upgrade pypsbuilder[pyqt6]
91
+
92
+ ## Contributing / development install
93
+
94
+ Clone the repository and install with uv:
95
+
96
+ uv sync --group dev
97
+
98
+ This installs pypsbuilder in editable mode with UI, notebook, test and docs
99
+ extras plus dev tooling (ruff, pre-commit).
100
+
101
+ ### Running tests
102
+
103
+ Run the full test suite (must be run from the repo root, since tests
104
+ reference `./examples/outputs` with a relative path):
105
+
106
+ uv run pytest
107
+ uv run pytest --cov --cov-report=xml
108
+
109
+ Run a single test:
110
+
111
+ uv run pytest pypsbuilder/tests/test_pclasses.py::test_parse_ini1
112
+
113
+ ### Formatting and linting
114
+
115
+ pypsbuilder uses [ruff](https://docs.astral.sh/ruff/) for both formatting and linting:
116
+
117
+ uv run ruff format pypsbuilder
118
+ uv run ruff check pypsbuilder
119
+
120
+ ### pre-commit hooks
121
+
122
+ Formatting, linting and the test suite also run automatically via
123
+ [pre-commit](https://pre-commit.com/):
124
+
125
+ uv run pre-commit install
126
+ uv run pre-commit run --all-files
127
+
128
+ ### Building the package
129
+
130
+ uv build
131
+
132
+ ### Rebuilding Qt UI modules
133
+
134
+ After editing a `.ui` file in Qt Designer, regenerate the corresponding
135
+ `ui_*.py` module (requires `pyuic6`):
75
136
 
76
- or to the latest master version:
137
+ cd pypsbuilder/ui && ./compile_ui.sh
77
138
 
78
- pip install --upgrade https://github.com/ondrolexa/pypsbuilder/archive/master.zip
139
+ The script rewrites each generated file's `PyQt6` imports to `qtpy`
140
+ imports, so the app stays usable with either `pyqt5` or `pyqt6`.
79
141
 
80
142
  ## Documentation and tutorials
81
143
 
@@ -15,6 +15,7 @@
15
15
 
16
16
  ~TCResult.__init__
17
17
  ~TCResult.from_block
18
+ ~TCResult.from_block351
18
19
  ~TCResult.rename_phase
19
20
 
20
21
 
@@ -41,7 +41,6 @@
41
41
  ~PXPS.merge_data
42
42
  ~PXPS.onclick
43
43
  ~PXPS.overlap_isopleths
44
- ~PXPS.pointcalc
45
44
  ~PXPS.remove_grid_data
46
45
  ~PXPS.save
47
46
  ~PXPS.save_tab
@@ -41,7 +41,6 @@
41
41
  ~TXPS.merge_data
42
42
  ~TXPS.onclick
43
43
  ~TXPS.overlap_isopleths
44
- ~TXPS.pointcalc
45
44
  ~TXPS.remove_grid_data
46
45
  ~TXPS.save
47
46
  ~TXPS.save_tab
@@ -5,14 +5,14 @@
5
5
 
6
6
  .. autoclass:: TC34API
7
7
 
8
-
8
+
9
9
  .. automethod:: __init__
10
10
 
11
-
11
+
12
12
  .. rubric:: Methods
13
13
 
14
14
  .. autosummary::
15
-
15
+
16
16
  ~TC34API.__init__
17
17
  ~TC34API.calc_assemblage
18
18
  ~TC34API.calc_p
@@ -31,15 +31,15 @@
31
31
  ~TC34API.rundr
32
32
  ~TC34API.runtc
33
33
  ~TC34API.update_scriptfile
34
+
35
+
34
36
 
35
-
36
-
37
-
38
-
37
+
38
+
39
39
  .. rubric:: Attributes
40
40
 
41
41
  .. autosummary::
42
-
42
+
43
43
  ~TC34API.axfile
44
44
  ~TC34API.csvfile
45
45
  ~TC34API.dataset
@@ -52,5 +52,7 @@
52
52
  ~TC34API.ofile
53
53
  ~TC34API.prefsfile
54
54
  ~TC34API.scriptfile
55
- ~TC34API.tcversionfloat
56
55
  ~TC34API.tcversion
56
+ ~TC34API.tcversionfloat
57
+
58
+
@@ -5,14 +5,14 @@
5
5
 
6
6
  .. autoclass:: TC35API
7
7
 
8
-
8
+
9
9
  .. automethod:: __init__
10
10
 
11
-
11
+
12
12
  .. rubric:: Methods
13
13
 
14
14
  .. autosummary::
15
-
15
+
16
16
  ~TC35API.__init__
17
17
  ~TC35API.calc_assemblage
18
18
  ~TC35API.calc_p
@@ -24,21 +24,20 @@
24
24
  ~TC35API.dogmin
25
25
  ~TC35API.parse_dogmin
26
26
  ~TC35API.parse_logfile
27
- ~TC35API.parse_logfile_backup
28
27
  ~TC35API.read_prefsfile
29
28
  ~TC35API.read_scriptfile
30
29
  ~TC35API.rundr
31
30
  ~TC35API.runtc
32
31
  ~TC35API.update_scriptfile
32
+
33
+
33
34
 
34
-
35
-
36
-
37
-
35
+
36
+
38
37
  .. rubric:: Attributes
39
38
 
40
39
  .. autosummary::
41
-
40
+
42
41
  ~TC35API.axfile
43
42
  ~TC35API.csvfile
44
43
  ~TC35API.dataset
@@ -51,5 +50,7 @@
51
50
  ~TC35API.ofile
52
51
  ~TC35API.prefsfile
53
52
  ~TC35API.scriptfile
54
- ~TC35API.tcversionfloat
55
53
  ~TC35API.tcversion
54
+ ~TC35API.tcversionfloat
55
+
56
+
@@ -2,8 +2,9 @@ Command line scripts
2
2
  ====================
3
3
 
4
4
  Before any further calculations you can check and draw your pseudosection using
5
- `psshow` command which construct finished areas within your project. It has few
6
- options to label pseudosection with assamblages or highlight out phase lines.
5
+ the `psshow` command, which draws the finished areas within your project. It has
6
+ a few options to label the pseudosection with assemblages or highlight out-phase
7
+ lines.
7
8
 
8
9
  .. parsed-literal::
9
10
 
@@ -18,9 +19,9 @@ options to label pseudosection with assamblages or highlight out phase lines.
18
19
  positional arguments:
19
20
  project builder project file(s)
20
21
 
21
- optional arguments:
22
+ options:
22
23
  -h, --help show this help message and exit
23
- -o OUT [OUT ...], --out OUT [OUT ...]
24
+ -o, --out OUT [OUT ...]
24
25
  highlight out lines for given phases
25
26
  -l, --label show area labels
26
27
  --origwd use stored original working directory
@@ -61,7 +62,7 @@ aware that calculations takes some time.
61
62
  positional arguments:
62
63
  project builder project file(s)
63
64
 
64
- optional arguments:
65
+ options:
65
66
  -h, --help show this help message and exit
66
67
  --nx NX number of T steps
67
68
  --ny NY number of P steps
@@ -95,12 +96,12 @@ Once gridded you can draw isopleths diagrams using `psiso` command:
95
96
  project builder project file(s)
96
97
  phase phase used for contouring
97
98
 
98
- optional arguments:
99
+ options:
99
100
  -h, --help show this help message and exit
100
- -e EXPR, --expr EXPR expression evaluated to calculate values
101
+ -e, --expr EXPR expression evaluated to calculate values
101
102
  -f, --filled filled contours
102
103
  --origwd use stored original working directory
103
- -o OUT [OUT ...], --out OUT [OUT ...]
104
+ -o, --out OUT [OUT ...]
104
105
  highlight out lines for given phases
105
106
  --nosplit controls whether the underlying contour is removed or
106
107
  not
@@ -166,3 +167,32 @@ Another example of some other options.
166
167
  --out chl ep --cmap YlGnBu_r
167
168
 
168
169
  .. image:: images/psiso_other.png
170
+
171
+ Export project for drawpd
172
+ --------------------------
173
+
174
+ The `psdrawpd` command exports a project into the legacy ``drawpd`` format,
175
+ useful for compatibility with older THERMOCALC tooling or for archiving a
176
+ diagram outside of pypsbuilder.
177
+
178
+ .. parsed-literal::
179
+
180
+ $ psdrawpd -h
181
+ usage: psdrawpd [-h] [-a] [--origwd] [--tolerance TOLERANCE]
182
+ project [project ...]
183
+
184
+ Generate drawpd file from project
185
+
186
+ positional arguments:
187
+ project psbuilder project file(s)
188
+
189
+ options:
190
+ -h, --help show this help message and exit
191
+ -a, --areas export also areas
192
+ --origwd use stored original working directory
193
+ --tolerance TOLERANCE
194
+ tolerance to simplify univariant lines
195
+
196
+ .. parsed-literal::
197
+
198
+ $ psdrawpd '/path/to/project.ptb' -a