PyFiberModes 0.10.0__tar.gz → 0.12.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 (133) hide show
  1. pyfibermodes-0.12.0/.github/workflows/deploy_PyPi.yml +29 -0
  2. pyfibermodes-0.12.0/.github/workflows/deploy_anaconda.yml +32 -0
  3. pyfibermodes-0.12.0/.github/workflows/deploy_coverage.yml +21 -0
  4. pyfibermodes-0.12.0/.github/workflows/deploy_documentation.yml +19 -0
  5. pyfibermodes-0.12.0/.github/workflows/quality.yml +22 -0
  6. pyfibermodes-0.12.0/.github/workflows/tests.yml +28 -0
  7. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/.gitignore +11 -1
  8. pyfibermodes-0.12.0/.zenodo.json +21 -0
  9. pyfibermodes-0.12.0/CHANGELOG.md +47 -0
  10. pyfibermodes-0.12.0/CITATION.cff +19 -0
  11. pyfibermodes-0.12.0/CONTRIBUTING.md +7 -0
  12. pyfibermodes-0.12.0/MANIFEST.in +4 -0
  13. pyfibermodes-0.12.0/Makefile +50 -0
  14. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PKG-INFO +323 -89
  15. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/__init__.py +6 -0
  16. pyfibermodes-0.12.0/PyFiberModes/_version.py +24 -0
  17. pyfibermodes-0.12.0/PyFiberModes/analysis.py +112 -0
  18. pyfibermodes-0.12.0/PyFiberModes/directories.py +30 -0
  19. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber.py +11 -0
  20. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/field.py +74 -115
  21. pyfibermodes-0.12.0/PyFiberModes/optimization.py +86 -0
  22. pyfibermodes-0.12.0/PyFiberModes/propagation.py +82 -0
  23. pyfibermodes-0.12.0/PyFiberModes/solver/__init__.py +3 -0
  24. pyfibermodes-0.12.0/PyFiberModes/solver/mlsif/__init__.py +1 -0
  25. pyfibermodes-0.12.0/PyFiberModes/solver/ssif/__init__.py +2 -0
  26. pyfibermodes-0.12.0/PyFiberModes/solver/tlsif/__init__.py +1 -0
  27. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes.egg-info/PKG-INFO +323 -89
  28. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes.egg-info/SOURCES.txt +20 -9
  29. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes.egg-info/requires.txt +10 -6
  30. pyfibermodes-0.12.0/README.rst +367 -0
  31. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0/conda.recipe}/meta.yaml +3 -4
  32. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/pyproject.toml +28 -8
  33. pyfibermodes-0.12.0/tests/__init__.py +1 -0
  34. pyfibermodes-0.12.0/tests/helpers.py +13 -0
  35. pyfibermodes-0.12.0/tests/test_advanced_features.py +183 -0
  36. pyfibermodes-0.12.0/tests/test_architecture.py +27 -0
  37. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_field.py +27 -0
  38. pyfibermodes-0.12.0/tests/test_release_tools.py +66 -0
  39. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_ssif.py +1 -1
  40. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_tlsif.py +1 -1
  41. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_validation.py +1 -1
  42. pyfibermodes-0.12.0/tools/check_release.py +91 -0
  43. pyfibermodes-0.12.0/tools/next_release_version.py +55 -0
  44. pyfibermodes-0.12.0/tools/release_tag.py +118 -0
  45. pyfibermodes-0.10.0/.github/workflows/deploy_PyPi.yml +0 -20
  46. pyfibermodes-0.10.0/.github/workflows/deploy_anaconda.yml +0 -21
  47. pyfibermodes-0.10.0/.github/workflows/deploy_coverage.yml +0 -25
  48. pyfibermodes-0.10.0/.github/workflows/deploy_documentation.yml +0 -24
  49. pyfibermodes-0.10.0/.readthedocs.yml +0 -35
  50. pyfibermodes-0.10.0/PyFiberModes/_version.py +0 -34
  51. pyfibermodes-0.10.0/PyFiberModes/directories.py +0 -32
  52. pyfibermodes-0.10.0/PyFiberModes/solver/__init__.py +0 -1
  53. pyfibermodes-0.10.0/PyFiberModes/solver/mlsif/__init__.py +0 -1
  54. pyfibermodes-0.10.0/PyFiberModes/solver/ssif/__init__.py +0 -2
  55. pyfibermodes-0.10.0/PyFiberModes/solver/tlsif/__init__.py +0 -1
  56. pyfibermodes-0.10.0/PyFiberModes/tools/__init__.py +0 -0
  57. pyfibermodes-0.10.0/PyFiberModes/tools/directories.py +0 -41
  58. pyfibermodes-0.10.0/PyFiberModes/tools/utils.py +0 -20
  59. pyfibermodes-0.10.0/README.rst +0 -140
  60. pyfibermodes-0.10.0/perso/test_1.py +0 -65
  61. pyfibermodes-0.10.0/perso/test_2.py +0 -40
  62. pyfibermodes-0.10.0/perso/test_3.py +0 -49
  63. pyfibermodes-0.10.0/tests/__init__.py +0 -0
  64. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/.coveragerc +0 -0
  65. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/.github/dependabot.yml +0 -0
  66. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/LICENSE +0 -0
  67. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/__future__.py +0 -0
  68. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/coordinates.py +0 -0
  69. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/factory.py +0 -0
  70. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/1550BHP.yaml +0 -0
  71. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/DCF13.yaml +0 -0
  72. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/DCF1300S_20.yaml +0 -0
  73. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/DCF1300S_26.yaml +0 -0
  74. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/DCF1300S_33.yaml +0 -0
  75. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/DCF1300S_42.yaml +0 -0
  76. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/F2028M12.yaml +0 -0
  77. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/F2028M21.yaml +0 -0
  78. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/F2028M24.yaml +0 -0
  79. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/F2058G1.yaml +0 -0
  80. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/F2058L1.yaml +0 -0
  81. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/HI1060.yaml +0 -0
  82. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/HP630.yaml +0 -0
  83. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/SM1950.yaml +0 -0
  84. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/SMF28.yaml +0 -0
  85. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/fluorine_doped_1%_capillary.yaml +0 -0
  86. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/fluorine_doped_2%_capillary.yaml +0 -0
  87. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/test_fiber.yaml +0 -0
  88. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fiber_files/test_multimode_fiber.yaml +0 -0
  89. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/fundamentals.py +0 -0
  90. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/loader.py +0 -0
  91. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/mode.py +0 -0
  92. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/mode_instances.py +0 -0
  93. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/solver/base_solver.py +0 -0
  94. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/solver/mlsif/neff.py +0 -0
  95. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/solver/ssif/cutoff.py +0 -0
  96. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/solver/ssif/neff.py +0 -0
  97. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/solver/tlsif/cutoff.py +0 -0
  98. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/source.py +0 -0
  99. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes/stepindex.py +0 -0
  100. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes.egg-info/dependency_links.txt +0 -0
  101. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/PyFiberModes.egg-info/top_level.txt +0 -0
  102. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/Makefile +0 -0
  103. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/DCF/README.rst +0 -0
  104. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/DCF/plot_DCF_fields.py +0 -0
  105. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/README.rst +0 -0
  106. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/SMF28/README.rst +0 -0
  107. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/SMF28/plot_smf28.py +0 -0
  108. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/SMF28/plot_smf28_dispersion_vs_wavelength.py +0 -0
  109. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/SMF28/plot_smf28_group_index_vs_wavelength.py +0 -0
  110. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/README.rst +0 -0
  111. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_U_vs_V.py +0 -0
  112. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_comparison_solvers.py +0 -0
  113. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_dispersion.py +0 -0
  114. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_effective_index.py +0 -0
  115. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_fiber_LP_modes.py +0 -0
  116. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_group_index.py +0 -0
  117. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_mode_field.py +0 -0
  118. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_mode_field_1.py +0 -0
  119. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_mode_field_2.py +0 -0
  120. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/examples/basic/plot_neff_tapered_fiber.py +0 -0
  121. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/make.bat +0 -0
  122. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/_static/default.css +0 -0
  123. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/_static/thumbnail.png +0 -0
  124. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/code.rst +0 -0
  125. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/conf.py +0 -0
  126. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/examples.rst +0 -0
  127. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/docs/source/index.rst +0 -0
  128. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/pytest.ini +0 -0
  129. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/setup.cfg +0 -0
  130. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_api.py +0 -0
  131. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_coordinates.py +0 -0
  132. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_fiber.py +0 -0
  133. {pyfibermodes-0.10.0 → pyfibermodes-0.12.0}/tests/test_file_loading.py +0 -0
