PyMieSimX 0.4.0__tar.gz → 0.4.4__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 (120) hide show
  1. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.github/workflows/deploy_coverage.yml +6 -11
  2. pymiesimx-0.4.4/.github/workflows/deploy_documentation.yml +116 -0
  3. pymiesimx-0.4.4/.github/workflows/deploy_release.yml +30 -0
  4. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.github/workflows/quality.yml +2 -2
  5. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.github/workflows/tests.yml +1 -1
  6. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.gitignore +2 -0
  7. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PKG-INFO +11 -1
  8. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/PKG-INFO +11 -1
  9. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/SOURCES.txt +15 -2
  10. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/requires.txt +7 -0
  11. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/scm_file_list.json +15 -2
  12. pymiesimx-0.4.4/PyMieSimX.egg-info/scm_version.json +8 -0
  13. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/README.rst +5 -0
  14. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/conda.recipe/meta.yaml +2 -0
  15. pymiesimx-0.4.4/docs/redirect.html +13 -0
  16. pymiesimx-0.4.4/docs/source/_static/favicon.svg +6 -0
  17. pymiesimx-0.4.4/docs/source/_static/logo.svg +39 -0
  18. pymiesimx-0.4.4/docs/source/api.rst +25 -0
  19. pymiesimx-0.4.4/docs/source/conf.py +59 -0
  20. pymiesimx-0.4.4/docs/source/contributing.rst +16 -0
  21. pymiesimx-0.4.4/docs/source/getting_started.rst +60 -0
  22. pymiesimx-0.4.4/docs/source/gui.rst +18 -0
  23. pymiesimx-0.4.4/docs/source/how_it_works.rst +36 -0
  24. pymiesimx-0.4.4/docs/source/index.rst +35 -0
  25. pymiesimx-0.4.4/docs/source/project.rst +9 -0
  26. pymiesimx-0.4.4/docs/source/reference.rst +10 -0
  27. pymiesimx-0.4.4/docs/source/sharing.rst +12 -0
  28. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/makefile +4 -1
  29. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/pyproject.toml +7 -0
  30. pymiesimx-0.4.0/.github/workflows/deploy_PyPi.yml +0 -17
  31. pymiesimx-0.4.0/.github/workflows/deploy_anaconda.yml +0 -29
  32. pymiesimx-0.4.0/PyMieSimX.egg-info/scm_version.json +0 -8
  33. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.coveragerc +0 -0
  34. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.flake8 +0 -0
  35. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.github/dependabot.yml +0 -0
  36. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/.pre-commit-config.yaml +0 -0
  37. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/AGENTS.md +0 -0
  38. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/CONTRIBUTING.md +0 -0
  39. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/Dockerfile +0 -0
  40. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/LICENSE +0 -0
  41. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/__init__.py +0 -0
  42. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/__main__.py +0 -0
  43. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/api.py +0 -0
  44. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/application/__init__.py +0 -0
  45. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/application/wsgi.py +0 -0
  46. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/__init__.py +0 -0
  47. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/admin.py +0 -0
  48. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/card-state.js +0 -0
  49. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/dashboard.css +0 -0
  50. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/default-settings.json +0 -0
  51. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/home-spf-radial.gif +0 -0
  52. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/home-spf-radial.png +0 -0
  53. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/logo.png +0 -0
  54. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/materials-stock.json +0 -0
  55. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/pymiesim-favicon.svg +0 -0
  56. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/pymiesim-logo-dark.svg +0 -0
  57. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/pymiesim-logo.svg +0 -0
  58. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/assets/simulation-sharing.js +0 -0
  59. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/callback_helpers.py +0 -0
  60. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/callbacks.py +0 -0
  61. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/components/__init__.py +0 -0
  62. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/components/cards.py +0 -0
  63. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/computation.py +0 -0
  64. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/defaults.py +0 -0
  65. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/experiment_service.py +0 -0
  66. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/interface.py +0 -0
  67. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/jobs.py +0 -0
  68. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/layout.py +0 -0
  69. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/material_catalog.py +0 -0
  70. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/models.py +0 -0
  71. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/__init__.py +0 -0
  72. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/citation.py +0 -0
  73. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/documentation.py +0 -0
  74. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/examples.py +0 -0
  75. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/experiment/__init__.py +0 -0
  76. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/experiment/page.py +0 -0
  77. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/experiment/sections/__init__.py +0 -0
  78. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/experiment/sections/configuration.py +0 -0
  79. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/field_syntax.py +0 -0
  80. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/home.py +0 -0
  81. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/install_local.py +0 -0
  82. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/population.py +0 -0
  83. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/sellmeier.py +0 -0
  84. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/settings.py +0 -0
  85. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/single/__init__.py +0 -0
  86. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/single/page.py +0 -0
  87. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/single/sections/__init__.py +0 -0
  88. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/single/sections/representations.py +0 -0
  89. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/pages/single/sections/setup.py +0 -0
  90. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/parsing.py +0 -0
  91. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/plotting.py +0 -0
  92. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/population_service.py +0 -0
  93. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/schemas.py +0 -0
  94. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/seo.py +0 -0
  95. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/services.py +0 -0
  96. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/sharing.py +0 -0
  97. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/single_service.py +0 -0
  98. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/usage_metrics.py +0 -0
  99. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX/gui/validation.py +0 -0
  100. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/dependency_links.txt +0 -0
  101. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/entry_points.txt +0 -0
  102. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/PyMieSimX.egg-info/top_level.txt +0 -0
  103. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/pytest.ini +0 -0
  104. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/setup.cfg +0 -0
  105. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/browser/test_dashboard.py +0 -0
  106. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/cli.py +0 -0
  107. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_admin.py +0 -0
  108. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_api.py +0 -0
  109. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_dash_callbacks.py +0 -0
  110. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_examples.py +0 -0
  111. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_home.py +0 -0
  112. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_population.py +0 -0
  113. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_seo.py +0 -0
  114. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_services.py +0 -0
  115. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_sharing.py +0 -0
  116. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tests/gui/test_usage_metrics.py +0 -0
  117. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tools/generate_home_spf.py +0 -0
  118. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tools/next_release_version.py +0 -0
  119. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tools/release_tag.py +0 -0
  120. {pymiesimx-0.4.0 → pymiesimx-0.4.4}/tools/verify_conda_artifact.py +0 -0
