PyMieSimX 0.3.0__tar.gz → 0.4.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.

Potentially problematic release.


This version of PyMieSimX might be problematic. Click here for more details.

Files changed (105) hide show
  1. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/workflows/deploy_anaconda.yml +2 -2
  2. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/workflows/tests.yml +5 -1
  3. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PKG-INFO +5 -1
  4. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/callbacks.py +1 -1
  5. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/PKG-INFO +5 -1
  6. pymiesimx-0.4.0/PyMieSimX.egg-info/scm_version.json +8 -0
  7. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/pyproject.toml +7 -0
  8. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/browser/test_dashboard.py +3 -3
  9. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_sharing.py +1 -1
  10. pymiesimx-0.3.0/PyMieSimX.egg-info/scm_version.json +0 -8
  11. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.coveragerc +0 -0
  12. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.flake8 +0 -0
  13. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/dependabot.yml +0 -0
  14. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/workflows/deploy_PyPi.yml +0 -0
  15. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/workflows/deploy_coverage.yml +0 -0
  16. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.github/workflows/quality.yml +0 -0
  17. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.gitignore +0 -0
  18. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/.pre-commit-config.yaml +0 -0
  19. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/AGENTS.md +0 -0
  20. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/CONTRIBUTING.md +0 -0
  21. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/Dockerfile +0 -0
  22. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/LICENSE +0 -0
  23. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/__init__.py +0 -0
  24. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/__main__.py +0 -0
  25. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/api.py +0 -0
  26. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/application/__init__.py +0 -0
  27. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/application/wsgi.py +0 -0
  28. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/__init__.py +0 -0
  29. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/admin.py +0 -0
  30. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/card-state.js +0 -0
  31. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/dashboard.css +0 -0
  32. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/default-settings.json +0 -0
  33. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/home-spf-radial.gif +0 -0
  34. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/home-spf-radial.png +0 -0
  35. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/logo.png +0 -0
  36. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/materials-stock.json +0 -0
  37. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/pymiesim-favicon.svg +0 -0
  38. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/pymiesim-logo-dark.svg +0 -0
  39. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/pymiesim-logo.svg +0 -0
  40. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/assets/simulation-sharing.js +0 -0
  41. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/callback_helpers.py +0 -0
  42. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/components/__init__.py +0 -0
  43. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/components/cards.py +0 -0
  44. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/computation.py +0 -0
  45. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/defaults.py +0 -0
  46. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/experiment_service.py +0 -0
  47. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/interface.py +0 -0
  48. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/jobs.py +0 -0
  49. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/layout.py +0 -0
  50. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/material_catalog.py +0 -0
  51. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/models.py +0 -0
  52. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/__init__.py +0 -0
  53. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/citation.py +0 -0
  54. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/documentation.py +0 -0
  55. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/examples.py +0 -0
  56. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/experiment/__init__.py +0 -0
  57. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/experiment/page.py +0 -0
  58. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/experiment/sections/__init__.py +0 -0
  59. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/experiment/sections/configuration.py +0 -0
  60. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/field_syntax.py +0 -0
  61. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/home.py +0 -0
  62. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/install_local.py +0 -0
  63. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/population.py +0 -0
  64. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/sellmeier.py +0 -0
  65. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/settings.py +0 -0
  66. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/single/__init__.py +0 -0
  67. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/single/page.py +0 -0
  68. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/single/sections/__init__.py +0 -0
  69. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/single/sections/representations.py +0 -0
  70. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/pages/single/sections/setup.py +0 -0
  71. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/parsing.py +0 -0
  72. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/plotting.py +0 -0
  73. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/population_service.py +0 -0
  74. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/schemas.py +0 -0
  75. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/seo.py +0 -0
  76. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/services.py +0 -0
  77. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/sharing.py +0 -0
  78. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/single_service.py +0 -0
  79. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/usage_metrics.py +0 -0
  80. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX/gui/validation.py +0 -0
  81. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/SOURCES.txt +0 -0
  82. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/dependency_links.txt +0 -0
  83. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/entry_points.txt +0 -0
  84. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/requires.txt +0 -0
  85. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/scm_file_list.json +0 -0
  86. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/PyMieSimX.egg-info/top_level.txt +0 -0
  87. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/README.rst +0 -0
  88. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/conda.recipe/meta.yaml +0 -0
  89. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/makefile +0 -0
  90. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/pytest.ini +0 -0
  91. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/setup.cfg +0 -0
  92. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/cli.py +0 -0
  93. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_admin.py +0 -0
  94. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_api.py +0 -0
  95. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_dash_callbacks.py +0 -0
  96. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_examples.py +0 -0
  97. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_home.py +0 -0
  98. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_population.py +0 -0
  99. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_seo.py +0 -0
  100. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_services.py +0 -0
  101. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tests/gui/test_usage_metrics.py +0 -0
  102. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tools/generate_home_spf.py +0 -0
  103. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tools/next_release_version.py +0 -0
  104. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tools/release_tag.py +0 -0
  105. {pymiesimx-0.3.0 → pymiesimx-0.4.0}/tools/verify_conda_artifact.py +0 -0