@@ -0,0 +1,29 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ validate-release:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
15
+ with:
16
+ fetch-depth: 0
17
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
18
+ with:
19
+ python-version: "3.11"
20
+ - run: python tools/check_release.py --version "${GITHUB_REF_NAME}"
21
+
22
+ publish:
23
+ needs: validate-release
24
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_pure_package_to_PyPi.yml@v5
25
+ with:
26
+ python-version: "3.11"
27
+ test-command: python -c 'import PyFiberModes'
28
+ secrets:
29
+ PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,32 @@
1
+ name: Publish Conda package
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ validate-release:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
15
+ with:
16
+ fetch-depth: 0
17
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
18
+ with:
19
+ python-version: "3.11"
20
+ - run: python tools/check_release.py --version "${GITHUB_REF_NAME}"
21
+
22
+ publish:
23
+ needs: validate-release
24
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_compiled_package_to_anaconda.yml@v5
25
+ with:
26
+ python_versions: '["3.11", "3.12", "3.13"]'
27
+ os_list: '["ubuntu-latest", "macos-latest", "windows-latest"]'
28
+ package_name: pyfibermodes
29
+ recipe_path: conda.recipe
30
+ test_import: PyFiberModes
31
+ secrets:
32
+ ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
@@ -0,0 +1,21 @@
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@v5
16
+ with:
17
+ python-version: "3.11"
18
+ apt-package: xvfb
19
+ coverage-package: PyFiberModes
20
+ secrets:
21
+ _GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,19 @@
1
+ name: Publish documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ tags: ["v*"]
7
+
8
+ permissions:
9
+ contents: write
10
+ pages: write
11
+ id-token: write
12
+
13
+ jobs:
14
+ documentation:
15
+ uses: MartinPdeS/MPSActions/.github/workflows/publish_documentation.yml@v5
16
+ with:
17
+ python-version: "3.11"
18
+ package-name: PyFiberModes
19
+ apt-package: xvfb jq
@@ -0,0 +1,22 @@
1
+ name: Static quality checks
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
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
17
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
18
+ with:
19
+ python-version: "3.11"
20
+ - run: python -m pip install --upgrade pip && python -m pip install -e ".[dev]"
21
+ - run: python -m ruff check PyFiberModes tests tools
22
+ - run: python tools/check_release.py
@@ -0,0 +1,28 @@
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
+ name: Python ${{ matrix.python-version }}
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
20
+ steps:
21
+ - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
22
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ - run: python -m pip install --upgrade pip && python -m pip install -e ".[testing]"
26
+ - run: python -m pytest -q
27
+ env:
28
+ MPLBACKEND: Agg
@@ -12,13 +12,22 @@
12
12
  !.gitignore