@@ -16,18 +16,13 @@ jobs:
16
16
  name: Run GUI tests and publish coverage
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
- - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
20
- with:
21
- fetch-depth: 0
22
-
23
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
19
+ - name: Set up Python and CI dependencies
20
+ uses: MartinPdeS/MPSActions/actions/setup-python@a01969bc5af90666281f9d37acffdf6a4629763a
24
21
  with:
25
22
  python-version: "3.11"
26
-
27
- - name: Install package and test dependencies
28
- run: |
29
- python -m pip install --upgrade pip wheel build
30
- python -m pip install -e ".[testing]"
23
+ install-command: >-
24
+ python -m pip install --upgrade pip wheel build && python -m pip install -e ".[testing]"
25
+ fetch-depth: 0
31
26
 
32
27
  - name: Initialize material catalog
33
28
  run: python -m PyOptik setup --no-progress
@@ -46,7 +41,7 @@ jobs:
46
41
 
47
42
  - name: Post coverage comment
48
43
  if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
49
- uses: py-cov-action/python-coverage-comment-action@v3
44
+ uses: py-cov-action/python-coverage-comment-action@a05be3d2e8a6272d3ef5fb2840ab20368bb2eb71
50
45
  with:
51
46
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52
47
  MINIMUM_GREEN: 90
@@ -0,0 +1,116 @@
1
+ # Build and publish the versioned documentation site.
2
+ name: Documentation
3
+
4
+ on:
5
+ push:
6
+ branches: ["**"]
7
+ tags: ["v*"]
8
+ pull_request:
9
+ branches: ["master"]
10
+
11
+ concurrency:
12
+ group: documentation-build-${{ github.repository }}
13
+ cancel-in-progress: false
14
+
15
+ permissions:
16
+ contents: write
17
+ pages: write
18
+ id-token: write
19
+
20
+ jobs:
21
+ ManyLinux_x86_64:
22
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_documentation.yml@a01969bc5af90666281f9d37acffdf6a4629763a
23
+ with:
24
+ python-version: "3.11"
25
+ package-name: "PyMieSimX"
26
+ apt-package: xvfb jq
27
+ deploy-pages: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v')) }}
28
+
29
+ prune_documentation_versions:
30
+ needs: ManyLinux_x86_64
31
+ if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v')) }}
32
+ runs-on: ubuntu-latest
33
+ env:
34
+ DOCUMENTATION_BRANCH: documentation_page
35
+ VERSION_RETENTION_COUNT: 5
36
+
37
+ steps:
38
+ - name: Checkout documentation branch
39
+ uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
40
+ with:
41
+ fetch-depth: 0
42
+ ref: ${{ env.DOCUMENTATION_BRANCH }}
43
+
44
+ - name: Retain only the newest documentation versions
45
+ run: |
46
+ set -Eeuo pipefail
47
+
48
+ mapfile -t versions < <(
49
+ find docs \
50
+ -mindepth 1 \
51
+ -maxdepth 1 \
52
+ -type d \
53
+ -printf "%f\n" \
54
+ | grep -v "^latest$" \
55
+ | sort -V -r
56
+ )
57
+
58
+ for version in "${versions[@]:${VERSION_RETENTION_COUNT}}"; do
59
+ git rm -r -- "docs/${version}"
60
+ done
61
+
62
+ - name: Install documentation landing page
63
+ run: |
64
+ set -Eeuo pipefail
65
+ git show "${GITHUB_SHA}:docs/redirect.html" > index.html
66
+ test -s docs/latest/index.html
67
+
68
+ - name: Rebuild version switcher
69
+ run: |
70
+ set -Eeuo pipefail
71
+
72
+ base_url="https://martinpdes.github.io/PyMieSimX/docs"
73
+ mapfile -t versions < <(
74
+ find docs \
75
+ -mindepth 1 \
76
+ -maxdepth 1 \
77
+ -type d \
78
+ -printf "%f\n" \
79
+ | grep -v "^latest$" \
80
+ | sort -V -r
81
+ )
82
+
83
+ jq -n \
84
+ --arg base_url "${base_url}" \
85
+ --argjson versions "$(printf '%s\n' "${versions[@]}" | jq -R . | jq -s .)" \
86
+ '[
87
+ {
88
+ name: "latest",
89
+ version: "latest",
90
+ url: ($base_url + "/latest")
91
+ }
92
+ ] + [
93
+ $versions[] | {
94
+ name: .,
95
+ version: .,
96
+ url: ($base_url + "/" + .)
97
+ }
98
+ ]' > version_switcher.json
99
+
100
+ jq . version_switcher.json
101
+
102
+ - name: Commit pruned documentation
103
+ run: |
104
+ set -Eeuo pipefail
105
+
106
+ git config user.name "github-actions[bot]"
107
+ git config user.email "github-actions[bot]@users.noreply.github.com"
108
+ git add index.html version_switcher.json
109
+
110
+ if git diff --cached --quiet; then
111
+ echo "Documentation landing page and retention policy are up to date."
112
+ exit 0
113
+ fi
114
+
115
+ git commit -m "Update documentation landing page and retain ${VERSION_RETENTION_COUNT} versions [skip ci]"
116
+ git push origin "HEAD:${DOCUMENTATION_BRANCH}"
@@ -0,0 +1,30 @@
1
+ name: Publish release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ pypi:
12
+ name: Publish to PyPI
13
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_pure_package_to_PyPi.yml@a01969bc5af90666281f9d37acffdf6a4629763a
14
+ with:
15
+ python-version: "3.11"
16
+ test-command: python -c "import PyMieSimX"
17
+ secrets:
18
+ PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
19
+
20
+ conda:
21
+ name: Publish Conda package
22
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_compiled_package_to_anaconda.yml@a01969bc5af90666281f9d37acffdf6a4629763a
23
+ with:
24
+ python_versions: '["3.11", "3.12", "3.13", "3.14"]'
25
+ os_list: '["ubuntu-latest", "macos-latest", "windows-latest"]'
26
+ package_name: pymiesimx
27
+ recipe_path: conda.recipe
28
+ test_import: PyMieSimX
29
+ secrets:
30
+ ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
@@ -17,7 +17,7 @@ jobs:
17
17
  python-version: ["3.11", "3.13"]
