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.
Files changed (182) hide show
  1. syncmoss-0.3.0/.github/workflows/Tests.yml +50 -0
  2. syncmoss-0.3.0/.github/workflows/_Tests.yml +106 -0
  3. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_WindowsExe.yml +5 -1
  4. {syncmoss-0.2.2 → syncmoss-0.3.0}/.gitignore +14 -1
  5. {syncmoss-0.2.2/syncmoss.egg-info → syncmoss-0.3.0}/PKG-INFO +19 -5
  6. {syncmoss-0.2.2 → syncmoss-0.3.0}/README.md +18 -4
  7. {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/bundle.py +2 -0
  8. {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/macos_bundle.py +2 -0
  9. syncmoss-0.3.0/docs/thick_models.md +591 -0
  10. syncmoss-0.3.0/docs/thick_vs_thin.md +39 -0
  11. {syncmoss-0.2.2 → syncmoss-0.3.0}/pyproject.toml +5 -2
  12. syncmoss-0.3.0/syncmoss/Calibration.py +950 -0
  13. syncmoss-0.3.0/syncmoss/Library/Aegirine.mdl +13 -0
  14. syncmoss-0.3.0/syncmoss/Library/Akaganeite.mdl +15 -0
  15. syncmoss-0.3.0/syncmoss/Library/Almandine.mdl +15 -0
  16. syncmoss-0.3.0/syncmoss/Library/Antitaenite.mdl +13 -0
  17. syncmoss-0.3.0/syncmoss/Library/Arsenopyrite.mdl +17 -0
  18. syncmoss-0.3.0/syncmoss/Library/Bornite.mdl +13 -0
  19. syncmoss-0.3.0/syncmoss/Library/Bridgmanite (Fe,Al-bearing) @100 GPa.mdl +15 -0
  20. syncmoss-0.3.0/syncmoss/Library/Bridgmanite (Fe,Al-bearing).mdl +15 -0
  21. syncmoss-0.3.0/syncmoss/Library/Celadonite.mdl +19 -0
  22. syncmoss-0.3.0/syncmoss/Library/Cementite.mdl +13 -0
  23. syncmoss-0.3.0/syncmoss/Library/Chalcopyrite.mdl +13 -0
  24. syncmoss-0.3.0/syncmoss/Library/Clinopyroxene (augite).mdl +17 -0
  25. syncmoss-0.3.0/syncmoss/Library/Copiapite.mdl +17 -0
  26. syncmoss-0.3.0/syncmoss/Library/Cubanite.mdl +13 -0
  27. syncmoss-0.3.0/syncmoss/Library/Epidote.mdl +13 -0
  28. syncmoss-0.3.0/syncmoss/Library/Fayalite (Fe-olivine).mdl +15 -0
  29. syncmoss-0.3.0/syncmoss/Library/Ferrihydrite (2-line).mdl +15 -0
  30. syncmoss-0.3.0/syncmoss/Library/Ferropericlase.mdl +13 -0
  31. syncmoss-0.3.0/syncmoss/Library/Goethite.mdl +13 -0
  32. syncmoss-0.3.0/syncmoss/Library/Green rust (fougerite, carbonate).mdl +17 -0
  33. syncmoss-0.3.0/syncmoss/Library/Haegg carbide.mdl +17 -0
  34. syncmoss-0.3.0/syncmoss/Library/Hedenbergite.mdl +13 -0
  35. syncmoss-0.3.0/syncmoss/Library/Hematite.mdl +13 -0
  36. syncmoss-0.3.0/syncmoss/Library/Heterosite (FePO4).mdl +13 -0
  37. syncmoss-0.3.0/syncmoss/Library/Ilmenite.mdl +13 -0
  38. syncmoss-0.3.0/syncmoss/Library/Iron phosphide.mdl +13 -0
  39. syncmoss-0.3.0/syncmoss/Library/Isocubanite.mdl +15 -0
  40. syncmoss-0.3.0/syncmoss/Library/Jarosite.mdl +13 -0
  41. syncmoss-0.3.0/syncmoss/Library/Kamacite.mdl +13 -0
  42. syncmoss-0.3.0/syncmoss/Library/Lepidocrocite.mdl +13 -0
  43. syncmoss-0.3.0/syncmoss/Library/Maghemite.mdl +15 -0
  44. syncmoss-0.3.0/syncmoss/Library/Magnetite.mdl +15 -0
  45. syncmoss-0.3.0/syncmoss/Library/Marcasite.mdl +13 -0
  46. syncmoss-0.3.0/syncmoss/Library/Melanterite.mdl +13 -0
  47. syncmoss-0.3.0/syncmoss/Library/Orthopyroxene (enstatite-ferrosilite).mdl +15 -0
  48. syncmoss-0.3.0/syncmoss/Library/Prussian blue (ferric ferrocyanide).mdl +15 -0
  49. syncmoss-0.3.0/syncmoss/Library/Pyrite.mdl +13 -0
  50. syncmoss-0.3.0/syncmoss/Library/Pyrrhotite.mdl +17 -0
  51. syncmoss-0.3.0/syncmoss/Library/Rhomboclase.mdl +13 -0
  52. syncmoss-0.3.0/syncmoss/Library/Roemerite.mdl +17 -0
  53. syncmoss-0.3.0/syncmoss/Library/Siderite.mdl +13 -0
  54. syncmoss-0.3.0/syncmoss/Library/Szomolnokite.mdl +13 -0
  55. syncmoss-0.3.0/syncmoss/Library/Taenite.mdl +13 -0
  56. syncmoss-0.3.0/syncmoss/Library/Talnakhite.mdl +13 -0
  57. syncmoss-0.3.0/syncmoss/Library/Tetrataenite.mdl +13 -0
  58. syncmoss-0.3.0/syncmoss/Library/Triphylite (LiFePO4).mdl +13 -0
  59. syncmoss-0.3.0/syncmoss/Library/Troilite.mdl +13 -0
  60. syncmoss-0.3.0/syncmoss/Library/Vivianite.mdl +17 -0
  61. syncmoss-0.3.0/syncmoss/Library/Voltaite.mdl +15 -0
  62. syncmoss-0.3.0/syncmoss/Library/alpha-Fe (metallic iron, bcc).mdl +13 -0
  63. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Library_io.py +17 -21
  64. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Library_window.py +11 -14
  65. syncmoss-0.3.0/syncmoss/constants.py +91 -0
  66. syncmoss-0.3.0/syncmoss/fitting_io.py +725 -0
  67. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/instrumental_io.py +91 -107
  68. syncmoss-0.3.0/syncmoss/legacy.py +282 -0
  69. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/main.py +1 -1
  70. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/minimi_lib.py +34 -13
  71. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/model_io.py +340 -188
  72. syncmoss-0.3.0/syncmoss/models.py +3046 -0
  73. syncmoss-0.3.0/syncmoss/models_description_window.py +244 -0
  74. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/models_positions.py +151 -108
  75. syncmoss-0.3.0/syncmoss/parameters/Be.txt +1 -0
  76. syncmoss-0.3.0/syncmoss/parameters/Calibration.dat +513 -0
  77. syncmoss-0.3.0/syncmoss/parameters/INSexp.txt +1 -0
  78. syncmoss-0.3.0/syncmoss/parameters/INSint.txt +1 -0
  79. syncmoss-0.3.0/syncmoss/parameters/KB.txt +1 -0
  80. syncmoss-0.3.0/syncmoss/parameters/calibr.png +0 -0
  81. syncmoss-0.3.0/syncmoss/parameters/help.md +183 -0
  82. syncmoss-0.3.0/syncmoss/parameters/models_description.md +447 -0
  83. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters_table.py +625 -224
  84. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/results_table.py +87 -91
  85. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/spectrum_io.py +121 -144
  86. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/spectrum_plotter.py +234 -94
  87. syncmoss-0.3.0/syncmoss/supp_menu.py +295 -0
  88. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/syncmoss_main.py +875 -885
  89. {syncmoss-0.2.2 → syncmoss-0.3.0/syncmoss.egg-info}/PKG-INFO +19 -5
  90. syncmoss-0.3.0/syncmoss.egg-info/SOURCES.txt +162 -0
  91. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/entry_points.txt +1 -1
  92. syncmoss-0.3.0/tests/conftest.py +151 -0
  93. syncmoss-0.3.0/tests/data/Distr_corr.mdl +10 -0
  94. syncmoss-0.3.0/tests/data/Distr_distr.mdl +12 -0
  95. syncmoss-0.3.0/tests/data/alpha_fe_sms_000.mca +73 -0
  96. syncmoss-0.3.0/tests/data/calibration_000_golden.json +1042 -0
  97. syncmoss-0.3.0/tests/data/generate_cal_fixtures.py +80 -0
  98. syncmoss-0.3.0/tests/data/synthetic_alpha_fe_cms_linear.mca +4 -0
  99. syncmoss-0.3.0/tests/golden_models.json +1247 -0
  100. {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/syncmoss_test.py +27 -17
  101. syncmoss-0.3.0/tests/test_calibration.py +172 -0
  102. syncmoss-0.3.0/tests/test_calibration_helpers.py +189 -0
  103. syncmoss-0.3.0/tests/test_distr_composition.py +163 -0
  104. syncmoss-0.3.0/tests/test_distr_expansion.py +317 -0
  105. syncmoss-0.3.0/tests/test_distr_mdl.py +122 -0
  106. syncmoss-0.3.0/tests/test_distr_targets.py +160 -0
  107. syncmoss-0.3.0/tests/test_golden_models.py +62 -0
  108. {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_gui_smoke.py +25 -3
  109. syncmoss-0.3.0/tests/test_hamiltonian_texture.py +490 -0
  110. {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_instrumental_metadata.py +5 -3
  111. syncmoss-0.3.0/tests/test_legacy.py +196 -0
  112. syncmoss-0.3.0/tests/test_model_append.py +226 -0
  113. syncmoss-0.3.0/tests/test_model_io.py +128 -0
  114. syncmoss-0.3.0/tests/test_model_only_mode.py +179 -0
  115. syncmoss-0.3.0/tests/test_nbaseline_results.py +138 -0
  116. syncmoss-0.3.0/tests/test_parameter_links.py +183 -0
  117. syncmoss-0.3.0/tests/test_polarization.py +217 -0
  118. syncmoss-0.3.0/tests/test_recon_composition.py +252 -0
  119. syncmoss-0.3.0/tests/test_recon_mdl.py +84 -0
  120. syncmoss-0.3.0/tests/test_recon_results.py +123 -0
  121. syncmoss-0.3.0/tests/test_reference_shift.py +135 -0
  122. syncmoss-0.3.0/tests/test_sdw_grid.py +73 -0
  123. syncmoss-0.3.0/tests/test_texture_s1.py +165 -0
  124. syncmoss-0.3.0/tests/test_thick_gui.py +233 -0
  125. syncmoss-0.2.2/.github/workflows/_Tests.yml +0 -56
  126. syncmoss-0.2.2/syncmoss/Calibration.dat +0 -514
  127. syncmoss-0.2.2/syncmoss/Calibration.py +0 -776
  128. syncmoss-0.2.2/syncmoss/Library/Hematite mineral test.mdl +0 -62
  129. syncmoss-0.2.2/syncmoss/Library/Magnetite mineral bulk test.mdl +0 -59
  130. syncmoss-0.2.2/syncmoss/Library/Wustite mineral test.mdl +0 -58
  131. syncmoss-0.2.2/syncmoss/Library/alfa iron test.mdl +0 -59
  132. syncmoss-0.2.2/syncmoss/constants.py +0 -9
  133. syncmoss-0.2.2/syncmoss/fitting_io.py +0 -695
  134. syncmoss-0.2.2/syncmoss/models.py +0 -1530
  135. syncmoss-0.2.2/syncmoss/parameters/Be.txt +0 -1
  136. syncmoss-0.2.2/syncmoss/parameters/Calibration.dat +0 -514
  137. syncmoss-0.2.2/syncmoss/parameters/INSexp.txt +0 -1
  138. syncmoss-0.2.2/syncmoss/parameters/INSint.txt +0 -1
  139. syncmoss-0.2.2/syncmoss/parameters/KB.txt +0 -1
  140. syncmoss-0.2.2/syncmoss.egg-info/SOURCES.txt +0 -80
  141. syncmoss-0.2.2/tests/conftest.py +0 -67
  142. syncmoss-0.2.2/tests/test_model_io.py +0 -80
  143. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_MacOS.yml +0 -0
  144. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_PyPI.yml +0 -0
  145. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_TagRelease.yml +0 -0
  146. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_UploadRelease.yml +0 -0
  147. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_Version.yml +0 -0
  148. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/_Wheels.yml +0 -0
  149. {syncmoss-0.2.2 → syncmoss-0.3.0}/.github/workflows/release.yml +0 -0
  150. {syncmoss-0.2.2 → syncmoss-0.3.0}/.vscode/settings.json +0 -0
  151. {syncmoss-0.2.2 → syncmoss-0.3.0}/COPYING.txt +0 -0
  152. {syncmoss-0.2.2 → syncmoss-0.3.0}/LICENSE +0 -0
  153. {syncmoss-0.2.2 → syncmoss-0.3.0}/Lib_test/test.mdl +0 -0
  154. {syncmoss-0.2.2 → syncmoss-0.3.0}/NOTICE.txt +0 -0
  155. {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/MacOS.spec +0 -0
  156. {syncmoss-0.2.2 → syncmoss-0.3.0}/bundle/Windows.spec +0 -0
  157. {syncmoss-0.2.2 → syncmoss-0.3.0}/requirements.txt +0 -0
  158. {syncmoss-0.2.2 → syncmoss-0.3.0}/setup.cfg +0 -0
  159. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/Hamiltonian_helper.py +0 -0
  160. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox.png +0 -0
  161. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_.png +0 -0
  162. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_L.png +0 -0
  163. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/CheckBox_L2.png +0 -0
  164. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/DU.png +0 -0
  165. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/Switch.png +0 -0
  166. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/UD.png +0 -0
  167. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/icons/icon_r.ico +0 -0
  168. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/ABSorber3.txt +0 -0
  169. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/GCMS.txt +0 -0
  170. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/INS_APS.txt +0 -0
  171. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/parameters/NFS.txt +0 -0
  172. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/support_math.py +0 -0
  173. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/test_graf.txt +0 -0
  174. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/test_param.txt +0 -0
  175. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/theme_dark.json +0 -0
  176. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss/theme_light.json +0 -0
  177. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/dependency_links.txt +0 -0
  178. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/requires.txt +0 -0
  179. {syncmoss-0.2.2 → syncmoss-0.3.0}/syncmoss.egg-info/top_level.txt +0 -0
  180. {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_expression_validation.py +0 -0
  181. {syncmoss-0.2.2 → syncmoss-0.3.0}/tests/test_library_io.py +0 -0
  182. {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
- pip install wheels/*.whl
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
- for tests/
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.2.2
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 case
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 case
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)
@@ -114,6 +114,8 @@ def verify():
114
114
  "parameters/GCMS.txt",
115
115
  "parameters/INSexp.txt",
116
116
  "parameters/INSint.txt",
117
+ "parameters/models_description.md",
118
+ "parameters/help.md",
117
119
  "theme_dark.json",
118
120
  "theme_light.json",
119
121
  "parameters/Calibration.dat",
@@ -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",