syncmoss 0.2.2__tar.gz → 0.3.0__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.
- syncmoss-0.3.0/.github/workflows/Tests.yml +50 -0
- syncmoss-0.3.0/.github/workflows/_Tests.yml +106 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_WindowsExe.yml +5 -1
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.gitignore +14 -1
- {syncmoss-0.2.2/syncmoss.egg-info → syncmoss-0.3.0}/PKG-INFO +19 -5
- {syncmoss-0.2.2 → syncmoss-0.3.0}/README.md +18 -4
- {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/bundle.py +2 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/macos_bundle.py +2 -0
- syncmoss-0.3.0/docs/thick_models.md +591 -0
- syncmoss-0.3.0/docs/thick_vs_thin.md +39 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/pyproject.toml +5 -2
- syncmoss-0.3.0/syncmoss/Calibration.py +950 -0
- syncmoss-0.3.0/syncmoss/Library/Aegirine.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Akaganeite.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Almandine.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Antitaenite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Arsenopyrite.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Bornite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Bridgmanite (Fe,Al-bearing) @100 GPa.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Bridgmanite (Fe,Al-bearing).mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Celadonite.mdl +19 -0
- syncmoss-0.3.0/syncmoss/Library/Cementite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Chalcopyrite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Clinopyroxene (augite).mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Copiapite.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Cubanite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Epidote.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Fayalite (Fe-olivine).mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Ferrihydrite (2-line).mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Ferropericlase.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Goethite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Green rust (fougerite, carbonate).mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Haegg carbide.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Hedenbergite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Hematite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Heterosite (FePO4).mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Ilmenite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Iron phosphide.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Isocubanite.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Jarosite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Kamacite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Lepidocrocite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Maghemite.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Magnetite.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Marcasite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Melanterite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Orthopyroxene (enstatite-ferrosilite).mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Prussian blue (ferric ferrocyanide).mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/Pyrite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Pyrrhotite.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Rhomboclase.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Roemerite.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Siderite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Szomolnokite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Taenite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Talnakhite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Tetrataenite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Triphylite (LiFePO4).mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Troilite.mdl +13 -0
- syncmoss-0.3.0/syncmoss/Library/Vivianite.mdl +17 -0
- syncmoss-0.3.0/syncmoss/Library/Voltaite.mdl +15 -0
- syncmoss-0.3.0/syncmoss/Library/alpha-Fe (metallic iron, bcc).mdl +13 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Library_io.py +17 -21
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Library_window.py +11 -14
- syncmoss-0.3.0/syncmoss/constants.py +91 -0
- syncmoss-0.3.0/syncmoss/fitting_io.py +725 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/instrumental_io.py +91 -107
- syncmoss-0.3.0/syncmoss/legacy.py +282 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/main.py +1 -1
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/minimi_lib.py +34 -13
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/model_io.py +340 -188
- syncmoss-0.3.0/syncmoss/models.py +3046 -0
- syncmoss-0.3.0/syncmoss/models_description_window.py +244 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/models_positions.py +151 -108
- syncmoss-0.3.0/syncmoss/parameters/Be.txt +1 -0
- syncmoss-0.3.0/syncmoss/parameters/Calibration.dat +513 -0
- syncmoss-0.3.0/syncmoss/parameters/INSexp.txt +1 -0
- syncmoss-0.3.0/syncmoss/parameters/INSint.txt +1 -0
- syncmoss-0.3.0/syncmoss/parameters/KB.txt +1 -0
- syncmoss-0.3.0/syncmoss/parameters/calibr.png +0 -0
- syncmoss-0.3.0/syncmoss/parameters/help.md +183 -0
- syncmoss-0.3.0/syncmoss/parameters/models_description.md +447 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters_table.py +625 -224
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/results_table.py +87 -91
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/spectrum_io.py +121 -144
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/spectrum_plotter.py +234 -94
- syncmoss-0.3.0/syncmoss/supp_menu.py +295 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/syncmoss_main.py +875 -885
- {syncmoss-0.2.2 → syncmoss-0.3.0/syncmoss.egg-info}/PKG-INFO +19 -5
- syncmoss-0.3.0/syncmoss.egg-info/SOURCES.txt +162 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/entry_points.txt +1 -1
- syncmoss-0.3.0/tests/conftest.py +151 -0
- syncmoss-0.3.0/tests/data/Distr_corr.mdl +10 -0
- syncmoss-0.3.0/tests/data/Distr_distr.mdl +12 -0
- syncmoss-0.3.0/tests/data/alpha_fe_sms_000.mca +73 -0
- syncmoss-0.3.0/tests/data/calibration_000_golden.json +1042 -0
- syncmoss-0.3.0/tests/data/generate_cal_fixtures.py +80 -0
- syncmoss-0.3.0/tests/data/synthetic_alpha_fe_cms_linear.mca +4 -0
- syncmoss-0.3.0/tests/golden_models.json +1247 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/syncmoss_test.py +27 -17
- syncmoss-0.3.0/tests/test_calibration.py +172 -0
- syncmoss-0.3.0/tests/test_calibration_helpers.py +189 -0
- syncmoss-0.3.0/tests/test_distr_composition.py +163 -0
- syncmoss-0.3.0/tests/test_distr_expansion.py +317 -0
- syncmoss-0.3.0/tests/test_distr_mdl.py +122 -0
- syncmoss-0.3.0/tests/test_distr_targets.py +160 -0
- syncmoss-0.3.0/tests/test_golden_models.py +62 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_gui_smoke.py +25 -3
- syncmoss-0.3.0/tests/test_hamiltonian_texture.py +490 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_instrumental_metadata.py +5 -3
- syncmoss-0.3.0/tests/test_legacy.py +196 -0
- syncmoss-0.3.0/tests/test_model_append.py +226 -0
- syncmoss-0.3.0/tests/test_model_io.py +128 -0
- syncmoss-0.3.0/tests/test_model_only_mode.py +179 -0
- syncmoss-0.3.0/tests/test_nbaseline_results.py +138 -0
- syncmoss-0.3.0/tests/test_parameter_links.py +183 -0
- syncmoss-0.3.0/tests/test_polarization.py +217 -0
- syncmoss-0.3.0/tests/test_recon_composition.py +252 -0
- syncmoss-0.3.0/tests/test_recon_mdl.py +84 -0
- syncmoss-0.3.0/tests/test_recon_results.py +123 -0
- syncmoss-0.3.0/tests/test_reference_shift.py +135 -0
- syncmoss-0.3.0/tests/test_sdw_grid.py +73 -0
- syncmoss-0.3.0/tests/test_texture_s1.py +165 -0
- syncmoss-0.3.0/tests/test_thick_gui.py +233 -0
- syncmoss-0.2.2/.github/workflows/_Tests.yml +0 -56
- syncmoss-0.2.2/syncmoss/Calibration.dat +0 -514
- syncmoss-0.2.2/syncmoss/Calibration.py +0 -776
- syncmoss-0.2.2/syncmoss/Library/Hematite mineral test.mdl +0 -62
- syncmoss-0.2.2/syncmoss/Library/Magnetite mineral bulk test.mdl +0 -59
- syncmoss-0.2.2/syncmoss/Library/Wustite mineral test.mdl +0 -58
- syncmoss-0.2.2/syncmoss/Library/alfa iron test.mdl +0 -59
- syncmoss-0.2.2/syncmoss/constants.py +0 -9
- syncmoss-0.2.2/syncmoss/fitting_io.py +0 -695
- syncmoss-0.2.2/syncmoss/models.py +0 -1530
- syncmoss-0.2.2/syncmoss/parameters/Be.txt +0 -1
- syncmoss-0.2.2/syncmoss/parameters/Calibration.dat +0 -514
- syncmoss-0.2.2/syncmoss/parameters/INSexp.txt +0 -1
- syncmoss-0.2.2/syncmoss/parameters/INSint.txt +0 -1
- syncmoss-0.2.2/syncmoss/parameters/KB.txt +0 -1
- syncmoss-0.2.2/syncmoss.egg-info/SOURCES.txt +0 -80
- syncmoss-0.2.2/tests/conftest.py +0 -67
- syncmoss-0.2.2/tests/test_model_io.py +0 -80
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_MacOS.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_PyPI.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_TagRelease.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_UploadRelease.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_Version.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_Wheels.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/release.yml +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/.vscode/settings.json +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/COPYING.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/LICENSE +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/Lib_test/test.mdl +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/NOTICE.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/MacOS.spec +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/Windows.spec +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/requirements.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/setup.cfg +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Hamiltonian_helper.py +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_L.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_L2.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/DU.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/Switch.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/UD.png +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/icon_r.ico +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/ABSorber3.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/GCMS.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/INS_APS.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/NFS.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/support_math.py +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/test_graf.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/test_param.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/theme_dark.json +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/theme_light.json +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/dependency_links.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/requires.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/top_level.txt +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_expression_validation.py +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_library_io.py +0 -0
- {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_support_math.py +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
# Runs on EVERY push, on any branch, and on every pull request -- so a plain
|
|
4
|
+
# `git push` to main and opening a PR both get checked. The release pipeline
|
|
5
|
+
# (release.yml) only fires when __VERSION__ in syncmoss/main.py changes, which is
|
|
6
|
+
# why the suite needs its own trigger here.
|
|
7
|
+
#
|
|
8
|
+
# Push/PR runs everything EXCEPT the `slow` marker (the real calibration fits,
|
|
9
|
+
# the real simultaneous-fit tests, and the full GUI open-and-fit smoke) -- those
|
|
10
|
+
# are re-run in full by release.yml against the built wheel. To run absolutely
|
|
11
|
+
# everything from any branch, use "Run workflow" -> scope: full.
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
# '**' = every branch, but NOT tags -- otherwise the release tag that
|
|
15
|
+
# _TagRelease.yml pushes would re-run the whole suite for nothing.
|
|
16
|
+
branches: ['**']
|
|
17
|
+
pull_request:
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
inputs:
|
|
20
|
+
scope:
|
|
21
|
+
description: 'Which tests to run'
|
|
22
|
+
type: choice
|
|
23
|
+
options:
|
|
24
|
+
- full # every test, nothing skipped
|
|
25
|
+
- fast # skip the `slow` marker
|
|
26
|
+
default: full
|
|
27
|
+
|
|
28
|
+
# A push immediately followed by opening a PR fires two events that name the same
|
|
29
|
+
# head branch; collapse them into one run instead of paying for both.
|
|
30
|
+
concurrency:
|
|
31
|
+
group: tests-${{ github.event.pull_request.head.ref || github.ref_name }}
|
|
32
|
+
cancel-in-progress: true
|
|
33
|
+
|
|
34
|
+
# Exactly one lane runs; the other is skipped.
|
|
35
|
+
jobs:
|
|
36
|
+
# Every push and pull request, and "Run workflow" -> fast.
|
|
37
|
+
fast:
|
|
38
|
+
if: github.event_name != 'workflow_dispatch' || inputs.scope == 'fast'
|
|
39
|
+
uses: ./.github/workflows/_Tests.yml
|
|
40
|
+
with:
|
|
41
|
+
install: source
|
|
42
|
+
selection: 'not slow'
|
|
43
|
+
|
|
44
|
+
# "Run workflow" -> full: the whole suite, on demand, from any branch.
|
|
45
|
+
full:
|
|
46
|
+
if: github.event_name == 'workflow_dispatch' && inputs.scope == 'full'
|
|
47
|
+
uses: ./.github/workflows/_Tests.yml
|
|
48
|
+
with:
|
|
49
|
+
install: source
|
|
50
|
+
selection: ''
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
name: _Tests (Linux / Windows / macOS)
|
|
2
|
+
|
|
3
|
+
# The single definition of "how the test-suite is run". Two callers use it:
|
|
4
|
+
#
|
|
5
|
+
# * Tests.yml -- every push / pull request. Tests the SOURCE checkout and
|
|
6
|
+
# skips the `slow` marker, so a branch push gets an answer
|
|
7
|
+
# quickly.
|
|
8
|
+
# * release.yml -- before the (expensive) PyInstaller builds. Tests the
|
|
9
|
+
# INSTALLED WHEEL, with no marker filter, so nothing is
|
|
10
|
+
# skipped in a release.
|
|
11
|
+
#
|
|
12
|
+
# Both always run on all three OSes; the two lanes differ only in WHAT is
|
|
13
|
+
# installed and WHICH tests are selected.
|
|
14
|
+
on:
|
|
15
|
+
workflow_call:
|
|
16
|
+
inputs:
|
|
17
|
+
install:
|
|
18
|
+
description: "'wheel' = exercise the built wheel artifact; 'source' = exercise the checkout"
|
|
19
|
+
type: string
|
|
20
|
+
default: 'wheel'
|
|
21
|
+
selection:
|
|
22
|
+
description: "pytest -m marker expression; empty = the whole suite"
|
|
23
|
+
type: string
|
|
24
|
+
default: ''
|
|
25
|
+
workflow_dispatch:
|
|
26
|
+
inputs:
|
|
27
|
+
install:
|
|
28
|
+
description: 'What to test (wheel needs a `wheels` artifact in this run, so pick source)'
|
|
29
|
+
type: choice
|
|
30
|
+
options:
|
|
31
|
+
- source
|
|
32
|
+
- wheel
|
|
33
|
+
default: source
|
|
34
|
+
selection:
|
|
35
|
+
description: 'pytest -m expression, e.g. "not slow". Empty = every test.'
|
|
36
|
+
type: string
|
|
37
|
+
default: ''
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
tests:
|
|
41
|
+
name: tests (${{ matrix.os }})
|
|
42
|
+
strategy:
|
|
43
|
+
fail-fast: false
|
|
44
|
+
matrix:
|
|
45
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
46
|
+
runs-on: ${{ matrix.os }}
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@v6
|
|
49
|
+
|
|
50
|
+
- uses: actions/setup-python@v6
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.13"
|
|
53
|
+
cache: "pip"
|
|
54
|
+
|
|
55
|
+
- name: Install Qt/OpenGL runtime libraries (Linux head-less PySide6)
|
|
56
|
+
if: runner.os == 'Linux'
|
|
57
|
+
run: |
|
|
58
|
+
sudo apt-get update
|
|
59
|
+
sudo apt-get install -y libegl1 libgl1 libxkbcommon0 libdbus-1-3 libglib2.0-0
|
|
60
|
+
|
|
61
|
+
- name: Download wheel artifact
|
|
62
|
+
if: inputs.install == 'wheel'
|
|
63
|
+
uses: actions/download-artifact@v6
|
|
64
|
+
with:
|
|
65
|
+
name: wheels
|
|
66
|
+
path: wheels
|
|
67
|
+
|
|
68
|
+
# These steps run on all three OSes, so they are written in the one shell
|
|
69
|
+
# present on all three: bash. (Pre-existing choice -- it is also why
|
|
70
|
+
# `mktemp -d` is used below rather than a Windows temp path.)
|
|
71
|
+
- name: Install syncmoss from the built wheel (as a library) + pytest
|
|
72
|
+
if: inputs.install == 'wheel'
|
|
73
|
+
shell: bash
|
|
74
|
+
run: |
|
|
75
|
+
python -m pip install --upgrade pip
|
|
76
|
+
pip install wheels/*.whl
|
|
77
|
+
pip install pytest
|
|
78
|
+
|
|
79
|
+
- name: Install runtime dependencies + pytest (source checkout)
|
|
80
|
+
if: inputs.install == 'source'
|
|
81
|
+
shell: bash
|
|
82
|
+
run: |
|
|
83
|
+
python -m pip install --upgrade pip
|
|
84
|
+
pip install -r requirements.txt
|
|
85
|
+
pip install pytest
|
|
86
|
+
|
|
87
|
+
- name: Run the test-suite
|
|
88
|
+
shell: bash
|
|
89
|
+
env:
|
|
90
|
+
QT_QPA_PLATFORM: offscreen
|
|
91
|
+
INSTALL: ${{ inputs.install }}
|
|
92
|
+
SELECTION: ${{ inputs.selection }}
|
|
93
|
+
run: |
|
|
94
|
+
args=(-q)
|
|
95
|
+
if [ -n "$SELECTION" ]; then args+=(-m "$SELECTION"); fi
|
|
96
|
+
|
|
97
|
+
# wheel mode: run from a clean directory so the source tree is NOT on
|
|
98
|
+
# sys.path and the installed wheel is exercised (syncmoss is a namespace
|
|
99
|
+
# package). mktemp -d works in Git-bash on Windows too, avoiding
|
|
100
|
+
# backslash-path pitfalls.
|
|
101
|
+
# source mode: stay in the workspace, so `syncmoss/` is imported from
|
|
102
|
+
# the checkout -- that is the code the push is about.
|
|
103
|
+
if [ "$INSTALL" = "wheel" ]; then cd "$(mktemp -d)"; fi
|
|
104
|
+
|
|
105
|
+
python -c "import syncmoss.syncmoss_main as m; print('syncmoss from:', m.__file__)"
|
|
106
|
+
python -m pytest "$GITHUB_WORKSPACE/tests" "${args[@]}"
|
|
@@ -24,7 +24,11 @@ jobs:
|
|
|
24
24
|
run: |
|
|
25
25
|
python -m pip install --upgrade pip setuptools wheel
|
|
26
26
|
pip install -r requirements.txt
|
|
27
|
-
|
|
27
|
+
# PowerShell does NOT expand a glob when calling a native command, so
|
|
28
|
+
# `pip install wheels/*.whl` handed pip the literal string and failed --
|
|
29
|
+
# silently, because the step's exit code came from the last line. Resolve
|
|
30
|
+
# the path in PowerShell instead.
|
|
31
|
+
pip install (Get-ChildItem wheels/*.whl).FullName
|
|
28
32
|
pip install pyinstaller
|
|
29
33
|
|
|
30
34
|
- name: Build with PyInstaller
|
|
@@ -49,6 +49,7 @@ coverage.xml
|
|
|
49
49
|
*.py,cover
|
|
50
50
|
.hypothesis/
|
|
51
51
|
.pytest_cache/
|
|
52
|
+
.pytest_tmp/
|
|
52
53
|
|
|
53
54
|
# Translations
|
|
54
55
|
*.mo
|
|
@@ -109,6 +110,9 @@ ENV/
|
|
|
109
110
|
env.bak/
|
|
110
111
|
venv.bak/
|
|
111
112
|
|
|
113
|
+
# AI generated docs
|
|
114
|
+
docs/
|
|
115
|
+
|
|
112
116
|
# Spyder project settings
|
|
113
117
|
.spyderproject
|
|
114
118
|
.spyproject
|
|
@@ -129,7 +133,7 @@ dmypy.json
|
|
|
129
133
|
|
|
130
134
|
# Project specific
|
|
131
135
|
.vscode/
|
|
132
|
-
|
|
136
|
+
for_tests/
|
|
133
137
|
source_code/
|
|
134
138
|
bundle/build/
|
|
135
139
|
bundle/Windows/
|
|
@@ -144,8 +148,17 @@ syncmoss/*.svg
|
|
|
144
148
|
# (the active implementation is now the optimized minimi_lib.py).
|
|
145
149
|
syncmoss/minimi_lib_old.py
|
|
146
150
|
|
|
151
|
+
# Pre-merge copy of the models module, kept locally for reference only
|
|
152
|
+
# (before the thin + polarized "thick" models were merged into models.py).
|
|
153
|
+
syncmoss/models_full_old.py
|
|
154
|
+
|
|
147
155
|
# minimi_lib optimization: local-only test tooling and notes (depend on the
|
|
148
156
|
# git-ignored minimi_lib_old.py; kept out of the tracked repo).
|
|
149
157
|
verify_minimi.py
|
|
150
158
|
bench_coldstart.py
|
|
151
159
|
minimi_optimization_notes.txt
|
|
160
|
+
|
|
161
|
+
# SCDW grid-vs-direct / physics-invariant checks: kept local-only. The tracked
|
|
162
|
+
# suite still covers the model end-to-end via the SCDW golden case, plus its
|
|
163
|
+
# param-count and locked-angle checks (test_model_io / test_thick_gui).
|
|
164
|
+
tests/test_sdw_grid.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: syncmoss
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: SYNCmoss — Mössbauer spectroscopy analysis application
|
|
5
5
|
Author: Sergey Yaroslavtsev
|
|
6
6
|
License: MIT
|
|
@@ -75,20 +75,34 @@ syncmoss
|
|
|
75
75
|
* Can extract instrumental function from spectrum of standard absorber
|
|
76
76
|
* Sequence (batch) fitting
|
|
77
77
|
* Simultaneous fitting
|
|
78
|
-
* Full Hamiltonian model for single crystal
|
|
78
|
+
* Full Hamiltonian model for the single crystal, mosaic textured and powder cases (one model, three order parameters)
|
|
79
79
|
* 2-state relaxation model
|
|
80
80
|
* Many-state superparamagnetic relaxation model
|
|
81
81
|
* Anharmonic spin modulation (ASM) model
|
|
82
82
|
* MDGD model (instead of xVBF https://doi.org/10.1016/j.nimb.2025.165669)
|
|
83
|
+
* SCDW: spin- and charge-density-wave model
|
|
83
84
|
* Multi-dimensional distributions with correlations (not reconstruction but functional)
|
|
85
|
+
* Distribution reconstruction with regularization (on testing)
|
|
84
86
|
* Expressions (which could be linked to parameters)
|
|
85
87
|
* Online (along with experiment) fitting
|
|
86
88
|
* Parallel calculations of full-transmission integral
|
|
87
|
-
|
|
88
|
-
New features:
|
|
89
|
-
* Library with import/export - create your own and share it with others
|
|
89
|
+
* Library with import/export - create your own and share it with others, ~50 reference phases included
|
|
90
90
|
* Interactive spectrum image
|
|
91
91
|
|
|
92
|
+
|
|
93
|
+
*Thick samples and proper handling of polarization*
|
|
94
|
+
* Every model builds a 2x2 cross-section matrix,
|
|
95
|
+
so absorber thickness, polarization and multi-line interference are treated
|
|
96
|
+
together
|
|
97
|
+
* Works in both source modes: polarized SMS
|
|
98
|
+
(with a settable linear polarization degree)
|
|
99
|
+
and unpolarized CMS
|
|
100
|
+
* `Layer` marker: stack layers of different orientation or composition, each with
|
|
101
|
+
its own transmission matrix
|
|
102
|
+
* Magnetic texture: uniaxial order `A` on every anisotropic component plus the
|
|
103
|
+
magnetic polar order `Am` on the Faraday-active ones - a random powder,
|
|
104
|
+
a textured foil and a single crystal are the same model at different values
|
|
105
|
+
|
|
92
106
|
## Author
|
|
93
107
|
|
|
94
108
|
Yaroslavtsev Sergey (ESRF | ADA and ID14)
|
|
@@ -42,20 +42,34 @@ syncmoss
|
|
|
42
42
|
* Can extract instrumental function from spectrum of standard absorber
|
|
43
43
|
* Sequence (batch) fitting
|
|
44
44
|
* Simultaneous fitting
|
|
45
|
-
* Full Hamiltonian model for single crystal
|
|
45
|
+
* Full Hamiltonian model for the single crystal, mosaic textured and powder cases (one model, three order parameters)
|
|
46
46
|
* 2-state relaxation model
|
|
47
47
|
* Many-state superparamagnetic relaxation model
|
|
48
48
|
* Anharmonic spin modulation (ASM) model
|
|
49
49
|
* MDGD model (instead of xVBF https://doi.org/10.1016/j.nimb.2025.165669)
|
|
50
|
+
* SCDW: spin- and charge-density-wave model
|
|
50
51
|
* Multi-dimensional distributions with correlations (not reconstruction but functional)
|
|
52
|
+
* Distribution reconstruction with regularization (on testing)
|
|
51
53
|
* Expressions (which could be linked to parameters)
|
|
52
54
|
* Online (along with experiment) fitting
|
|
53
55
|
* Parallel calculations of full-transmission integral
|
|
54
|
-
|
|
55
|
-
New features:
|
|
56
|
-
* Library with import/export - create your own and share it with others
|
|
56
|
+
* Library with import/export - create your own and share it with others, ~50 reference phases included
|
|
57
57
|
* Interactive spectrum image
|
|
58
58
|
|
|
59
|
+
|
|
60
|
+
*Thick samples and proper handling of polarization*
|
|
61
|
+
* Every model builds a 2x2 cross-section matrix,
|
|
62
|
+
so absorber thickness, polarization and multi-line interference are treated
|
|
63
|
+
together
|
|
64
|
+
* Works in both source modes: polarized SMS
|
|
65
|
+
(with a settable linear polarization degree)
|
|
66
|
+
and unpolarized CMS
|
|
67
|
+
* `Layer` marker: stack layers of different orientation or composition, each with
|
|
68
|
+
its own transmission matrix
|
|
69
|
+
* Magnetic texture: uniaxial order `A` on every anisotropic component plus the
|
|
70
|
+
magnetic polar order `Am` on the Faraday-active ones - a random powder,
|
|
71
|
+
a textured foil and a single crystal are the same model at different values
|
|
72
|
+
|
|
59
73
|
## Author
|
|
60
74
|
|
|
61
75
|
Yaroslavtsev Sergey (ESRF | ADA and ID14)
|
|
@@ -112,6 +112,8 @@ def verify(app_dir: str):
|
|
|
112
112
|
"Contents/MacOS/icons/CheckBox.png",
|
|
113
113
|
"Contents/MacOS/parameters/Be.txt",
|
|
114
114
|
"Contents/MacOS/parameters/KB.txt",
|
|
115
|
+
"Contents/MacOS/parameters/models_description.md",
|
|
116
|
+
"Contents/MacOS/parameters/help.md",
|
|
115
117
|
"Contents/MacOS/parameters/Calibration.dat",
|
|
116
118
|
"Contents/MacOS/theme_dark.json",
|
|
117
119
|
"Contents/MacOS/theme_light.json",
|