18
18
  steps:
19
19
  - name: Set up Python and CI dependencies
20
- uses: MartinPdeS/MPSActions/actions/setup-python@0f5927acf88b25b5d253421e508387897096a2cc
20
+ uses: MartinPdeS/MPSActions/actions/setup-python@a01969bc5af90666281f9d37acffdf6a4629763a
21
21
  with:
22
22
  python-version: "${{ matrix.python-version }}"
23
23
  install-command: >-
@@ -35,7 +35,7 @@ jobs:
35
35
  runs-on: ubuntu-latest
36
36
  steps:
37
37
  - name: Set up Python and CI dependencies
38
- uses: MartinPdeS/MPSActions/actions/setup-python@0f5927acf88b25b5d253421e508387897096a2cc
38
+ uses: MartinPdeS/MPSActions/actions/setup-python@a01969bc5af90666281f9d37acffdf6a4629763a
39
39
  with:
40
40
  python-version: "3.11"
41
41
  install-command: >-
@@ -18,7 +18,7 @@ jobs:
18
18
  python-version: ["3.11", "3.14"]
19
19
  steps:
20
20
  - name: Set up Python and CI dependencies
21
- uses: MartinPdeS/MPSActions/actions/setup-python@0f5927acf88b25b5d253421e508387897096a2cc
21
+ uses: MartinPdeS/MPSActions/actions/setup-python@a01969bc5af90666281f9d37acffdf6a4629763a
22
22
  with:
23
23
  python-version: "${{ matrix.python-version }}"
24
24
  install-command: >-
@@ -9,6 +9,8 @@ build/
9
9
  dist/
10
10
  .coverage
11
11
  htmlcov/
12
+ docs/_build/
13
+ docs/source/generated/
12
14
  .DS_Store
13
15
  !conda.recipe/
14
16
  !conda.recipe/meta.yaml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyMieSimX
3
- Version: 0.4.0
3
+ Version: 0.4.4
4
4
  Summary: Graphical Dash interface for PyMieSim.
5
5
  Author-email: Martin Poinsinet de Sivry-Houle <martin.poinsinet.de.sivry@gmail.com>
6
6
  License-Expression: MIT
@@ -18,6 +18,7 @@ Requires-Dist: dash<5,>=4.1.0
18
18
  Requires-Dist: gunicorn<24,>=23.0.0
19
19
  Requires-Dist: numpy<3,>=2.0
20
20
  Requires-Dist: pandas<3,>=2.2
21
+ Requires-Dist: pint<0.26,>=0.24
21
22
  Requires-Dist: plotly<7,>=5.24
22
23
  Requires-Dist: psycopg[binary]<4,>=3.2.9
23
24
  Provides-Extra: testing
@@ -30,11 +31,20 @@ Provides-Extra: dev
30
31
  Requires-Dist: build>=1.2; extra == "dev"
31
32
  Requires-Dist: mypy==1.15.0; extra == "dev"
32
33
  Requires-Dist: ruff==0.11.2; extra == "dev"
34
+ Provides-Extra: docs
35
+ Requires-Dist: MartinPdeS-docs<0.3,>=0.2.1; extra == "docs"
36
+ Provides-Extra: documentation
37
+ Requires-Dist: MartinPdeS-docs<0.3,>=0.2.1; extra == "documentation"
33
38
  Dynamic: license-file
34
39
 
35
40
  PyMieSimX
36
41
  =========
37
42
 
43
+ .. image:: docs/source/_static/logo.svg
44
+ :alt: PyMieSimX
45
+ :align: center
46
+ :width: 420px
47
+
38
48
  PyMieSimX is the standalone graphical interface for `PyMieSim
39
49
  <https://github.com/MartinPdeS/PyMieSim>`_. It provides a Dash application for
40
50
  configuring optical setups, running parameter sweeps, exploring individual
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyMieSimX
3
- Version: 0.4.0
3
+ Version: 0.4.4
4
4
  Summary: Graphical Dash interface for PyMieSim.
5
5
  Author-email: Martin Poinsinet de Sivry-Houle <martin.poinsinet.de.sivry@gmail.com>
6
6
  License-Expression: MIT
@@ -18,6 +18,7 @@ Requires-Dist: dash<5,>=4.1.0
18
18
  Requires-Dist: gunicorn<24,>=23.0.0
19
19
  Requires-Dist: numpy<3,>=2.0
20
20
  Requires-Dist: pandas<3,>=2.2
21
+ Requires-Dist: pint<0.26,>=0.24
21
22
  Requires-Dist: plotly<7,>=5.24
22
23
  Requires-Dist: psycopg[binary]<4,>=3.2.9
23
24
  Provides-Extra: testing
@@ -30,11 +31,20 @@ Provides-Extra: dev
30
31
  Requires-Dist: build>=1.2; extra == "dev"
31
32
  Requires-Dist: mypy==1.15.0; extra == "dev"
32
33
  Requires-Dist: ruff==0.11.2; extra == "dev"
34
+ Provides-Extra: docs
35
+ Requires-Dist: MartinPdeS-docs<0.3,>=0.2.1; extra == "docs"
36
+ Provides-Extra: documentation
37
+ Requires-Dist: MartinPdeS-docs<0.3,>=0.2.1; extra == "documentation"
33
38
  Dynamic: license-file
34
39
 
35
40
  PyMieSimX
36
41
  =========
37
42
 
43
+ .. image:: docs/source/_static/logo.svg
44
+ :alt: PyMieSimX
45
+ :align: center
46
+ :width: 420px
47
+
38
48
  PyMieSimX is the standalone graphical interface for `PyMieSim
39
49
  <https://github.com/MartinPdeS/PyMieSim>`_. It provides a Dash application for
40
50
  configuring optical setups, running parameter sweeps, exploring individual
@@ -11,9 +11,9 @@ makefile
11
11
  pyproject.toml
12
12
  pytest.ini
13
13
  .github/dependabot.yml
14
- .github/workflows/deploy_PyPi.yml
15
- .github/workflows/deploy_anaconda.yml
16
14
  .github/workflows/deploy_coverage.yml
15
+ .github/workflows/deploy_documentation.yml
16
+ .github/workflows/deploy_release.yml
17
17
  .github/workflows/quality.yml
18
18
  .github/workflows/tests.yml
19
19
  PyMieSimX/__init__.py
@@ -84,6 +84,19 @@ PyMieSimX/gui/pages/single/sections/__init__.py
84
84
  PyMieSimX/gui/pages/single/sections/representations.py
85
85
  PyMieSimX/gui/pages/single/sections/setup.py
86
86
  conda.recipe/meta.yaml
87
+ docs/redirect.html
88
+ docs/source/api.rst
89
+ docs/source/conf.py
90
+ docs/source/contributing.rst
91
+ docs/source/getting_started.rst
92
+ docs/source/gui.rst
93
+ docs/source/how_it_works.rst
94
+ docs/source/index.rst
95
+ docs/source/project.rst
96
+ docs/source/reference.rst
97
+ docs/source/sharing.rst
98
+ docs/source/_static/favicon.svg
99
+ docs/source/_static/logo.svg
87
100
  tests/browser/test_dashboard.py
88
101
  tests/gui/cli.py
89
102
  tests/gui/test_admin.py
@@ -4,6 +4,7 @@ dash<5,>=4.1.0
4
4
  gunicorn<24,>=23.0.0
5
5
  numpy<3,>=2.0
6
6
  pandas<3,>=2.2
7
+ pint<0.26,>=0.24
7
8
  plotly<7,>=5.24
8
9
  psycopg[binary]<4,>=3.2.9
9
10
 
@@ -15,6 +16,12 @@ build>=1.2
15
16
  mypy==1.15.0