@@ -10,9 +10,9 @@ permissions:
10
10
 
11
11
  jobs:
12
12
  publish:
13
- uses: MartinPdeS/MPSActions/.github/workflows/publish_compiled_package_to_anaconda.yml@v5
13
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_compiled_package_to_anaconda.yml@v6
14
14
  with:
15
- python_versions: '["3.11", "3.12", "3.13"]'
15
+ python_versions: '["3.11", "3.12", "3.13", "3.14"]'
16
16
  os_list: '["ubuntu-latest", "macos-latest", "windows-latest"]'
17
17
  package_name: pymiesimx
18
18
  recipe_path: conda.recipe
@@ -12,11 +12,15 @@ permissions:
12
12
  jobs:
13
13
  tests:
14
14
  runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ python-version: ["3.11", "3.14"]
15
19
  steps:
16
20
  - name: Set up Python and CI dependencies
17
21
  uses: MartinPdeS/MPSActions/actions/setup-python@0f5927acf88b25b5d253421e508387897096a2cc
18
22
  with:
19
- python-version: "3.11"
23
+ python-version: "${{ matrix.python-version }}"
20
24
  install-command: >-
21
25
  python -m pip install --upgrade pip && python -m pip install -e ".[testing]"
22
26
  - run: python -m PyOptik setup --no-progress
@@ -1,10 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyMieSimX
3
- Version: 0.3.0
3
+ Version: 0.4.0
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
7
7
  Project-URL: Repository, https://github.com/MartinPdeS/PyMieSimX
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: 3.14
8
12
  Requires-Python: >=3.11
9
13
  Description-Content-Type: text/x-rst
10
14
  License-File: LICENSE
@@ -199,7 +199,7 @@ def register_callbacks(app: Dash, default_measure_options: list[str]) -> None:
199
199
  route = pathname or "/"
200
200
  try:
201
201
  setup = read_simulation(search, route)
202
- share_message = "Shared setup loaded. This simulation runs automatically." if setup else None
202
+ share_message = None
203
203
  except ValueError as error:
204
204
  setup = None
205
205
  share_message = str(error)
@@ -1,10 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyMieSimX
3
- Version: 0.3.0
3
+ Version: 0.4.0
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
7
7
  Project-URL: Repository, https://github.com/MartinPdeS/PyMieSimX
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: 3.14
8
12
  Requires-Python: >=3.11
9
13
  Description-Content-Type: text/x-rst
10
14
  License-File: LICENSE
@@ -0,0 +1,8 @@
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
+ }
@@ -24,6 +24,13 @@ dependencies = [
24
24
  "psycopg[binary]>=3.2.9,<4",
25
25
  ]
26
26
 
