PyFiberModes 1.0.0__tar.gz → 1.0.1__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 (178) hide show
  1. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/.zenodo.json +2 -2
  2. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/CHANGELOG.md +4 -1
  3. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PKG-INFO +6 -3
  4. pyfibermodes-1.0.1/PyFiberModes/_version.py +5 -0
  5. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes.egg-info/PKG-INFO +6 -3
  6. pyfibermodes-1.0.1/PyFiberModes.egg-info/SOURCES.txt +83 -0
  7. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes.egg-info/requires.txt +5 -1
  8. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/README.rst +1 -1
  9. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/pyproject.toml +13 -8
  10. pyfibermodes-1.0.1/tests/test_release_tools.py +32 -0
  11. pyfibermodes-1.0.0/.coveragerc +0 -22
  12. pyfibermodes-1.0.0/.github/dependabot.yml +0 -10
  13. pyfibermodes-1.0.0/.github/workflows/deploy_coverage.yml +0 -21
  14. pyfibermodes-1.0.0/.github/workflows/deploy_documentation.yml +0 -20
  15. pyfibermodes-1.0.0/.github/workflows/deploy_release.yml +0 -35
  16. pyfibermodes-1.0.0/.github/workflows/quality.yml +0 -21
  17. pyfibermodes-1.0.0/.github/workflows/tests.yml +0 -19
  18. pyfibermodes-1.0.0/.gitignore +0 -44
  19. pyfibermodes-1.0.0/CONTRIBUTING.md +0 -9
  20. pyfibermodes-1.0.0/Makefile +0 -61
  21. pyfibermodes-1.0.0/PyFiberModes/_version.py +0 -34
  22. pyfibermodes-1.0.0/PyFiberModes.egg-info/SOURCES.txt +0 -173
  23. pyfibermodes-1.0.0/benchmarks/README.md +0 -11
  24. pyfibermodes-1.0.0/benchmarks/test_field_performance.py +0 -33
  25. pyfibermodes-1.0.0/conda.recipe/meta.yaml +0 -66
  26. pyfibermodes-1.0.0/docs/Makefile +0 -19
  27. pyfibermodes-1.0.0/docs/examples/README.rst +0 -8
  28. pyfibermodes-1.0.0/docs/examples/SMF28/README.rst +0 -6
  29. pyfibermodes-1.0.0/docs/examples/SMF28/plot_smf28.py +0 -27
  30. pyfibermodes-1.0.0/docs/examples/SMF28/plot_smf28_dispersion_vs_wavelength.py +0 -40
  31. pyfibermodes-1.0.0/docs/examples/SMF28/plot_smf28_group_index_vs_wavelength.py +0 -40
  32. pyfibermodes-1.0.0/docs/examples/analysis/README.rst +0 -6
  33. pyfibermodes-1.0.0/docs/examples/analysis/plot_coupled_mode_exchange.py +0 -23
  34. pyfibermodes-1.0.0/docs/examples/analysis/plot_guided_mode_discovery.py +0 -23
  35. pyfibermodes-1.0.0/docs/examples/analysis/plot_structured_wavelength_sweep.py +0 -28
  36. pyfibermodes-1.0.0/docs/examples/basic/README.rst +0 -6
  37. pyfibermodes-1.0.0/docs/examples/basic/plot_U_vs_V.py +0 -49
  38. pyfibermodes-1.0.0/docs/examples/basic/plot_comparison_solvers.py +0 -55
  39. pyfibermodes-1.0.0/docs/examples/basic/plot_dispersion.py +0 -51
  40. pyfibermodes-1.0.0/docs/examples/basic/plot_effective_index.py +0 -46
  41. pyfibermodes-1.0.0/docs/examples/basic/plot_fiber_LP_modes.py +0 -52
  42. pyfibermodes-1.0.0/docs/examples/basic/plot_group_index.py +0 -51
  43. pyfibermodes-1.0.0/docs/examples/basic/plot_mode_field.py +0 -48
  44. pyfibermodes-1.0.0/docs/examples/basic/plot_mode_field_1.py +0 -38
  45. pyfibermodes-1.0.0/docs/examples/basic/plot_mode_field_2.py +0 -50
  46. pyfibermodes-1.0.0/docs/examples/basic/plot_neff_tapered_fiber.py +0 -68
  47. pyfibermodes-1.0.0/docs/examples/benchmarks/README.rst +0 -7
  48. pyfibermodes-1.0.0/docs/examples/benchmarks/plot_component_batching_speedup.py +0 -34
  49. pyfibermodes-1.0.0/docs/examples/benchmarks/plot_field_grid_scaling.py +0 -29
  50. pyfibermodes-1.0.0/docs/examples/benchmarks/plot_modal_cache_speedup.py +0 -29
  51. pyfibermodes-1.0.0/docs/examples/fields/README.rst +0 -7
  52. pyfibermodes-1.0.0/docs/examples/fields/plot_confinement_by_radius.py +0 -29
  53. pyfibermodes-1.0.0/docs/examples/fields/plot_polarization_rotation.py +0 -28
  54. pyfibermodes-1.0.0/docs/examples/fields/plot_vector_components.py +0 -25
  55. pyfibermodes-1.0.0/docs/examples/specialty_fibers/README.rst +0 -7
  56. pyfibermodes-1.0.0/docs/examples/specialty_fibers/plot_refractive_index_profile.py +0 -27
  57. pyfibermodes-1.0.0/docs/examples/specialty_fibers/plot_specialty_fiber_catalog.py +0 -34
  58. pyfibermodes-1.0.0/docs/examples/specialty_fibers/plot_specialty_mode_indices.py +0 -26
  59. pyfibermodes-1.0.0/docs/examples/validation/README.rst +0 -7
  60. pyfibermodes-1.0.0/docs/examples/validation/plot_effective_index_bounds.py +0 -26
  61. pyfibermodes-1.0.0/docs/examples/validation/plot_field_area_convergence.py +0 -27
  62. pyfibermodes-1.0.0/docs/examples/validation/plot_normalized_effective_index.py +0 -32
  63. pyfibermodes-1.0.0/docs/make.bat +0 -35
  64. pyfibermodes-1.0.0/docs/redirect.html +0 -12
  65. pyfibermodes-1.0.0/docs/source/_static/default.css +0 -43
  66. pyfibermodes-1.0.0/docs/source/_static/favicon.png +0 -0
  67. pyfibermodes-1.0.0/docs/source/_static/logo.png +0 -0
  68. pyfibermodes-1.0.0/docs/source/_static/thumbnail.png +0 -0
  69. pyfibermodes-1.0.0/docs/source/api_policy.rst +0 -64
  70. pyfibermodes-1.0.0/docs/source/architecture.rst +0 -42
  71. pyfibermodes-1.0.0/docs/source/code/analysis.rst +0 -38
  72. pyfibermodes-1.0.0/docs/source/code/fibers.rst +0 -15
  73. pyfibermodes-1.0.0/docs/source/code/fields.rst +0 -11
  74. pyfibermodes-1.0.0/docs/source/code/fundamentals.rst +0 -22
  75. pyfibermodes-1.0.0/docs/source/code.rst +0 -45
  76. pyfibermodes-1.0.0/docs/source/conf.py +0 -41
  77. pyfibermodes-1.0.0/docs/source/examples.rst +0 -73
  78. pyfibermodes-1.0.0/docs/source/getting_started.rst +0 -73
  79. pyfibermodes-1.0.0/docs/source/guide.rst +0 -37
  80. pyfibermodes-1.0.0/docs/source/index.rst +0 -50
  81. pyfibermodes-1.0.0/docs/source/migration_guide.rst +0 -121
  82. pyfibermodes-1.0.0/docs/source/performance.rst +0 -20
  83. pyfibermodes-1.0.0/docs/source/public_api_contract.rst +0 -174
  84. pyfibermodes-1.0.0/docs/source/references.rst +0 -12
  85. pyfibermodes-1.0.0/docs/source/resources.rst +0 -62
  86. pyfibermodes-1.0.0/docs/source/theory.rst +0 -64
  87. pyfibermodes-1.0.0/docs/source/troubleshooting.rst +0 -33
  88. pyfibermodes-1.0.0/docs/source/user_guide/fibers.rst +0 -83
  89. pyfibermodes-1.0.0/docs/source/user_guide/fields.rst +0 -77
  90. pyfibermodes-1.0.0/docs/source/user_guide/index.rst +0 -24
  91. pyfibermodes-1.0.0/docs/source/user_guide/modes.rst +0 -76
  92. pyfibermodes-1.0.0/docs/source/user_guide/reproducibility.rst +0 -53
  93. pyfibermodes-1.0.0/docs/source/user_guide/sweeps.rst +0 -109
  94. pyfibermodes-1.0.0/docs/source/user_guide/units.rst +0 -59
  95. pyfibermodes-1.0.0/docs/source/workflows.rst +0 -35
  96. pyfibermodes-1.0.0/pytest.ini +0 -21
  97. pyfibermodes-1.0.0/tests/__init__.py +0 -1
  98. pyfibermodes-1.0.0/tests/api_snapshot.json +0 -72
  99. pyfibermodes-1.0.0/tests/helpers.py +0 -13
  100. pyfibermodes-1.0.0/tests/test_release_tools.py +0 -66
  101. pyfibermodes-1.0.0/tools/check_release.py +0 -88
  102. pyfibermodes-1.0.0/tools/next_release_version.py +0 -55
  103. pyfibermodes-1.0.0/tools/release_tag.py +0 -136
  104. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/CITATION.cff +0 -0
  105. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/LICENSE +0 -0
  106. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/MANIFEST.in +0 -0
  107. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/__init__.py +0 -0
  108. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/_coordinates.py +0 -0
  109. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/_fiber.py +0 -0
  110. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/_field.py +0 -0
  111. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/analysis.py +0 -0
  112. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/coordinates.py +0 -0
  113. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/directories.py +0 -0
  114. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/exceptions.py +0 -0
  115. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/factory.py +0 -0
  116. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber.py +0 -0
  117. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/1550BHP.yaml +0 -0
  118. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/DCF13.yaml +0 -0
  119. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/DCF1300S_20.yaml +0 -0
  120. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/DCF1300S_26.yaml +0 -0
  121. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/DCF1300S_33.yaml +0 -0
  122. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/DCF1300S_42.yaml +0 -0
  123. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/F2028M12.yaml +0 -0
  124. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/F2028M21.yaml +0 -0
  125. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/F2028M24.yaml +0 -0
  126. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/F2058G1.yaml +0 -0
  127. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/F2058L1.yaml +0 -0
  128. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/HI1060.yaml +0 -0
  129. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/HP630.yaml +0 -0
  130. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/SM1950.yaml +0 -0
  131. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/SMF28.yaml +0 -0
  132. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/fluorine_doped_1%_capillary.yaml +0 -0
  133. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/fluorine_doped_2%_capillary.yaml +0 -0
  134. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/test_fiber.yaml +0 -0
  135. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fiber_files/test_multimode_fiber.yaml +0 -0
  136. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/field.py +0 -0
  137. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/fundamentals.py +0 -0
  138. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/loader.py +0 -0
  139. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/materials.py +0 -0
  140. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/mode.py +0 -0
  141. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/mode_instances.py +0 -0
  142. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/models.py +0 -0
  143. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/optimization.py +0 -0
  144. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/plotting.py +0 -0
  145. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/propagation.py +0 -0
  146. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/services.py +0 -0
  147. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/__init__.py +0 -0
  148. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/base_solver.py +0 -0
  149. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/multilayer/__init__.py +0 -0
  150. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/multilayer/effective_index.py +0 -0
  151. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/protocols.py +0 -0
  152. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/results.py +0 -0
  153. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/three_layer/__init__.py +0 -0
  154. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/three_layer/cutoff.py +0 -0
  155. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/two_layer/__init__.py +0 -0
  156. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/two_layer/cutoff.py +0 -0
  157. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/solver/two_layer/effective_index.py +0 -0
  158. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/source.py +0 -0
  159. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/stepindex.py +0 -0
  160. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes/units.py +0 -0
  161. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes.egg-info/dependency_links.txt +0 -0
  162. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/PyFiberModes.egg-info/top_level.txt +0 -0
  163. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/setup.cfg +0 -0
  164. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_advanced_features.py +0 -0
  165. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_api.py +0 -0
  166. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_architecture.py +0 -0
  167. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_architecture_enhancements.py +0 -0
  168. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_coordinates.py +0 -0
  169. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_docstrings.py +0 -0
  170. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_fiber.py +0 -0
  171. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_field.py +0 -0
  172. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_file_loading.py +0 -0
  173. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_physics_regression.py +0 -0
  174. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_public_api.py +0 -0
  175. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_three_layer_solver.py +0 -0
  176. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_two_layer_solver.py +0 -0
  177. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_units.py +0 -0
  178. {pyfibermodes-1.0.0 → pyfibermodes-1.0.1}/tests/test_validation.py +0 -0