16
17
  ruff==0.11.2
17
18
 
19
+ [docs]
20
+ MartinPdeS-docs<0.3,>=0.2.1
21
+
22
+ [documentation]
23
+ MartinPdeS-docs<0.3,>=0.2.1
24
+
18
25
  [testing]
19
26
  pytest>=8.0
20
27
  pytest-cov>=5.0
@@ -3,9 +3,9 @@
3
3
  ".coveragerc",
4
4
  ".flake8",
5
5
  ".github/dependabot.yml",
6
- ".github/workflows/deploy_PyPi.yml",
7
- ".github/workflows/deploy_anaconda.yml",
8
6
  ".github/workflows/deploy_coverage.yml",
7
+ ".github/workflows/deploy_documentation.yml",
8
+ ".github/workflows/deploy_release.yml",
9
9
  ".github/workflows/quality.yml",
10
10
  ".github/workflows/tests.yml",
11
11
  ".gitignore",
@@ -75,6 +75,19 @@
75
75
  "PyMieSimX/gui/validation.py",
76
76
  "README.rst",
77
77
  "conda.recipe/meta.yaml",
78
+ "docs/redirect.html",
79
+ "docs/source/_static/favicon.svg",
80
+ "docs/source/_static/logo.svg",
81
+ "docs/source/api.rst",
82
+ "docs/source/conf.py",
83
+ "docs/source/contributing.rst",
84
+ "docs/source/getting_started.rst",
85
+ "docs/source/gui.rst",
86
+ "docs/source/how_it_works.rst",
87
+ "docs/source/index.rst",
88
+ "docs/source/project.rst",
89
+ "docs/source/reference.rst",
90
+ "docs/source/sharing.rst",
78
91
  "makefile",
79
92
  "pyproject.toml",
80
93
  "pytest.ini",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.4.4",
3
+ "distance": 0,
4
+ "node": "gd743aadbd5ddcce6e4494736545d702e22ca6547",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-21"
8
+ }
@@ -1,6 +1,11 @@
1
1
  PyMieSimX
2
2
  =========
3
3
 
4
+ .. image:: docs/source/_static/logo.svg
5
+ :alt: PyMieSimX
6
+ :align: center
7
+ :width: 420px
8
+
4
9
  PyMieSimX is the standalone graphical interface for `PyMieSim
5
10
  <https://github.com/MartinPdeS/PyMieSim>`_. It provides a Dash application for
6
11
  configuring optical setups, running parameter sweeps, exploring individual
@@ -7,6 +7,7 @@ source:
7
7
 
8
8
  build:
9
9
  number: 0
10
+ string: py{{ PY_VER | replace('.', '') }}_{{ PKG_BUILDNUM }}
10
11
  script_env:
11
12
  - SETUPTOOLS_SCM_PRETEND_VERSION={{ GIT_DESCRIBE_TAG | replace("v", "") }}
12
13
  entry_points:
@@ -27,6 +28,7 @@ requirements:
27
28
  - gunicorn >=23.0.0,<24 # [not win]
28
29
  - numpy >=2.0,<3
29
30
  - pandas >=2.2,<3
31
+ - pint >=0.24,<0.26
30
32
  - plotly >=5.24,<7
31
33
  - psycopg >=3.2.9,<4