13
13
  !.pre-commit-config.yaml
14
14
  !LICENSE
15
- !meta.yaml
15
+ !conda.recipe
16
+ !conda.recipe/meta.yaml
16
17
  !pyproject.toml
17
18
  !README.rst
19
+ !CONTRIBUTING.md
20
+ !/Makefile
21
+ !tools
22
+ !tools/*.py
18
23
  !notebook.ipynb
19
24
  !CMakeLists.txt
20
25
  !pytest.ini
21
26
  !.coveragerc
27
+ !.zenodo.json
28
+ !CITATION.cff
29
+ !CHANGELOG.md
30
+ !MANIFEST.in
22
31
 
23
32
  # But ignore docs/build inside docs and code
24
33
  docs/build/
@@ -29,3 +38,4 @@ docs/source/gallery/
29
38
  *.DS_Store*
30
39
  *.so*
31
40
  *.a*
41
+ !Makefile
@@ -0,0 +1,21 @@
1
+ {
2
+ "title": "PyFiberModes: guided-mode analysis and design for optical fibers",
3
+ "description": "PyFiberModes solves guided modes in circularly symmetric step-index and multilayer optical fibers, including field analysis, modal sweeps, inverse design, and coupled-mode propagation.",
4
+ "creators": [
5
+ {
6
+ "name": "Poinsinet de Sivry-Houle, Martin"
7
+ }
8
+ ],
9
+ "license": "MIT",
10
+ "upload_type": "software",
11
+ "access_right": "open",
12
+ "version": "0.12.0",
13
+ "publication_date": "2026-09-22",
14
+ "keywords": [
15
+ "optical fibers",
16
+ "guided modes",
17
+ "effective index",
18
+ "dispersion",
19
+ "coupled-mode theory"
20
+ ]
21
+ }
@@ -0,0 +1,47 @@
1
+ # Changelog
2
+
3
+ All notable changes to PyFiberModes are documented in this file. The format is
4
+ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and releases
5
+ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.12.0] - 2026-09-22
10
+
11
+ ### Changed
12
+
13
+ - Consolidated filesystem locations in the root `directories` module and removed
14
+ the duplicate internal `tools` package.
15
+ - Moved solver-test helpers out of the distributed package and into the test suite.
16
+
17
+ ## [0.11.0] - 2026-09-22
18
+
19
+ ### Added
20
+
21
+ - Automatic guided-mode discovery and structured parameter sweeps.
22
+ - Constrained inverse design for layer radii, refractive indices, and custom parameters.
23
+ - Mode-overlap, coupling-matrix, and coupled-mode propagation utilities.
24
+ - Vectorized field mapping, Poynting vectors, guided power, and confinement factors.
25
+ - Citation metadata for Citation File Format and Zenodo.
26
+ - Release-metadata consistency checks and expanded behavioral unit tests.
27
+
28
+ ### Changed
29
+
30
+ - Field maps reuse cached radial solutions rather than solving independently at every pixel.
31
+ - Effective-area integration now includes the physical grid-cell area consistently.
32
+
33
+ ### Fixed
34
+
35
+ - Field intensity and normalization now use the current `Fiber.get_effective_index` API.
36
+ - Radial-field caches are cleared when the fiber wavelength changes.
37
+
38
+ ## [0.10.0] - 2026-02-13
39
+
40
+ ### Changed
41
+
42
+ - Established the current tagged baseline for subsequent documented releases.
43
+
44
+ [Unreleased]: https://github.com/MartinPdeS/PyFiberModes/compare/v0.12.0...HEAD
45
+ [0.12.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.12.0
46
+ [0.11.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.11.0
47
+ [0.10.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.10.0
@@ -0,0 +1,19 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use PyFiberModes in your research, please cite this software."
3
+ title: "PyFiberModes"
4
+ type: software
5
+ authors:
6
+ - family-names: "Poinsinet de Sivry-Houle"
7
+ given-names: "Martin"
8
+ abstract: >
9
+ PyFiberModes is a Python package for solving and analysing guided modes in
10
+ circularly symmetric step-index and multilayer optical fibers.
11
+ license: "MIT"
12
+ repository-code: "https://github.com/MartinPdeS/PyFiberModes"
13
+ url: "https://martinpdes.github.io/PyFiberModes/"
14
+ keywords:
15
+ - optical fibers
16
+ - guided modes
17
+ - effective index
18
+ - dispersion
19
+ - coupled-mode theory
@@ -0,0 +1,7 @@
1
+ # Contributing to PyFiberModes
2
+
3
+ Use Python 3.10 or newer. Install development dependencies with `python -m pip install -e ".[testing,documentation]"`, then run `python -m pytest`.
4
+
5
+ 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.
6
+
7
+ The Conda recipe is at `conda.recipe/meta.yaml`. Do not commit generated documentation, virtual environments, build artefacts, or caches.
@@ -0,0 +1,4 @@
1
+ include CITATION.cff
2
+ include CHANGELOG.md
3
+ include .zenodo.json
4
+ include tools/*.py
@@ -0,0 +1,50 @@
1
+ .DEFAULT_GOAL := help
2
+
3
+ PYTHON ?= python3
4
+ TAG_VERSION ?= $(or $(VERSION),$(filter v%,$(MAKECMDGOALS)))
5
+ RELEASE_KIND := $(filter major minor patch,$(MAKECMDGOALS))
6
+
7
+ .PHONY: help test quality check release-check tag release major minor patch
8
+
9
+ help:
10
+ @echo "PyFiberModes development commands"
11
+ @echo ""
12
+ @echo " make test Run the test suite"
13
+ @echo " make quality Run static quality checks"
14
+ @echo " make check Run tests, quality, and release checks"
15
+ @echo " make release-check Check version metadata consistency"
16
+ @echo " make tag VERSION=vX.Y.Z Create a release commit and annotated tag"
17
+ @echo " make release patch Create and push the next patch release"
18
+ @echo " make release minor Create and push the next minor release"
19
+ @echo " make release major Create and push the next major release"
20
+
21
+ ifneq ($(filter tag,$(MAKECMDGOALS)),)
22
+ ifneq ($(strip $(TAG_VERSION)),)
23
+ .PHONY: $(TAG_VERSION)
24
+ $(TAG_VERSION):
25
+ @:
26
+ endif
27
+ endif
28
+
29
+ test:
30
+ MPLBACKEND=Agg $(PYTHON) -m pytest
31
+
32
+ quality:
33
+ $(PYTHON) -m ruff check PyFiberModes tests tools
34
+
35
+ release-check:
36
+ $(PYTHON) tools/check_release.py $(if $(VERSION),--version $(VERSION),)
37
+
38
+ check: quality test release-check
39
+
40
+ tag:
41
+ $(PYTHON) tools/release_tag.py "$(TAG_VERSION)"
42
+
43
+ release:
44
+ @test "$(words $(RELEASE_KIND))" -eq 1 || { echo "usage: make release [patch|minor|major]" >&2; exit 2; }
45
+ @set -eu; release_tag="$$($(PYTHON) tools/next_release_version.py $(RELEASE_KIND))"; \
46
+ $(PYTHON) tools/release_tag.py "$$release_tag"; \
47
+ git push origin HEAD "refs/tags/$$release_tag"
48
+
49
+ major minor patch:
50
+ @: