pypsbuilder 2.6.0__tar.gz → 2.6.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.
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/CHANGELOG.md +10 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/PKG-INFO +30 -32
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/README.md +21 -28
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pyproject.toml +5 -6
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/__init__.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/psbuilders.py +11 -14
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/psclasses.py +1 -4
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/psexplorer.py +54 -49
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/compile_ui.sh +1 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_addinv.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_adduni.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_ptbuilder.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_pxbuilder.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_txbuilder.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui_uniguess.py +1 -1
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.github/dependabot.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.github/workflows/release.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.github/workflows/testing.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.github/workflows/testrelease.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.gitignore +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.pre-commit-config.yaml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/.readthedocs.yaml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/AUTHORS.md +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/CONTRIBUTING.md +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/LICENSE +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/codecov.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/_static/theme_overrides.css +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.Dogmin.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.InvPoint.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.PTsection.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.PXsection.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.TCResult.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.TCResultSet.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.TXsection.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psclasses.UniLine.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psexplorer.PTPS.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psexplorer.PXPS.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.psexplorer.TXPS.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.tcapi.TC34API.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api/pypsbuilder.tcapi.TC35API.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/api.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/authors.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/command-line.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/conf.py +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/create_environment.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/crossing.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/delta.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/install_locally.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/invsearch.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/isopleths_1.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/isopleths_2.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/modes.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_areas.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_dogmin.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_finished.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_highlight.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_init.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_inv.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_modes.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psbuilder_uni.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psiso_alm.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psiso_labelkey.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psiso_mode.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psiso_other.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/psshow_out.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/ptpath.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/show_data.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/show_grid.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/show_label.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/show_out.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/show_plain.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/images/status.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/index.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/psbuilders-tutorial.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/psexplorer-tutorial.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/docs/readme.rst +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/environment.yml +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite/tc-avgpelite.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite/tc-ds62.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite/tc-mp50MnNCKFMASHTO.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite/tc-prefs.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite_34/tc-6axmn.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite_34/tc-avgpelite.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite_34/tc-ds62.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/avgpelite_34/tc-prefs.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv1-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv1-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv2-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv2-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv3-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/inv3-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni1-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni1-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni2-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni2-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni3-ic.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/examples/outputs/uni3-log.txt +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/notebooks/pypsbuilder.ipynb +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/images/ptbuilder.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/images/pxbuilder.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/images/pypsbuilder.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/images/txbuilder.png +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/tcapi.py +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/tcinit.py +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/tests/__init__.py +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/tests/test_pclasses.py +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/addinv.ui +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/adduni.ui +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/ptbuilder.ui +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/pxbuilder.ui +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/txbuilder.ui +0 -0
- {pypsbuilder-2.6.0 → pypsbuilder-2.6.2}/pypsbuilder/ui/uniguess.ui +0 -0
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
All notable pypsbuilder changes.
|
|
3
3
|
|
|
4
|
+
## [2.6.2] - 2025-02-11
|
|
5
|
+
### Fixed
|
|
6
|
+
- f-string py3.10 bugfix
|
|
7
|
+
|
|
8
|
+
## [2.6.1] - 2025-01-24
|
|
9
|
+
### Added
|
|
10
|
+
- Both PyQt5 and PyQt6 are supported and need to be specified as
|
|
11
|
+
extra option during installation
|
|
12
|
+
|
|
4
13
|
## [2.6.0] - 2025-01-23
|
|
5
14
|
Initial PyQt6 release
|
|
6
15
|
|
|
7
16
|
## [2.5.3] - 2024-12-18
|
|
8
|
-
Latest version using PyQt5
|
|
17
|
+
Latest version using PyQt5 only
|
|
9
18
|
|
|
10
19
|
## [2.5.0] - 2024-12-13
|
|
11
20
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pypsbuilder
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.2
|
|
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
|
|
@@ -45,7 +45,7 @@ Requires-Python: >=3.10
|
|
|
45
45
|
Requires-Dist: matplotlib>=3.8
|
|
46
46
|
Requires-Dist: networkx
|
|
47
47
|
Requires-Dist: numpy
|
|
48
|
-
Requires-Dist:
|
|
48
|
+
Requires-Dist: qtpy
|
|
49
49
|
Requires-Dist: scikit-image
|
|
50
50
|
Requires-Dist: scipy
|
|
51
51
|
Requires-Dist: shapely>=2
|
|
@@ -53,6 +53,7 @@ Requires-Dist: tqdm
|
|
|
53
53
|
Provides-Extra: dev
|
|
54
54
|
Requires-Dist: black; extra == 'dev'
|
|
55
55
|
Requires-Dist: jupyterlab; extra == 'dev'
|
|
56
|
+
Requires-Dist: pyqt6; extra == 'dev'
|
|
56
57
|
Requires-Dist: pytest; extra == 'dev'
|
|
57
58
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
58
59
|
Requires-Dist: sphinx; extra == 'dev'
|
|
@@ -62,8 +63,12 @@ Provides-Extra: docs
|
|
|
62
63
|
Requires-Dist: sphinx; extra == 'docs'
|
|
63
64
|
Requires-Dist: sphinx-mdinclude; extra == 'docs'
|
|
64
65
|
Requires-Dist: sphinx-rtd-theme; extra == 'docs'
|
|
65
|
-
Provides-Extra:
|
|
66
|
-
Requires-Dist: jupyterlab; extra == '
|
|
66
|
+
Provides-Extra: jupyter
|
|
67
|
+
Requires-Dist: jupyterlab; extra == 'jupyter'
|
|
68
|
+
Provides-Extra: pyqt5
|
|
69
|
+
Requires-Dist: pyqt5; extra == 'pyqt5'
|
|
70
|
+
Provides-Extra: pyqt6
|
|
71
|
+
Requires-Dist: pyqt6; extra == 'pyqt6'
|
|
67
72
|
Provides-Extra: tests
|
|
68
73
|
Requires-Dist: pytest; extra == 'tests'
|
|
69
74
|
Requires-Dist: pytest-cov; extra == 'tests'
|
|
@@ -82,38 +87,38 @@ Not that simplistic THERMOCALC front-end for constructing and visualizations of
|
|
|
82
87
|
It is strongly suggested to install **pypsbuilder** into separate environment. You can create
|
|
83
88
|
Python virtual environment. For Linux and macOS use:
|
|
84
89
|
|
|
85
|
-
python -m venv
|
|
86
|
-
source
|
|
90
|
+
python -m venv .venv
|
|
91
|
+
source .venv/bin/activate
|
|
87
92
|
|
|
88
|
-
for Windows use PowerShell:
|
|
93
|
+
for Windows use Command Prompt or PowerShell:
|
|
89
94
|
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
python -m venv .venv
|
|
96
|
+
.venv\Scripts\activate
|
|
92
97
|
|
|
93
98
|
> [!NOTE]
|
|
94
|
-
> On Microsoft Windows, it may be required to
|
|
99
|
+
> On Microsoft Windows, it may be required to set the execution policy in PowerShell for the user.
|
|
95
100
|
> You can do this by issuing the following PowerShell command:
|
|
96
101
|
> ```
|
|
97
|
-
>
|
|
102
|
+
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
98
103
|
> ```
|
|
99
104
|
|
|
100
|
-
and install **pypsbuilder** using pip within the environment
|
|
105
|
+
and install **pypsbuilder** using pip within the environment. **You should choose the UI framework using option** `pyqt5` **or** `pyqt6`:
|
|
101
106
|
|
|
102
|
-
pip install pypsbuilder
|
|
107
|
+
pip install pypsbuilder[pyqt6]
|
|
103
108
|
|
|
104
|
-
|
|
109
|
+
JupyterLab could also be installed providing the `jupyter` option:
|
|
105
110
|
|
|
106
|
-
pip install pypsbuilder[
|
|
111
|
+
pip install pypsbuilder[pyqt6,jupyter]
|
|
107
112
|
|
|
108
113
|
## I'm using conda or mamba to manage environments
|
|
109
114
|
|
|
110
115
|
If you have already have conda or mamba installed, you can create environment with:
|
|
111
116
|
|
|
112
|
-
conda create -n pyps
|
|
117
|
+
conda create -n pyps python=3.12.8 matplotlib shapely pyqt tqdm scikit-image qtpy jupyterlab
|
|
113
118
|
|
|
114
119
|
or
|
|
115
120
|
|
|
116
|
-
mamba create -n pyps
|
|
121
|
+
mamba create -n pyps python=3.12.8 matplotlib shapely pyqt tqdm scikit-image qtpy jupyterlab
|
|
117
122
|
|
|
118
123
|
Then activate the new environment:
|
|
119
124
|
|
|
@@ -123,22 +128,15 @@ or
|
|
|
123
128
|
|
|
124
129
|
mamba activate pyps
|
|
125
130
|
|
|
126
|
-
and install with pip.
|
|
127
|
-
so we need to use the 2.5.3 version:
|
|
128
|
-
|
|
129
|
-
pip install pypsbuilder==2.5.3
|
|
130
|
-
|
|
131
|
-
#### Note for macOS
|
|
132
|
-
|
|
133
|
-
If you have environment created with conda/mamba install the pypsbuilder with:
|
|
134
|
-
|
|
135
|
-
pip install pypsbuilder==2.5.3 --no-deps
|
|
131
|
+
and install with pip. As PyQt is already installed with mamba/conda, we will install **pypsbuilder** without UI framework:
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
You can install latest version from master branch on GitHub:
|
|
133
|
+
pip install pypsbuilder
|
|
140
134
|
|
|
141
|
-
|
|
135
|
+
> [!NOTE]
|
|
136
|
+
> If you encounter errors during install, try to install without upgrading dependencies:
|
|
137
|
+
> ```
|
|
138
|
+
> pip install --no-deps pypsbuilder
|
|
139
|
+
> ```
|
|
142
140
|
|
|
143
141
|
#### Upgrade existing installation
|
|
144
142
|
|
|
@@ -146,7 +144,7 @@ To upgrade an already installed **pypsbuilder** to the latest release:
|
|
|
146
144
|
|
|
147
145
|
pip install --upgrade pypsbuilder
|
|
148
146
|
|
|
149
|
-
or to latest master version:
|
|
147
|
+
or to the latest master version:
|
|
150
148
|
|
|
151
149
|
pip install --upgrade https://github.com/ondrolexa/pypsbuilder/archive/master.zip
|
|
152
150
|
|
|
@@ -11,38 +11,38 @@ Not that simplistic THERMOCALC front-end for constructing and visualizations of
|
|
|
11
11
|
It is strongly suggested to install **pypsbuilder** into separate environment. You can create
|
|
12
12
|
Python virtual environment. For Linux and macOS use:
|
|
13
13
|
|
|
14
|
-
python -m venv
|
|
15
|
-
source
|
|
14
|
+
python -m venv .venv
|
|
15
|
+
source .venv/bin/activate
|
|
16
16
|
|
|
17
|
-
for Windows use PowerShell:
|
|
17
|
+
for Windows use Command Prompt or PowerShell:
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
python -m venv .venv
|
|
20
|
+
.venv\Scripts\activate
|
|
21
21
|
|
|
22
22
|
> [!NOTE]
|
|
23
|
-
> On Microsoft Windows, it may be required to
|
|
23
|
+
> On Microsoft Windows, it may be required to set the execution policy in PowerShell for the user.
|
|
24
24
|
> You can do this by issuing the following PowerShell command:
|
|
25
25
|
> ```
|
|
26
|
-
>
|
|
26
|
+
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
27
27
|
> ```
|
|
28
28
|
|
|
29
|
-
and install **pypsbuilder** using pip within the environment
|
|
29
|
+
and install **pypsbuilder** using pip within the environment. **You should choose the UI framework using option** `pyqt5` **or** `pyqt6`:
|
|
30
30
|
|
|
31
|
-
pip install pypsbuilder
|
|
31
|
+
pip install pypsbuilder[pyqt6]
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
JupyterLab could also be installed providing the `jupyter` option:
|
|
34
34
|
|
|
35
|
-
pip install pypsbuilder[
|
|
35
|
+
pip install pypsbuilder[pyqt6,jupyter]
|
|
36
36
|
|
|
37
37
|
## I'm using conda or mamba to manage environments
|
|
38
38
|
|
|
39
39
|
If you have already have conda or mamba installed, you can create environment with:
|
|
40
40
|
|
|
41
|
-
conda create -n pyps
|
|
41
|
+
conda create -n pyps python=3.12.8 matplotlib shapely pyqt tqdm scikit-image qtpy jupyterlab
|
|
42
42
|
|
|
43
43
|
or
|
|
44
44
|
|
|
45
|
-
mamba create -n pyps
|
|
45
|
+
mamba create -n pyps python=3.12.8 matplotlib shapely pyqt tqdm scikit-image qtpy jupyterlab
|
|
46
46
|
|
|
47
47
|
Then activate the new environment:
|
|
48
48
|
|
|
@@ -52,22 +52,15 @@ or
|
|
|
52
52
|
|
|
53
53
|
mamba activate pyps
|
|
54
54
|
|
|
55
|
-
and install with pip.
|
|
56
|
-
so we need to use the 2.5.3 version:
|
|
57
|
-
|
|
58
|
-
pip install pypsbuilder==2.5.3
|
|
59
|
-
|
|
60
|
-
#### Note for macOS
|
|
61
|
-
|
|
62
|
-
If you have environment created with conda/mamba install the pypsbuilder with:
|
|
63
|
-
|
|
64
|
-
pip install pypsbuilder==2.5.3 --no-deps
|
|
55
|
+
and install with pip. As PyQt is already installed with mamba/conda, we will install **pypsbuilder** without UI framework:
|
|
65
56
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
You can install latest version from master branch on GitHub:
|
|
57
|
+
pip install pypsbuilder
|
|
69
58
|
|
|
70
|
-
|
|
59
|
+
> [!NOTE]
|
|
60
|
+
> If you encounter errors during install, try to install without upgrading dependencies:
|
|
61
|
+
> ```
|
|
62
|
+
> pip install --no-deps pypsbuilder
|
|
63
|
+
> ```
|
|
71
64
|
|
|
72
65
|
#### Upgrade existing installation
|
|
73
66
|
|
|
@@ -75,7 +68,7 @@ To upgrade an already installed **pypsbuilder** to the latest release:
|
|
|
75
68
|
|
|
76
69
|
pip install --upgrade pypsbuilder
|
|
77
70
|
|
|
78
|
-
or to latest master version:
|
|
71
|
+
or to the latest master version:
|
|
79
72
|
|
|
80
73
|
pip install --upgrade https://github.com/ondrolexa/pypsbuilder/archive/master.zip
|
|
81
74
|
|
|
@@ -25,7 +25,7 @@ classifiers = [
|
|
|
25
25
|
dependencies = [
|
|
26
26
|
"numpy",
|
|
27
27
|
"matplotlib>=3.8",
|
|
28
|
-
"
|
|
28
|
+
"qtpy",
|
|
29
29
|
"scipy",
|
|
30
30
|
"scikit-image",
|
|
31
31
|
"networkx",
|
|
@@ -34,13 +34,12 @@ dependencies = [
|
|
|
34
34
|
]
|
|
35
35
|
|
|
36
36
|
[project.optional-dependencies]
|
|
37
|
-
|
|
37
|
+
pyqt5 = ["pyqt5"]
|
|
38
|
+
pyqt6 = ["pyqt6"]
|
|
39
|
+
jupyter = ["jupyterlab"]
|
|
38
40
|
tests = ["pytest", "pytest-cov"]
|
|
39
41
|
docs = ["sphinx", "sphinx_mdinclude", "sphinx_rtd_theme"]
|
|
40
|
-
dev = [
|
|
41
|
-
"pypsbuilder[extra,tests,docs]",
|
|
42
|
-
"black",
|
|
43
|
-
]
|
|
42
|
+
dev = ["pypsbuilder[pyqt6,jupyter,tests,docs]", "black"]
|
|
44
43
|
|
|
45
44
|
[project.urls]
|
|
46
45
|
Homepage = "https://github.com/ondrolexa/pypsbuilder"
|
|
@@ -15,9 +15,10 @@ import itertools
|
|
|
15
15
|
import warnings
|
|
16
16
|
|
|
17
17
|
import importlib.resources as ires
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
18
|
+
from qtpy import QtCore, QtGui, QtWidgets
|
|
19
|
+
from qtpy import QT_VERSION
|
|
20
|
+
from qtpy import API as QTPY_API
|
|
21
|
+
|
|
21
22
|
|
|
22
23
|
import numpy as np
|
|
23
24
|
import matplotlib
|
|
@@ -1347,7 +1348,7 @@ class BuildersBase(QtWidgets.QMainWindow):
|
|
|
1347
1348
|
self.unimodel.appendRow(id_uni, uni)
|
|
1348
1349
|
self.uni_connect(id_uni, candidates)
|
|
1349
1350
|
self.changed = True
|
|
1350
|
-
# self.unisel.select(idx, QtCore.QItemSelectionModel.ClearAndSelect | QtCore.QItemSelectionModel.Rows)
|
|
1351
|
+
# self.unisel.select(idx, QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect | QtCore.QItemSelectionModel.SelectionFlag.Rows)
|
|
1351
1352
|
idx = self.unimodel.getIndexID(id_uni)
|
|
1352
1353
|
self.uniview.selectRow(idx.row())
|
|
1353
1354
|
self.uniview.scrollToBottom()
|
|
@@ -1950,8 +1951,7 @@ class PTBuilder(BuildersBase, Ui_PTBuilder):
|
|
|
1950
1951
|
|
|
1951
1952
|
def app_settings(self, write=False):
|
|
1952
1953
|
# Applicatiom settings
|
|
1953
|
-
|
|
1954
|
-
builder_settings = QtCore.QSettings("LX", f"ptbuilder pyqt{qtver}")
|
|
1954
|
+
builder_settings = QtCore.QSettings("LX", f"ptbuilder {QTPY_API}{QT_VERSION.split('.')[0]}")
|
|
1955
1955
|
if write:
|
|
1956
1956
|
builder_settings.setValue("steps", self.spinSteps.value())
|
|
1957
1957
|
builder_settings.setValue("precision", self.spinPrec.value())
|
|
@@ -2713,7 +2713,7 @@ class PTBuilder(BuildersBase, Ui_PTBuilder):
|
|
|
2713
2713
|
self.unimodel.appendRow(id_uni, uni)
|
|
2714
2714
|
self.uniview.resizeColumnsToContents()
|
|
2715
2715
|
self.changed = True
|
|
2716
|
-
# self.unisel.select(idx, QtCore.QItemSelectionModel.ClearAndSelect | QtCore.QItemSelectionModel.Rows)
|
|
2716
|
+
# self.unisel.select(idx, QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect | QtCore.QItemSelectionModel.SelectionFlag.Rows)
|
|
2717
2717
|
idx = self.unimodel.getIndexID(id_uni)
|
|
2718
2718
|
self.uniview.selectRow(idx.row())
|
|
2719
2719
|
self.uniview.scrollToBottom()
|
|
@@ -3686,7 +3686,7 @@ class TXBuilder(BuildersBase, Ui_TXBuilder):
|
|
|
3686
3686
|
self.unimodel.appendRow(id_uni, uni)
|
|
3687
3687
|
self.uniview.resizeColumnsToContents()
|
|
3688
3688
|
self.changed = True
|
|
3689
|
-
# self.unisel.select(idx, QtCore.QItemSelectionModel.ClearAndSelect | QtCore.QItemSelectionModel.Rows)
|
|
3689
|
+
# self.unisel.select(idx, QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect | QtCore.QItemSelectionModel.SelectionFlag.Rows)
|
|
3690
3690
|
idx = self.unimodel.getIndexID(id_uni)
|
|
3691
3691
|
self.uniview.selectRow(idx.row())
|
|
3692
3692
|
self.uniview.scrollToBottom()
|
|
@@ -4682,7 +4682,7 @@ class PXBuilder(BuildersBase, Ui_PXBuilder):
|
|
|
4682
4682
|
self.unimodel.appendRow(id_uni, uni)
|
|
4683
4683
|
self.uniview.resizeColumnsToContents()
|
|
4684
4684
|
self.changed = True
|
|
4685
|
-
# self.unisel.select(idx, QtCore.QItemSelectionModel.ClearAndSelect | QtCore.QItemSelectionModel.Rows)
|
|
4685
|
+
# self.unisel.select(idx, QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect | QtCore.QItemSelectionModel.SelectionFlag.Rows)
|
|
4686
4686
|
idx = self.unimodel.getIndexID(id_uni)
|
|
4687
4687
|
self.uniview.selectRow(idx.row())
|
|
4688
4688
|
self.uniview.scrollToBottom()
|
|
@@ -4895,7 +4895,7 @@ class InvModel(QtCore.QAbstractTableModel):
|
|
|
4895
4895
|
return None
|
|
4896
4896
|
inv = self.ps.invpoints[self.invlist[index.row()]]
|
|
4897
4897
|
# highlight not finished invpoints - move to plot ???
|
|
4898
|
-
# if role == QtCore.Qt.ForegroundRole:
|
|
4898
|
+
# if role == QtCore.Qt.ItemDataRole.ForegroundRole:
|
|
4899
4899
|
# all_uni = inv.all_unilines()
|
|
4900
4900
|
# isnew1, id = self.ps.getiduni(UniLine(phases=all_uni[0][0], out=all_uni[0][1]))
|
|
4901
4901
|
# isnew2, id = self.ps.getiduni(UniLine(phases=all_uni[1][0], out=all_uni[1][1]))
|
|
@@ -5244,10 +5244,7 @@ class AboutDialog(QtWidgets.QDialog):
|
|
|
5244
5244
|
author.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
|
5245
5245
|
|
|
5246
5246
|
swinfo = QtWidgets.QLabel(
|
|
5247
|
-
"Python:{}
|
|
5248
|
-
sys.version.split()[0], QT_VERSION_STR, PYQT_VERSION_STR
|
|
5249
|
-
)
|
|
5250
|
-
)
|
|
5247
|
+
f"Python:{sys.version.split()[0]} {QTPY_API} {QT_VERSION}")
|
|
5251
5248
|
swinfo.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
|
5252
5249
|
|
|
5253
5250
|
github = QtWidgets.QLabel(
|
|
@@ -8,10 +8,7 @@ outputs and storage of calculated invariant points and univariant lines.
|
|
|
8
8
|
# author: Ondrej Lexa
|
|
9
9
|
# website: https://github.com/ondrolexa/pypsbuilder
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
import cPickle as pickle
|
|
13
|
-
except ImportError:
|
|
14
|
-
import pickle
|
|
11
|
+
import pickle
|
|
15
12
|
import gzip
|
|
16
13
|
import numpy as np
|
|
17
14
|
import matplotlib.pyplot as plt
|
|
@@ -1220,55 +1220,6 @@ class PS:
|
|
|
1220
1220
|
f'{ix + 1}: {" ".join(sorted([self.abbr.get(sa, sa) for sa in self.identify(x, y)]))}'
|
|
1221
1221
|
)
|
|
1222
1222
|
|
|
1223
|
-
def pointcalc(self, label=False, skiplabels=0, labelfs=6):
|
|
1224
|
-
fig, ax = plt.subplots()
|
|
1225
|
-
ax.autoscale_view()
|
|
1226
|
-
self.add_overlay(ax, label=label, skiplabels=skiplabels, fontsize=labelfs)
|
|
1227
|
-
ax.set_xlim(self.xrange)
|
|
1228
|
-
ax.set_ylim(self.yrange)
|
|
1229
|
-
ax.format_coord = self.format_coord
|
|
1230
|
-
x, y = plt.ginput(1)[0]
|
|
1231
|
-
plt.close(fig)
|
|
1232
|
-
k = self.identify(x, y)
|
|
1233
|
-
if k is not None:
|
|
1234
|
-
last_inv = 0
|
|
1235
|
-
for ix, ps in self.sections.items():
|
|
1236
|
-
# update guesses from closest inv point
|
|
1237
|
-
dst = sys.float_info.max
|
|
1238
|
-
for id_inv, inv in ps.invpoints.items():
|
|
1239
|
-
d2 = (inv._x - x) ** 2 + (inv._y - y) ** 2
|
|
1240
|
-
if d2 < dst:
|
|
1241
|
-
dst = d2
|
|
1242
|
-
id_close = id_inv
|
|
1243
|
-
if id_close != last_inv and not ps.invpoints[id_close].manual:
|
|
1244
|
-
self.tc.update_scriptfile(guesses=ps.invpoints[id_close].ptguess())
|
|
1245
|
-
last_inv = id_close
|
|
1246
|
-
tcout, ans = self.tc.calc_assemblage(k.difference(self.tc.excess), y, x)
|
|
1247
|
-
status, res, output = self.tc.parse_logfile()
|
|
1248
|
-
if res is None:
|
|
1249
|
-
for ix, ps in self.sections.items():
|
|
1250
|
-
# update guesses from closest uni line point
|
|
1251
|
-
dst = sys.float_info.max
|
|
1252
|
-
for id_uni in self.unilists[ix][k]:
|
|
1253
|
-
uni = ps.unilines[id_uni]
|
|
1254
|
-
if not uni.manual:
|
|
1255
|
-
for vix in list(range(len(uni._x))[uni.used]):
|
|
1256
|
-
d2 = (uni._x[vix] - x) ** 2 + (uni._y[vix] - y) ** 2
|
|
1257
|
-
if d2 < dst:
|
|
1258
|
-
dst = d2
|
|
1259
|
-
id_close = id_uni
|
|
1260
|
-
vix_close = vix
|
|
1261
|
-
self.tc.update_scriptfile(
|
|
1262
|
-
guesses=ps.unilines[id_close].ptguess(idx=vix_close)
|
|
1263
|
-
)
|
|
1264
|
-
tcout, ans = self.tc.calc_assemblage(k.difference(self.tc.excess), y, x)
|
|
1265
|
-
status, res, output = self.tc.parse_logfile()
|
|
1266
|
-
if res is None:
|
|
1267
|
-
print("Calculation failed")
|
|
1268
|
-
else:
|
|
1269
|
-
print(output)
|
|
1270
|
-
return res[0]
|
|
1271
|
-
|
|
1272
1223
|
def remove_grid_data(self, key, phase, expr):
|
|
1273
1224
|
"""Remove calculated data from grid and mark as failed
|
|
1274
1225
|
|
|
@@ -2769,6 +2720,60 @@ class PTPS(PS):
|
|
|
2769
2720
|
)
|
|
2770
2721
|
plt.show()
|
|
2771
2722
|
|
|
2723
|
+
def pointcalc(self, t=None, p=None, label=False, skiplabels=0, labelfs=6, show_output=False):
|
|
2724
|
+
if t is None or p is None:
|
|
2725
|
+
fig, ax = plt.subplots()
|
|
2726
|
+
ax.autoscale_view()
|
|
2727
|
+
self.add_overlay(ax, label=label, skiplabels=skiplabels, fontsize=labelfs)
|
|
2728
|
+
ax.set_xlim(self.xrange)
|
|
2729
|
+
ax.set_ylim(self.yrange)
|
|
2730
|
+
ax.format_coord = self.format_coord
|
|
2731
|
+
t, p = plt.ginput(1)[0]
|
|
2732
|
+
plt.close(fig)
|
|
2733
|
+
k = self.identify(t, p)
|
|
2734
|
+
if k is not None:
|
|
2735
|
+
last_inv = 0
|
|
2736
|
+
id_close = 0
|
|
2737
|
+
for ix, ps in self.sections.items():
|
|
2738
|
+
# update guesses from closest inv point
|
|
2739
|
+
dst = sys.float_info.max
|
|
2740
|
+
for id_inv, inv in ps.invpoints.items():
|
|
2741
|
+
d2 = (inv._x - t) ** 2 + (inv._y - p) ** 2
|
|
2742
|
+
if d2 < dst:
|
|
2743
|
+
dst = d2
|
|
2744
|
+
id_close = id_inv
|
|
2745
|
+
if id_close != last_inv and not ps.invpoints[id_close].manual:
|
|
2746
|
+
self.tc.update_scriptfile(guesses=ps.invpoints[id_close].ptguess())
|
|
2747
|
+
last_inv = id_close
|
|
2748
|
+
tcout, ans = self.tc.calc_assemblage(k.difference(self.tc.excess), p, t)
|
|
2749
|
+
status, res, output = self.tc.parse_logfile()
|
|
2750
|
+
if res is None:
|
|
2751
|
+
for ix, ps in self.sections.items():
|
|
2752
|
+
# update guesses from closest uni line point
|
|
2753
|
+
dst = sys.float_info.max
|
|
2754
|
+
for id_uni in self.unilists[ix][k]:
|
|
2755
|
+
uni = ps.unilines[id_uni]
|
|
2756
|
+
if not uni.manual:
|
|
2757
|
+
for vix in list(range(len(uni._x))[uni.used]):
|
|
2758
|
+
d2 = (uni._x[vix] - t) ** 2 + (uni._y[vix] - p) ** 2
|
|
2759
|
+
if d2 < dst:
|
|
2760
|
+
dst = d2
|
|
2761
|
+
id_close = id_uni
|
|
2762
|
+
vix_close = vix
|
|
2763
|
+
self.tc.update_scriptfile(
|
|
2764
|
+
guesses=ps.unilines[id_close].ptguess(idx=vix_close)
|
|
2765
|
+
)
|
|
2766
|
+
tcout, ans = self.tc.calc_assemblage(k.difference(self.tc.excess), p, t)
|
|
2767
|
+
status, res, output = self.tc.parse_logfile()
|
|
2768
|
+
if res is None:
|
|
2769
|
+
print("Calculation failed")
|
|
2770
|
+
else:
|
|
2771
|
+
if show_output:
|
|
2772
|
+
print(output)
|
|
2773
|
+
return res[0]
|
|
2774
|
+
else:
|
|
2775
|
+
print(f"No assembplage found at T={t}, p-{p}")
|
|
2776
|
+
|
|
2772
2777
|
|
|
2773
2778
|
class TXPS(PS):
|
|
2774
2779
|
"""Class to postprocess txbuilder project"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|