32
34
 
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta http-equiv="refresh" content="0; url=docs/latest/index.html">
7
+ <link rel="canonical" href="docs/latest/index.html">
8
+ <title>PyMieSimX documentation</title>
9
+ </head>
10
+ <body>
11
+ <p>Continue to the <a href="docs/latest/index.html">PyMieSimX documentation</a>.</p>
12
+ </body>
13
+ </html>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="PMS favicon">
3
+ <title>PMS</title>
4
+ <rect width="64" height="64" rx="12" fill="#000000"/>
5
+ <text x="32" y="41" text-anchor="middle" fill="#2f80ff" font-family="Arial, Helvetica, sans-serif" font-size="24" font-weight="800" letter-spacing="1">PMS</text>
6
+ </svg>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg"
3
+ width="1100" height="400"
4
+ viewBox="200 50 700 400"
5
+ role="img"
6
+ aria-label="PyMieSim Flow-cytometry Calibration logo">
7
+ <title>PyMieSim Flow-cytometry Calibration</title>
8
+ <style>
9
+ .logo-main {
10
+ font-family: "Avenir Next", "Century Gothic", Futura, Montserrat, Arial, serif;
11
+ font-size: 186px;
12
+ font-weight: 560;
13
+ letter-spacing: -3px;
14
+ fill: #26272a;
15
+ }
16
+ .logo-subtitle {
17
+ font-family: "Avenir Next", "Century Gothic", Futura, Montserrat, Arial, sans-serif;
18
+ font-size: 55px;
19
+ font-weight: 350;
20
+ letter-spacing: -1.2px;
21
+ fill: #26272a;
22
+ text-anchor: end;
23
+ }
24
+ </style>
25
+
26
+ <text class="logo-main" x="35" y="290"><tspan>P</tspan><tspan dx="9">yMieSim</tspan></text>
27
+
28
+ <!-- Original blue/cyan chevron X preserved as vector paths, shifted slightly right for better spacing -->
29
+ <g transform="translate(-108,0)">
30
+ <path d="m 975.8673,149.6464 h 26 l 64,88 -64,88 h -26 l 64,-88 z"
31
+ fill="#2d6df6"/>
32
+ <path d="m 1135.8673,149.6464 h 28 l -64,88 64,88 h -28 l -62,-88 z"
33
+ fill="#16c9dc"/>
34
+ </g>
35
+
36
+ <text class="logo-subtitle" x="1078" y="397">Light Scattering Simulation</text>
37
+ <line x1="460" y1="416" x2="1078" y2="416"
38
+ stroke="#26272a" stroke-width="5" stroke-linecap="butt" />
39
+ </svg>
@@ -0,0 +1,25 @@
1
+ Python API
2
+ ==========
3
+
4
+ The top-level API is independent of the Dash server and is useful in scripts,
5
+ notebooks, and automated workflows.
6
+
7
+ .. autosummary::
8
+ :toctree: generated
9
+
10
+ PyMieSimX.api.run_experiment
11
+ PyMieSimX.api.compute_population_optics
12
+ PyMieSimX.api.validate_experiment_inputs
13
+ PyMieSimX.api.available_measures
14
+ PyMieSimX.api.export_result_to_csv
15
+ PyMieSimX.api.export_single_result_to_csv
16
+ PyMieSimX.api.export_population_to_csv
17
+ PyMieSimX.api.estimate_result_size
18
+ PyMieSimX.api.estimate_sweep_size
19
+
20
+ API module
21
+ ----------
22
+
23
+ .. automodule:: PyMieSimX.api
24
+ :no-members:
25
+ :show-inheritance:
@@ -0,0 +1,59 @@
1
+ """Sphinx configuration for PyMieSimX."""
2
+
3
+ import subprocess
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ from martinpdes_docs import configure
8
+
9
+
10
+ # API autodoc imports the calculation services, which resolve named PyOptik
11
+ # materials. Populate the catalogue on a fresh documentation runner.
12
+ try:
13
+ from PyOptik.directories import user_data_path
14
+ except ImportError:
15
+ user_data_path = None
16
+ else:
17
+ catalog_path = Path(user_data_path) / "rii" / "catalog-nk.yml"
18
+ if not catalog_path.is_file():
19
+ subprocess.run(
20
+ [sys.executable, "-m", "PyOptik", "setup", "--no-progress"],
21
+ check=True,
22
+ )
23
+
24
+
25
+ project = "PyMieSimX"
26
+ package = "PyMieSimX"
27
+ repository = "MartinPdeS/PyMieSimX"
28
+ author = "Martin Poinsinet de Sivry-Houle"
29
+
30
+ # PyMieSimX documents a stable Python API and its Dash application; it does
31
+ # not currently have executable gallery examples.
32
+ globals().update(
33
+ configure(
34
+ project=project,
35
+ package=package,
36
+ author=author,
37
+ repository=repository,
38
+ logo="_static/logo.svg",
39
+ favicon="_static/favicon.svg",
40
+ extensions=[
41
+ "sphinx.ext.autodoc",
42
+ "sphinx.ext.autosummary",
43
+ "sphinx.ext.intersphinx",
44
+ "sphinx.ext.napoleon",
45
+ "sphinx.ext.viewcode",
46
+ "sphinx.ext.todo",
47
+ "sphinx_design",
48
+ ],
49
+ )
50
+ )
51
+
52
+ autodoc_default_options.update({"members": True})
53
+ html_context.update({"doc_path": "docs/source", "default_mode": "dark"})
54
+
55
+ intersphinx_mapping = {
56
+ "numpy": ("https://numpy.org/devdocs", None),
57
+ "pandas": ("https://pandas.pydata.org/docs", None),
58
+ "plotly": ("https://plotly.com/python-api-reference", None),
59
+ }
@@ -0,0 +1,16 @@
1
+ Contributing
2
+ ============
3
+
4
+ Install the development dependencies in an editable environment::
5
+
6
+ python -m pip install -e ".[testing,dev,docs]"
7
+
8
+ Run the checks locally with::
9
+
10
+ make quality
11
+ make test
12
+ make docs
13
+
14
+ The project uses Ruff for formatting and linting, mypy for selected typed
15
+ modules, and pytest for the GUI and API tests. Pull requests run these checks
16
+ through GitHub Actions.
@@ -0,0 +1,60 @@
1
+ Getting started
2
+ ===============
3
+
4
+ Installation
5
+ ------------
6
+
7
+ Install the application from PyPI::
8
+
9
+ python -m pip install PyMieSimX
10
+
11
+ PyMieSimX uses PyOptik's material catalogue. Initialize the local catalogue
12
+ explicitly when setting up a new environment::
13
+
14
+ python -m PyOptik setup --no-progress
15
+
16
+ Start the dashboard with::
17
+
18
+ pymiesimx
19
+
20
+ The command accepts ``--host``, ``--port``, ``--no-browser``, and ``--debug``.
21
+ Run ``pymiesimx --help`` for the complete list.
22
+
23
+ First workflow
24
+ --------------
25
+
26
+ #. Open **Single scatterer** to configure a wavelength, source, particle, and
27
+ detector.
28
+ #. Choose a named material from PyOptik or enter a complex refractive index.
29
+ #. Select a measure such as ``Qsca`` or ``Qext`` and press **Run**.
30
+ #. Use the plot controls to inspect the result and export the data as CSV.
31
+
32
+ For parameter studies, use **Parameter scan** to select the varied quantities
33
+ and their ranges. PyMieSimX validates the sweep size before submitting it to a
34
+ bounded background worker, so the interface remains responsive while a run is
35
+ queued or executing.
36
+
37
+ Python API
38
+ ----------
39
+
40
+ The calculation layer is available without creating a Dash application::
41
+
42
+ from PyMieSimX import run_experiment
43
+
44
+ result = run_experiment(
45
+ source_type="GaussianSet",
46
+ source_values={
47
+ "wavelength": "650",
48
+ "polarization": "0",
49
+ "optical_power": "1e-3",
50
+ "numerical_aperture": "0.2",
51
+ },
52
+ scatterer_type="SphereSet",
53
+ scatterer_values={"diameter": "500", "material": "1.4", "medium": "1.0"},
54
+ detector_type="None",
55
+ detector_values={},
56
+ measure="Qsca",
57
+ )
58
+
59
+ See :doc:`api` for result-size validation, multiple measures, population
60
+ optics, and CSV export helpers.
@@ -0,0 +1,18 @@
1
+ Graphical interface
2
+ ===================
3
+
4
+ The optional Dash interface is exposed through two helpers:
5
+
6
+ ``create_dash_app``
7
+ Create the configured Dash application for embedding in another service.
8
+
9
+ ``OpticalSetupGUI``
10
+ Construct the application wrapper used by the ``pymiesimx`` command.
11
+
12
+ These objects are imported lazily, so importing :mod:`PyMieSimX` for its
13
+ calculation API does not start a web server. The command-line entry point is
14
+ the recommended way to launch the complete interface.
15
+
16
+ .. automodule:: PyMieSimX.gui.interface
17
+ :members: create_dash_app, OpticalSetupGUI
18
+ :show-inheritance:
@@ -0,0 +1,36 @@
1
+ How it works
2
+ ============
3
+
4
+ PyMieSimX separates the interactive application from the optical calculations.
5
+ The Dash pages collect user input, validate it, and pass normalized values to
6
+ PyMieSim. Results are converted into tables and Plotly figures for the browser.
7
+
8
+ The main pieces are:
9
+
10
+ * **Setup and validation** normalize units, material choices, source settings,
11
+ detector settings, and sweep bounds before a calculation starts.
12
+ * **PyMieSim** constructs the scatterer, source, and detector objects and
13
+ computes the requested observables.
14
+ * **Background jobs** keep larger parameter scans away from the request thread
15
+ and report queued, running, completed, and failed states to the UI.
16
+ * **Result guards** estimate dataframe and serialized payload sizes before a
17
+ run, then check the actual result before it is sent to the browser.
18
+ * **Sharing** stores a validated configuration in a URL. Opening a shared URL
19
+ restores the inputs and runs the setup again with the installed dependencies.
20
+
21
+ Material names are resolved by PyOptik and therefore follow the catalogue
22
+ available in the current environment. A direct ``n+ik`` value can be used when
23
+ an entry is not available.
24
+
25
+ Ensemble optics
26
+ ---------------
27
+
28
+ The ensemble workflow evaluates a population of homogeneous spherical
29
+ particles at one wavelength. It supports monodisperse, truncated Gaussian,
30
+ lognormal, and uniform number-based diameter distributions. Cross sections are
31
+ averaged over the sampled population; effective anisotropy is weighted by
32
+ scattering cross section, and population albedo is the ratio of mean scattering
33
+ to mean extinction cross section.
34
+
35
+ Use dilute-population assumptions: particle interactions, multiple scattering,
36
+ and host-medium absorption are outside this model.
@@ -0,0 +1,35 @@
1
+ PyMieSimX
2
+ =========
3
+
4
+ .. image:: _static/logo.svg
5
+ :alt: PyMieSimX
6
+ :align: center
7
+ :width: 520px
8
+
9
+ PyMieSimX is a Dash interface for configuring and exploring
10
+ `PyMieSim <https://martinpdes.github.io/PyMieSim/>`_ scattering simulations.
11
+ Use the web interface for interactive work, or call the lightweight Python API
12
+ from scripts and notebooks.
13
+
14
+ .. toctree::
15
+ :maxdepth: 2
16
+ :caption: User guide
17
+
18
+ getting_started
19
+ how_it_works
20
+ sharing
21
+ Reference <reference>
22
+ Project <project>
23
+
24
+ Key features
25
+ ------------
26
+
27
+ * Configure single scatterer, parameter-scan, and ensemble optics studies.
28
+ * Explore scattering, absorption, extinction, efficiencies, and angular plots.
29
+ * Share a complete simulation setup with a URL and export computed results as
30
+ CSV files.
31
+ * Use the same calculations without starting Dash through the Python API.
32
+
33
+ The scientific solver and material catalogue are provided by PyMieSim and
34
+ PyOptik. PyMieSimX focuses on the user interface, validation, plotting, and
35
+ export workflows around them.
@@ -0,0 +1,9 @@
1
+ Project
2
+ =======
3
+
4
+ Find guidance for sharing simulations and contributing to PyMieSimX.
5
+
6
+ .. toctree::
7
+ :maxdepth: 2
8
+
9
+ contributing
@@ -0,0 +1,10 @@
1
+ Reference
2
+ =========
3
+
4
+ The reference section covers the Python API and the graphical interface.
5
+
6
+ .. toctree::
7
+ :maxdepth: 2
8
+
9
+ api
10
+ gui
@@ -0,0 +1,12 @@
1
+ Sharing simulations
2
+ ===================
3
+
4
+ Use **Copy simulation link** in Single scatterer, Parameter scan, or Ensemble
5
+ optics to share the current setup. A link contains the configuration, sweep
6
+ ranges, selected measures, and plot settings; it does not contain a snapshot of
7
+ the computed result.
8
+
9
+ When a link is opened, PyMieSimX restores the inputs and recalculates the
10
+ simulation with the installed PyMieSim and PyOptik versions. Results can change
11
+ when those dependencies or material data are updated. Use **Run** after editing
12
+ any restored value.
@@ -1,7 +1,7 @@
1
1
  PYTHON ?= python3