27
+ classifiers = [
28
+ "Programming Language :: Python :: 3.11",
29
+ "Programming Language :: Python :: 3.12",
30
+ "Programming Language :: Python :: 3.13",
31
+ "Programming Language :: Python :: 3.14",
32
+ ]
33
+
27
34
  [project.urls]
28
35
  Repository = "https://github.com/MartinPdeS/PyMieSimX"
29
36
 
@@ -534,8 +534,8 @@ def test_shared_sweep_restores_saved_inputs_and_runs_once(dash_duo, viewport, is
534
534
  }
535
535
  link = _shared_url(dash_duo, "/experiment", controls, {"font_size": 22, "show_grid": False, "template": "plotly_dark"})
536
536
  dash_duo.driver.get(link)
537
- dash_duo.wait_for_element(".simulation-link-notice")
538
537
  WebDriverWait(dash_duo.driver, 30).until(lambda _: dash_duo.find_element("#export-csv").is_enabled())
538
+ assert not dash_duo.driver.find_elements("css selector", ".simulation-link-notice")
539
539
  WebDriverWait(dash_duo.driver, 10).until(lambda driver: "diameter" in dash_duo.find_element("#x-axis-select").text)
540
540
  assert "Qsca" in dash_duo.find_element("#measure-select").text
541
541
  assert "Qext" in dash_duo.find_element("#measure-select").text
@@ -588,8 +588,8 @@ def test_shared_single_setup_runs_once_with_restored_projection_and_remains_edit
588
588
  _shared_field_id("single-scatterer", "material"): "1.47+0.02j",
589
589
  "plot-single-font-size": 21, "plot-single-grid": False}
590
590
  dash_duo.driver.get(_shared_url(dash_duo, "/single", controls, {"font_size": 21, "show_grid": False}))
591
- dash_duo.wait_for_element(".simulation-link-notice")
592
591
  WebDriverWait(dash_duo.driver, 30).until(lambda _: dash_duo.find_element("#export-single-csv").is_enabled())
592
+ assert not dash_duo.driver.find_elements("css selector", ".simulation-link-notice")
593
593
  assert len(runs) == 1
594
594
  assert runs[0]["projection"] == "polar_1d"
595
595
  assert runs[0]["sampling"] == "24"
@@ -635,8 +635,8 @@ def test_shared_population_runs_with_restored_values_and_invalid_link_recovers(d
635
635
  "population-diameter": "210", "population-concentration-basis": "volume",
636
636
  "population-concentration": "0.0023"}
637
637
  dash_duo.driver.get(_shared_url(dash_duo, "/population", controls))
638
- dash_duo.wait_for_element(".simulation-link-notice")
639
638
  dash_duo.wait_for_text_to_equal("#population-status", "Completed. All population properties are shown below.")
639
+ assert not dash_duo.driver.find_elements("css selector", ".simulation-link-notice")
640
640
  copied = read_simulation(urlsplit(_copy_shared_link(dash_duo)).query, "/population")
641
641
  assert copied["controls"].items() >= controls.items()
642
642
  assert dash_duo.find_element("#population-export").is_enabled()
@@ -134,7 +134,7 @@ def test_route_restores_controls_and_arms_run_after_restoration():
134
134
  assert armed["expected_controls"] == sweep_payload()["controls"]
135
135
  assert field_key("source", "wavelength") in armed["field_keys"]
136
136
  assert field_key("scatterer", "diameter") in armed["field_keys"]
137
- assert "runs automatically" in str(page)
137
+ assert not any(getattr(item, "className", None) == "simulation-link-notice" for item in components(page))
138
138
  fields = callback(app, "_render_source_fields")("PlaneWaveSet", search_for(sweep_payload()))
139
139
  wavelength = next(item for item in components(fields) if getattr(item, "id", None) == {"kind": "field", "section": "source", "name": "wavelength"})
140
140
  assert wavelength.value == "600:700:3"
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.3.0",
3
- "distance": 0,
4
- "node": "g84099b9d294c7cf0842206e0549d4505b313965c",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-05"
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
File without changes
File without changes
File without changes