@@ -9,8 +9,8 @@
9
9
  "license": "MIT",
10
10
  "upload_type": "software",
11
11
  "access_right": "open",
12
- "version": "1.0.0",
13
- "publication_date": "2026-10-23",
12
+ "version": "1.0.1",
13
+ "publication_date": "2026-10-27",
14
14
  "keywords": [
15
15
  "optical fibers",
16
16
  "guided modes",
@@ -6,6 +6,8 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.0.1] - 2026-10-27
10
+
9
11
  ## [1.0.0] - 2026-10-23
10
12
 
11
13
  - Require TypedUnit/Pint quantities for physical inputs and return unit-bearing fiber, field, sweep, material, design and propagation results. Numerical solvers continue to operate in SI internally.
@@ -179,7 +181,8 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
179
181
 
180
182
  - Established the current tagged baseline for subsequent documented releases.
181
183
 
182
- [Unreleased]: https://github.com/MartinPdeS/PyFiberModes/compare/v1.0.0...HEAD
184
+ [Unreleased]: https://github.com/MartinPdeS/PyFiberModes/compare/v1.0.1...HEAD
185
+ [1.0.1]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v1.0.1
183
186
  [1.0.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v1.0.0
184
187
  [0.17.7]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.17.7
185
188
  [0.17.6]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.17.6
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyFiberModes
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Guided-mode analysis and design for circular optical fibers.
5
5
  Author-email: Martin Poinsinet de Sivry-Houle <martin.poinsinet.de.sivry@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -704,7 +704,10 @@ Requires-Dist: pint<0.26,>=0.24
704
704
  Requires-Dist: pyyaml
705
705
  Requires-Dist: numpy
706
706
  Requires-Dist: scipy
707
+ Provides-Extra: release
708
+ Requires-Dist: martinpdes-maintenance==0.2.2; extra == "release"
707
709
  Provides-Extra: testing
710
+ Requires-Dist: martinpdes-maintenance==0.2.2; extra == "testing"
708
711
  Requires-Dist: pytest<10.0,>=7.4; extra == "testing"
709
712
  Requires-Dist: pytest-cov<8,>=2; extra == "testing"
710
713
  Requires-Dist: pytest-json-report~=1.5; extra == "testing"
@@ -717,7 +720,7 @@ Requires-Dist: matplotlib>=3.8; extra == "plotting"
717
720
  Provides-Extra: benchmarking
718
721
  Requires-Dist: pytest-benchmark<6,>=5; extra == "benchmarking"
719
722
  Provides-Extra: documentation
720
- Requires-Dist: MartinPdeS-docs<0.3,>=0.2.5; extra == "documentation"
723
+ Requires-Dist: MartinPdeS-docs<0.5,>=0.4.0; extra == "documentation"
721
724
  Requires-Dist: matplotlib>=3.8; extra == "documentation"
722
725
  Provides-Extra: dev
723
726
  Requires-Dist: ruff<1,>=0.8; extra == "dev"
@@ -1069,7 +1072,7 @@ Releases and changelog
1069
1072
 
1070
1073
  User-visible changes are recorded in
1071
1074
  `CHANGELOG.md <https://github.com/MartinPdeS/PyFiberModes/blob/master/CHANGELOG.md>`_.
1072
- Release helpers keep the Python package, Conda recipe, generated version,
1075
+ Release helpers keep the Python package, Conda recipe, checked-in version,
1073
1076
  Zenodo metadata, changelog, and annotated Git tag synchronized.
1074
1077
 
1075
1078
  .. code-block:: bash
@@ -0,0 +1,5 @@
1
+ """Release version maintained by martinpdes-maintenance."""
2
+
3
+ __version__ = version = "1.0.1"
4
+ __version_tuple__ = version_tuple = tuple(int(part) for part in version.split("."))
5
+ __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyFiberModes
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Guided-mode analysis and design for circular optical fibers.
5
5
  Author-email: Martin Poinsinet de Sivry-Houle <martin.poinsinet.de.sivry@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -704,7 +704,10 @@ Requires-Dist: pint<0.26,>=0.24
704
704
  Requires-Dist: pyyaml
705
705
  Requires-Dist: numpy
706
706
  Requires-Dist: scipy
707
+ Provides-Extra: release
708
+ Requires-Dist: martinpdes-maintenance==0.2.2; extra == "release"
707
709
  Provides-Extra: testing
710
+ Requires-Dist: martinpdes-maintenance==0.2.2; extra == "testing"
708
711
  Requires-Dist: pytest<10.0,>=7.4; extra == "testing"
709
712
  Requires-Dist: pytest-cov<8,>=2; extra == "testing"
710
713
  Requires-Dist: pytest-json-report~=1.5; extra == "testing"
@@ -717,7 +720,7 @@ Requires-Dist: matplotlib>=3.8; extra == "plotting"
717
720
  Provides-Extra: benchmarking
718
721
  Requires-Dist: pytest-benchmark<6,>=5; extra == "benchmarking"
719
722
  Provides-Extra: documentation
720
- Requires-Dist: MartinPdeS-docs<0.3,>=0.2.5; extra == "documentation"
723
+ Requires-Dist: MartinPdeS-docs<0.5,>=0.4.0; extra == "documentation"
721
724
  Requires-Dist: matplotlib>=3.8; extra == "documentation"
722
725
  Provides-Extra: dev
723
726
  Requires-Dist: ruff<1,>=0.8; extra == "dev"
@@ -1069,7 +1072,7 @@ Releases and changelog
1069
1072
 
1070
1073
  User-visible changes are recorded in
1071
1074
  `CHANGELOG.md <https://github.com/MartinPdeS/PyFiberModes/blob/master/CHANGELOG.md>`_.
1072
- Release helpers keep the Python package, Conda recipe, generated version,
1075
+ Release helpers keep the Python package, Conda recipe, checked-in version,
1073
1076
  Zenodo metadata, changelog, and annotated Git tag synchronized.
1074
1077
 
1075
1078
  .. code-block:: bash
@@ -0,0 +1,83 @@
1
+ .zenodo.json
2
+ CHANGELOG.md
3
+ CITATION.cff
4
+ LICENSE
5
+ MANIFEST.in
6
+ README.rst
7
+ pyproject.toml
8
+ PyFiberModes/__init__.py
9
+ PyFiberModes/_coordinates.py
10
+ PyFiberModes/_fiber.py
11
+ PyFiberModes/_field.py
12
+ PyFiberModes/_version.py
13
+ PyFiberModes/analysis.py
14
+ PyFiberModes/coordinates.py
15
+ PyFiberModes/directories.py
16
+ PyFiberModes/exceptions.py
17
+ PyFiberModes/factory.py
18
+ PyFiberModes/fiber.py
19
+ PyFiberModes/field.py
20
+ PyFiberModes/fundamentals.py
21
+ PyFiberModes/loader.py
22
+ PyFiberModes/materials.py
23
+ PyFiberModes/mode.py
24
+ PyFiberModes/mode_instances.py
25
+ PyFiberModes/models.py
26
+ PyFiberModes/optimization.py
27
+ PyFiberModes/plotting.py
28
+ PyFiberModes/propagation.py
29
+ PyFiberModes/services.py
30
+ PyFiberModes/source.py
31
+ PyFiberModes/stepindex.py
32
+ PyFiberModes/units.py
33
+ PyFiberModes.egg-info/PKG-INFO
34
+ PyFiberModes.egg-info/SOURCES.txt
35
+ PyFiberModes.egg-info/dependency_links.txt
36
+ PyFiberModes.egg-info/requires.txt
37
+ PyFiberModes.egg-info/top_level.txt
38
+ PyFiberModes/fiber_files/1550BHP.yaml
39
+ PyFiberModes/fiber_files/DCF13.yaml
40
+ PyFiberModes/fiber_files/DCF1300S_20.yaml
41
+ PyFiberModes/fiber_files/DCF1300S_26.yaml
42
+ PyFiberModes/fiber_files/DCF1300S_33.yaml
43
+ PyFiberModes/fiber_files/DCF1300S_42.yaml
44
+ PyFiberModes/fiber_files/F2028M12.yaml
45
+ PyFiberModes/fiber_files/F2028M21.yaml
46
+ PyFiberModes/fiber_files/F2028M24.yaml
47
+ PyFiberModes/fiber_files/F2058G1.yaml
48
+ PyFiberModes/fiber_files/F2058L1.yaml
49
+ PyFiberModes/fiber_files/HI1060.yaml
50
+ PyFiberModes/fiber_files/HP630.yaml
51
+ PyFiberModes/fiber_files/SM1950.yaml
52
+ PyFiberModes/fiber_files/SMF28.yaml
53
+ PyFiberModes/fiber_files/fluorine_doped_1%_capillary.yaml
54
+ PyFiberModes/fiber_files/fluorine_doped_2%_capillary.yaml
55
+ PyFiberModes/fiber_files/test_fiber.yaml
56
+ PyFiberModes/fiber_files/test_multimode_fiber.yaml
57
+ PyFiberModes/solver/__init__.py
58
+ PyFiberModes/solver/base_solver.py
59
+ PyFiberModes/solver/protocols.py
60
+ PyFiberModes/solver/results.py
61
+ PyFiberModes/solver/multilayer/__init__.py
62
+ PyFiberModes/solver/multilayer/effective_index.py
63
+ PyFiberModes/solver/three_layer/__init__.py
64
+ PyFiberModes/solver/three_layer/cutoff.py
65
+ PyFiberModes/solver/two_layer/__init__.py
66
+ PyFiberModes/solver/two_layer/cutoff.py
67
+ PyFiberModes/solver/two_layer/effective_index.py
68
+ tests/test_advanced_features.py
69
+ tests/test_api.py
70
+ tests/test_architecture.py
71
+ tests/test_architecture_enhancements.py
72
+ tests/test_coordinates.py
73
+ tests/test_docstrings.py
74
+ tests/test_fiber.py
75
+ tests/test_field.py
76
+ tests/test_file_loading.py
77
+ tests/test_physics_regression.py
78
+ tests/test_public_api.py
79
+ tests/test_release_tools.py
80
+ tests/test_three_layer_solver.py
81
+ tests/test_two_layer_solver.py
82
+ tests/test_units.py
83
+ tests/test_validation.py
@@ -13,13 +13,17 @@ ruff<1,>=0.8
13
13
  mypy<3,>=1.15
14
14
 
15
15
  [documentation]
16
- MartinPdeS-docs<0.3,>=0.2.5
16
+ MartinPdeS-docs<0.5,>=0.4.0
17
17
  matplotlib>=3.8
18
18
 
19
19
  [plotting]
20
20
  matplotlib>=3.8
21
21
 
22
+ [release]
23
+ martinpdes-maintenance==0.2.2
24
+
22
25
  [testing]
26
+ martinpdes-maintenance==0.2.2
23
27
  pytest<10.0,>=7.4
24
28
  pytest-cov<8,>=2
25
29
  pytest-json-report~=1.5
@@ -343,7 +343,7 @@ Releases and changelog
343
343
 
344
344
  User-visible changes are recorded in
345
345
  `CHANGELOG.md <https://github.com/MartinPdeS/PyFiberModes/blob/master/CHANGELOG.md>`_.
346
- Release helpers keep the Python package, Conda recipe, generated version,
346
+ Release helpers keep the Python package, Conda recipe, checked-in version,
347
347
  Zenodo metadata, changelog, and annotated Git tag synchronized.
348
348
 
349
349
  .. code-block:: bash
@@ -1,10 +1,10 @@
1
1
  [build-system]
2
- requires = ["setuptools>=40.8.0", "wheel", "setuptools_scm[toml]>=8.0"]
2
+ requires = ["setuptools>=40.8.0", "wheel"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "PyFiberModes"
7
- version = "1.0.0"
7
+ version = "1.0.1"
8
8
  description = "Guided-mode analysis and design for circular optical fibers."
9
9
  license = {file = "LICENSE"}
10
10
  readme = "README.rst"
@@ -55,12 +55,9 @@ packages = {find = {where = ["."], include = ["PyFiberModes*"]}}
55
55
  include-package-data = true
56
56
 
57
57
 
58
- [tool.setuptools_scm]
59
- version_scheme = "only-version"
60
- local_scheme = "no-local-version"
61
-
62
58
  [project.optional-dependencies]
63
- testing = [
59
+ release = ["martinpdes-maintenance==0.2.2"]
60
+ testing = ["martinpdes-maintenance==0.2.2",
64
61
  "pytest >=7.4,<10.0",
65
62
  "pytest-cov >=2,<8",
66
63
  "pytest-json-report ~=1.5",
@@ -80,7 +77,7 @@ benchmarking = [
80
77
 
81
78
 
82
79
  documentation = [
83
- "MartinPdeS-docs>=0.2.5,<0.3",
80
+ "MartinPdeS-docs>=0.4.0,<0.5",
84
81
  "matplotlib>=3.8",
85
82
  ]
86
83
 
@@ -111,3 +108,11 @@ files = [
111
108
  # Include runtime resources when building wheels from a source archive without Git.
112
109
  [tool.setuptools.package-data]
113
110
  PyFiberModes = ["fiber_files/*.yaml"]
111
+
112
+ [tool.mps-maintenance]
113
+ version-file = "PyFiberModes/_version.py"
114
+ version-method = "literal"
115
+ conda-recipe = "conda.recipe/meta.yaml"
116
+ zenodo = ".zenodo.json"
117
+ changelog = "CHANGELOG.md"
118
+ repository = "MartinPdeS/PyFiberModes"
@@ -0,0 +1,32 @@
1
+ import json
2
+ from pathlib import Path
3
+
4
+ from martinpdes_maintenance import cli
5
+ import yaml
6
+
7
+
8
+ ROOT = Path(__file__).resolve().parents[1]
9
+
10
+
11
+ def test_release_metadata_is_synchronized_and_changelog_has_current_version():
12
+ assert cli.main(["--root", str(ROOT), "check"]) == 0
13
+
14
+
15
+ def test_citation_and_zenodo_metadata_agree():
16
+ citation = yaml.safe_load((ROOT / "CITATION.cff").read_text(encoding="utf-8"))
17
+ zenodo = json.loads((ROOT / ".zenodo.json").read_text(encoding="utf-8"))
18
+ assert citation["title"] == "PyFiberModes"
19
+ assert citation["license"] == zenodo["license"] == "MIT"
20
+ assert citation["repository-code"] == "https://github.com/MartinPdeS/PyFiberModes"
21
+ assert citation["authors"][0]["family-names"] in zenodo["creators"][0]["name"]
22
+
23
+
24
+ def test_release_changelog_rolls_unreleased_entries_forward():
25
+ text = (
26
+ "# Changelog\n\n## [Unreleased]\n\n### Added\n\n- Feature.\n\n"
27
+ "[Unreleased]: https://example.test/compare/v1.0.0...HEAD\n"
28
+ )
29
+ updated = cli.update_changelog(text, "1.1.0", "2026-10-25", "MartinPdeS/PyFiberModes")
30
+ assert "## [Unreleased]\n\n## [1.1.0]" in updated
31
+ assert "compare/v1.1.0...HEAD" in updated
32
+ assert "[1.1.0]:" in updated
@@ -1,22 +0,0 @@
1
- # .coveragerc
2
- [run]
3
- source = PyFiberModes
4
- branch = True
5
- relative_files = True
6
- parallel = True
7
- omit =
8
- **/__init__.py
9
- PyFiberModes/_version.py
10
- PyFiberModes/directories.py
11
- PyFiberModes/**/__main__.py
12
-
13
- [report]
14
- skip_covered = True
15
- show_missing = True
16
- precision = 2
17
-
18
- [html]
19
- directory = htmlcov
20
-
21
- [xml]
22
- output = coverage.xml
@@ -1,10 +0,0 @@
1
- # Specify reviewers for pull requests
2
-
3
- version: 2
4
- updates:
5
- - package-ecosystem: "pip"
6
- directory: "/"
7
- target-branch: "master"
8
- schedule:
9
- interval: "quarterly"
10
- time: "09:00"
@@ -1,21 +0,0 @@
1
- name: Publish coverage
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- pull_request:
7
- branches: [master]
8
-
9
- permissions:
10
- contents: write
11
- pull-requests: write
12
-
13
- jobs:
14
- coverage:
15
- uses: MartinPdeS/MPSActions/.github/workflows/publish_coverage.yml@v2
16
- with:
17
- python-version: "3.11"
18
- apt-package: xvfb
19
- coverage-package: PyFiberModes
20
- secrets:
21
- _GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,20 +0,0 @@
1
- name: Publish documentation
2
- 'on':
3
- push:
4
- branches:
5
- - master
6
- pull_request:
7
- branches:
8
- - master
9
- permissions:
10
- contents: read
11
- jobs:
12
- documentation:
13
- permissions:
14
- contents: read
15
- uses: MartinPdeS/MPSActions/.github/workflows/build_documentation.yml@v2
16
- with:
17
- python-version: '3.11'
18
- package-name: PyFiberModes
19
- apt-package: xvfb jq
20
- debug: true
@@ -1,35 +0,0 @@
1
- name: Publish release
2
-
3
- on:
4
- push:
5
- tags: ["v*"]
6
-
7
- permissions:
8
- contents: read
9
-
10
- jobs:
11
- release:
12
- permissions:
13
- contents: write
14
- pages: write
15
- id-token: write
16
- uses: MartinPdeS/MPSActions/.github/workflows/publish_release.yml@v2
17
- with:
18
- documentation: true
19
- documentation_package_name: PyFiberModes
20
- documentation_python_version: "3.11"
21
- documentation_apt_package: xvfb jq
22
- documentation_retain_versions: 5
23
- debug: true
24
- pypi_package_type: pure
25
- pypi_python_version: "3.11"
26
- pypi_test_command: 'python -c "import PyFiberModes"'
27
- release_validation_command: 'python tools/check_release.py --version "${GITHUB_REF_NAME}"'
28
- conda_python_versions: '["3.14"]'
29
- conda_os_list: '["ubuntu-latest"]'
30
- conda_package_name: pyfibermodes
31
- conda_recipe_path: conda.recipe
32
- conda_test_import: PyFiberModes
33
- secrets:
34
- PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
35
- ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
@@ -1,21 +0,0 @@
1
- name: Quality
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- pull_request:
7
- branches: [master]
8
-
9
- permissions:
10
- contents: read
11
-
12
- jobs:
13
- quality:
14
- uses: MartinPdeS/MPSActions/.github/workflows/run_quality.yml@v2
15
- with:
16
- install-command: >-
17
- python -m pip install --upgrade pip && python -m pip install -e ".[dev]"
18
- quality-command: |
19
- python -m ruff check PyFiberModes tests tools
20
- python -m mypy
21
- python tools/check_release.py
@@ -1,19 +0,0 @@
1
- name: Tests
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- pull_request:
7
- branches: [master]
8
-
9
- permissions:
10
- contents: read
11
-
12
- jobs:
13
- tests:
14
- uses: MartinPdeS/MPSActions/.github/workflows/run_tests.yml@v2
15
- with:
16
- python-versions: '["3.11", "3.12", "3.13", "3.14"]'
17
- install-command: >-
18
- python -m pip install --upgrade pip && python -m pip install -e ".[testing]"
19
- test-command: python -m pytest -q
@@ -1,44 +0,0 @@
1
-
2
- # Ignore all
3
- /*
4
-
5
- # Except ...
6
- !.github
7
- !PyFiberModes
8
- !development
9
- !docs
10
- !tests
11
- !benchmarks/
12
- !benchmarks/**
13
- !.flake8
14
- !.gitignore
15
- !.pre-commit-config.yaml
16
- !LICENSE
17
- !conda.recipe
18
- !conda.recipe/meta.yaml
19
- !pyproject.toml
20
- !README.rst
21
- !CONTRIBUTING.md
22
- !/Makefile
23
- !tools
24
- !tools/*.py
25
- !notebook.ipynb
26
- !CMakeLists.txt
27
- !pytest.ini
28
- !.coveragerc
29
- !.zenodo.json
30
- !CITATION.cff
31
- !CHANGELOG.md
32
- !MANIFEST.in
33
-
34
- # But ignore docs/build inside docs and code
35
- docs/build/
36
- docs/source/gallery/
37
- docs/source/sg_execution_times.rst
38
-
39
- # Compiled files in the project
40
- *__pycache__*
41
- *.DS_Store*
42
- *.so*
43
- *.a*
44
- !Makefile
@@ -1,9 +0,0 @@
1
- # Contributing to PyFiberModes
2
-
3
- Use Python 3.11 or newer. Install development dependencies with `python -m pip install -e ".[testing,documentation]"`, then run `python -m pytest`.
4
-
5
- Build the documentation with `make docs`. The configuration and layout come from the published `MartinPdeS-docs` package. Run `make docs-install` first if documentation dependencies are missing; use `make docs PYTHON=/path/to/python` to select an environment. Gallery examples execute during the build.
6
-
7
- Releases use semantic version tags. Run `make patch`, `make minor`, or `make major` from a clean `master` checkout; the command creates the release commit, tags it, and pushes both. Publishing workflows run only for `v*` tags.
8
-
9
- The Conda recipe is at `conda.recipe/meta.yaml`. Do not commit generated documentation, virtual environments, build artefacts, or caches.
@@ -1,61 +0,0 @@
1
- .DEFAULT_GOAL := help
2
-
3
- PYTHON ?= python3
4
- SPHINXOPTS ?=
5
- DOCS_BUILD_DIR ?= docs/build
6
- TAG_VERSION ?= $(or $(VERSION),$(filter v%,$(MAKECMDGOALS)))
7
- RELEASE_KIND := $(filter major minor patch,$(MAKECMDGOALS))
8
-
9
- .PHONY: help docs docs-install test quality check release-check tag release major minor patch
10
-
11
- help:
12
- @echo "PyFiberModes development commands"
13
- @echo ""
14
- @echo " make docs Build documentation and execute gallery examples"
15
- @echo " make docs-install Install the documentation dependencies"
16
- @echo " make test Run the test suite"
17
- @echo " make quality Run static quality checks"
18
- @echo " make check Run tests, quality, and release checks"
19
- @echo " make release-check Check version metadata consistency"
20
- @echo " make tag VERSION=vX.Y.Z Create a release commit and annotated tag"
21
- @echo " make release patch Create and push the next patch release"
22
- @echo " make release minor Create and push the next minor release"
23
- @echo " make release major Create and push the next major release"
24
-
25
- ifneq ($(filter tag,$(MAKECMDGOALS)),)
26
- ifneq ($(strip $(TAG_VERSION)),)
27
- .PHONY: $(TAG_VERSION)
28
- $(TAG_VERSION):
29
- @:
30
- endif
31
- endif
32
-
33
- docs-install:
34
- $(PYTHON) -m pip install -e ".[documentation]"
35
-
36
- docs:
37
- MPLBACKEND=Agg $(PYTHON) -m sphinx -M html docs/source "$(DOCS_BUILD_DIR)" $(SPHINXOPTS)
38
-
39
- test:
40
- MPLBACKEND=Agg $(PYTHON) -m pytest
41
-
42
- quality:
43
- $(PYTHON) -m ruff check PyFiberModes tests tools
44
- $(PYTHON) -m mypy
45
-
46
- release-check:
47
- $(PYTHON) tools/check_release.py $(if $(VERSION),--version $(VERSION),)
48
-
49
- check: quality test release-check
50
-
51
- tag:
52
- $(PYTHON) tools/release_tag.py "$(TAG_VERSION)"
53
-
54
- release:
55
- @test "$(words $(RELEASE_KIND))" -eq 1 || { echo "usage: make release [patch|minor|major]" >&2; exit 2; }
56
- @set -eu; release_tag="$$($(PYTHON) tools/next_release_version.py $(RELEASE_KIND))"; \
57
- $(PYTHON) tools/release_tag.py "$$release_tag"; \
58
- git push origin HEAD "refs/tags/$$release_tag"
59
-
60
- major minor patch:
61
- @:
@@ -1,34 +0,0 @@
1
- # file generated by setuptools-scm
2
- # don't change, don't track in version control
3
-
4
- __all__ = [
5
- "__version__",
6
- "__version_tuple__",
7
- "version",
8
- "version_tuple",
9
- "__commit_id__",
10
- "commit_id",
11
- ]
12
-
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
- version: str
25
- __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
30
-
31
- __version__ = version = '1.0.0'
32
- __version_tuple__ = version_tuple = (1, 0, 0)
33
-
34
- __commit_id__ = commit_id = None