2
2
  BUILD_DIR ?= build
3
3
 
4
- .PHONY: quality test build install editable run docker-build docker-run clean release tag patch minor major
4
+ .PHONY: quality test docs build install editable run docker-build docker-run clean release tag patch minor major
5
5
 
6
6
  quality:
7
7
  $(PYTHON) -m ruff check PyMieSimX tests
@@ -10,6 +10,9 @@ quality:
10
10
  test:
11
11
  $(PYTHON) -m pytest
12
12
 
13
+ docs:
14
+ $(PYTHON) -m sphinx -M html docs/source docs/_build
15
+
13
16
  build:
14
17
  $(PYTHON) -m build --outdir $(BUILD_DIR)
15
18
 
@@ -20,6 +20,7 @@ dependencies = [
20
20
  "gunicorn>=23.0.0,<24",
21
21
  "numpy>=2.0,<3",
22
22
  "pandas>=2.2,<3",
23
+ "pint>=0.24,<0.26",
23
24
  "plotly>=5.24,<7",
24
25
  "psycopg[binary]>=3.2.9,<4",
25
26
  ]
@@ -51,6 +52,12 @@ dev = [
51
52
  "mypy==1.15.0",
52
53
  "ruff==0.11.2",
53
54
  ]
55
+ docs = [
56
+ "MartinPdeS-docs>=0.2.1,<0.3",
57
+ ]
58
+ documentation = [
59
+ "MartinPdeS-docs>=0.2.1,<0.3",
60
+ ]
54
61
 
55
62
  [tool.setuptools.packages.find]
56
63
  include = ["PyMieSimX*"]
@@ -1,17 +0,0 @@
1
- name: Publish to PyPI
2
-
3
- on:
4
- push:
5
- tags: ["v*"]
6
-
7
- permissions:
8
- contents: read
9
-
10
- jobs:
11
- publish:
12
- uses: MartinPdeS/MPSActions/.github/workflows/publish_pure_package_to_PyPi.yml@v5
13
- with:
14
- python-version: "3.11"
15
- test-command: python -c 'import PyMieSimX'
16
- secrets:
17
- PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
@@ -1,29 +0,0 @@
1
- name: Publish Conda package
2
-
3
- on:
4
- workflow_dispatch:
5
- push:
6
- tags: ["v*"]
7
-
8
- permissions:
9
- contents: read
10
-
11
- jobs:
12
- publish:
13
- uses: MartinPdeS/MPSActions/.github/workflows/publish_compiled_package_to_anaconda.yml@v6
14
- with:
15
- python_versions: '["3.11", "3.12", "3.13", "3.14"]'
16
- os_list: '["ubuntu-latest", "macos-latest", "windows-latest"]'
17
- package_name: pymiesimx
18
- recipe_path: conda.recipe
19
- test_import: PyMieSimX
20
- # Shell startup in the reusable workflow reactivates base, even through
21
- # conda run. Invoke the installed environment's interpreter directly.
22
- test_command: >-
23
- if [ -f '${test_prefix}/python.exe' ]; then
24
- '${test_prefix}/python.exe' '${GITHUB_WORKSPACE}/tools/verify_conda_artifact.py';
25
- else
26
- '${test_prefix}/bin/python' '${GITHUB_WORKSPACE}/tools/verify_conda_artifact.py';
27
- fi
28
- secrets:
29
- ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.4.0",
3
- "distance": 0,
4
- "node": "g6131b4aa6a95ee2656d32918dffe6f87541c13cf",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-13"
8
- }
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