PyFiberModes 0.13.0__tar.gz → 0.13.2__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.
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/tests.yml +1 -1
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.gitignore +2 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.zenodo.json +6 -3
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/CHANGELOG.md +34 -1
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/CITATION.cff +3 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/CONTRIBUTING.md +1 -1
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PKG-INFO +22 -8
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/__init__.py +11 -2
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/_version.py +2 -2
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/coordinates.py +7 -5
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/directories.py +0 -12
- pyfibermodes-0.13.2/PyFiberModes/exceptions.py +17 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber.py +154 -72
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/field.py +27 -94
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/mode.py +0 -30
- pyfibermodes-0.13.2/PyFiberModes/models.py +63 -0
- pyfibermodes-0.13.2/PyFiberModes/plotting.py +79 -0
- pyfibermodes-0.13.2/PyFiberModes/services.py +162 -0
- pyfibermodes-0.13.2/PyFiberModes/solver/__init__.py +18 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/base_solver.py +88 -8
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/mlsif/neff.py +0 -97
- pyfibermodes-0.13.2/PyFiberModes/solver/protocols.py +32 -0
- pyfibermodes-0.13.2/PyFiberModes/solver/results.py +56 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/stepindex.py +23 -9
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes.egg-info/PKG-INFO +22 -8
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes.egg-info/SOURCES.txt +11 -1
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes.egg-info/requires.txt +8 -4
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/README.rst +11 -2
- pyfibermodes-0.13.2/benchmarks/README.md +11 -0
- pyfibermodes-0.13.2/benchmarks/test_field_performance.py +32 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/conda.recipe/meta.yaml +14 -10
- pyfibermodes-0.13.2/docs/source/architecture.rst +37 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/code/analysis.rst +12 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/code/fundamentals.rst +8 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/conf.py +2 -2
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/index.rst +1 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/pyproject.toml +24 -7
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_api.py +2 -2
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_architecture.py +28 -13
- pyfibermodes-0.13.2/tests/test_architecture_enhancements.py +86 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_field.py +21 -10
- pyfibermodes-0.13.2/tests/test_physics_regression.py +41 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tools/check_release.py +1 -4
- pyfibermodes-0.13.0/PyFiberModes/__future__.py +0 -177
- pyfibermodes-0.13.0/PyFiberModes/solver/__init__.py +0 -5
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.coveragerc +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/dependabot.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/deploy_PyPi.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/deploy_anaconda.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/deploy_coverage.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/deploy_documentation.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/.github/workflows/quality.yml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/LICENSE +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/MANIFEST.in +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/Makefile +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/analysis.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/factory.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/1550BHP.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/DCF13.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/DCF1300S_20.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/DCF1300S_26.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/DCF1300S_33.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/DCF1300S_42.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/F2028M12.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/F2028M21.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/F2028M24.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/F2058G1.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/F2058L1.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/HI1060.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/HP630.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/SM1950.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/SMF28.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/fluorine_doped_1%_capillary.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/fluorine_doped_2%_capillary.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/test_fiber.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fiber_files/test_multimode_fiber.yaml +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/fundamentals.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/loader.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/mode_instances.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/optimization.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/propagation.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/mlsif/__init__.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/ssif/__init__.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/ssif/cutoff.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/ssif/neff.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/tlsif/__init__.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/solver/tlsif/cutoff.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes/source.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes.egg-info/dependency_links.txt +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/PyFiberModes.egg-info/top_level.txt +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/Makefile +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/DCF/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/DCF/plot_DCF_fields.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/SMF28/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/SMF28/plot_smf28.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/SMF28/plot_smf28_dispersion_vs_wavelength.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/SMF28/plot_smf28_group_index_vs_wavelength.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/analysis/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/analysis/plot_coupled_mode_exchange.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/analysis/plot_structured_wavelength_sweep.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_U_vs_V.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_comparison_solvers.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_dispersion.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_effective_index.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_fiber_LP_modes.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_group_index.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_mode_field.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_mode_field_1.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_mode_field_2.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/basic/plot_neff_tapered_fiber.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/benchmarks/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/benchmarks/plot_field_grid_scaling.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/fields/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/fields/plot_vector_components.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/validation/README.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/examples/validation/plot_effective_index_bounds.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/make.bat +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/_static/default.css +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/_static/favicon.png +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/_static/logo.png +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/_static/thumbnail.png +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/code/fibers.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/code/fields.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/code.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/examples.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/getting_started.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/performance.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/references.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/theory.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/troubleshooting.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/docs/source/workflows.rst +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/pytest.ini +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/setup.cfg +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/__init__.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/helpers.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_advanced_features.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_coordinates.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_docstrings.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_fiber.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_file_loading.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_release_tools.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_ssif.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_tlsif.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tests/test_validation.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tools/next_release_version.py +0 -0
- {pyfibermodes-0.13.0 → pyfibermodes-0.13.2}/tools/release_tag.py +0 -0
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
strategy:
|
|
17
17
|
fail-fast: false
|
|
18
18
|
matrix:
|
|
19
|
-
python-version: ["3.
|
|
19
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
20
20
|
steps:
|
|
21
21
|
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09
|
|
22
22
|
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "PyFiberModes: guided-mode analysis and design for optical fibers",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "Guided-mode analysis and design for circular optical fibers, with field analysis, dispersion, modal sweeps, inverse design, and coupled-mode propagation.",
|
|
4
4
|
"creators": [
|
|
5
5
|
{
|
|
6
6
|
"name": "Poinsinet de Sivry-Houle, Martin"
|
|
@@ -9,11 +9,14 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"upload_type": "software",
|
|
11
11
|
"access_right": "open",
|
|
12
|
-
"version": "0.13.
|
|
13
|
-
"publication_date": "2026-09-
|
|
12
|
+
"version": "0.13.2",
|
|
13
|
+
"publication_date": "2026-09-23",
|
|
14
14
|
"keywords": [
|
|
15
15
|
"optical fibers",
|
|
16
16
|
"guided modes",
|
|
17
|
+
"mode solver",
|
|
18
|
+
"optical waveguides",
|
|
19
|
+
"photonics",
|
|
17
20
|
"effective index",
|
|
18
21
|
"dispersion",
|
|
19
22
|
"coupled-mode theory"
|
|
@@ -6,6 +6,37 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.13.2] - 2026-09-23
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Raised the minimum supported Python version to 3.11 and aligned CI,
|
|
14
|
+
contributor guidance, Ruff, and Conda metadata with that policy.
|
|
15
|
+
- Moved Matplotlib rendering into the optional `PyFiberModes.plotting` module
|
|
16
|
+
and added the `plotting` installation extra, keeping it out of core runtime
|
|
17
|
+
dependencies while preserving the `Field.plot` convenience method.
|
|
18
|
+
- Replaced generic package descriptions and keywords with fiber-mode,
|
|
19
|
+
photonics, waveguide, dispersion, and coupled-mode metadata.
|
|
20
|
+
|
|
21
|
+
## [0.13.1] - 2026-09-22
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Added validated immutable layer and solver settings, structural solver
|
|
26
|
+
protocols, domain-specific exceptions, and structured solver diagnostics.
|
|
27
|
+
- Added deterministic physical-reference, convergence, caching, architecture,
|
|
28
|
+
and opt-in `pytest-benchmark` performance suites.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Unified cylindrical coordinates under one canonical model, split modal and
|
|
33
|
+
field orchestration into focused services, and added geometry-aware caching.
|
|
34
|
+
- Vectorized radial index lookup and routed field construction through a
|
|
35
|
+
single batched radial-field interface.
|
|
36
|
+
- Standardized the group-velocity API on `get_group_velocity` and removed
|
|
37
|
+
unreferenced experimental modules, unfinished solver branches, misspelled
|
|
38
|
+
methods, lowercase directory aliases, and obsolete compatibility wrappers.
|
|
39
|
+
|
|
9
40
|
## [0.13.0] - 2026-09-22
|
|
10
41
|
|
|
11
42
|
### Changed
|
|
@@ -55,7 +86,9 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
55
86
|
|
|
56
87
|
- Established the current tagged baseline for subsequent documented releases.
|
|
57
88
|
|
|
58
|
-
[Unreleased]: https://github.com/MartinPdeS/PyFiberModes/compare/v0.13.
|
|
89
|
+
[Unreleased]: https://github.com/MartinPdeS/PyFiberModes/compare/v0.13.2...HEAD
|
|
90
|
+
[0.13.2]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.13.2
|
|
91
|
+
[0.13.1]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.13.1
|
|
59
92
|
[0.13.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.13.0
|
|
60
93
|
[0.12.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.12.0
|
|
61
94
|
[0.11.0]: https://github.com/MartinPdeS/PyFiberModes/releases/tag/v0.11.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Contributing to PyFiberModes
|
|
2
2
|
|
|
3
|
-
Use Python 3.
|
|
3
|
+
Use Python 3.11 or newer. Install development dependencies with `python -m pip install -e ".[testing,documentation]"`, then run `python -m pytest`.
|
|
4
4
|
|
|
5
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
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyFiberModes
|
|
3
|
-
Version: 0.13.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.13.2
|
|
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
|
|
7
7
|
Version 3, 29 June 2007
|
|
@@ -682,9 +682,10 @@ Project-URL: Homepage, https://github.com/MartinPdeS/PyFiberModes
|
|
|
682
682
|
Project-URL: Repository, https://github.com/MartinPdeS/PyFiberModes
|
|
683
683
|
Project-URL: Issues, https://github.com/MartinPdeS/PyFiberModes/issues
|
|
684
684
|
Project-URL: Documentation, https://martinpdes.github.io/PyFiberModes/
|
|
685
|
-
Keywords:
|
|
685
|
+
Keywords: fiber optics,guided modes,mode solver,optical waveguides,photonics,dispersion,coupled-mode theory
|
|
686
686
|
Classifier: Programming Language :: Python
|
|
687
687
|
Classifier: Programming Language :: Python :: 3
|
|
688
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
688
689
|
Classifier: Programming Language :: Python :: 3.11
|
|
689
690
|
Classifier: Programming Language :: Python :: 3.12
|
|
690
691
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -693,12 +694,11 @@ Classifier: Development Status :: 4 - Beta
|
|
|
693
694
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
694
695
|
Classifier: License :: OSI Approved :: MIT License
|
|
695
696
|
Classifier: Intended Audience :: Science/Research
|
|
696
|
-
Requires-Python: >=3.
|
|
697
|
+
Requires-Python: >=3.11
|
|
697
698
|
Description-Content-Type: text/x-rst
|
|
698
699
|
License-File: LICENSE
|
|
699
700
|
Requires-Dist: PyOptik<3,>=2
|
|
700
701
|
Requires-Dist: PyFinitDiff
|
|
701
|
-
Requires-Dist: matplotlib>=3.8
|
|
702
702
|
Requires-Dist: pyyaml
|
|
703
703
|
Requires-Dist: numpy
|
|
704
704
|
Requires-Dist: scipy
|
|
@@ -708,8 +708,13 @@ Requires-Dist: pytest-cov<8,>=2; extra == "testing"
|
|
|
708
708
|
Requires-Dist: pytest-json-report~=1.5; extra == "testing"
|
|
709
709
|
Requires-Dist: coverage~=7.6; extra == "testing"
|
|
710
710
|
Requires-Dist: ruff<1,>=0.8; extra == "testing"
|
|
711
|
-
Requires-Dist:
|
|
711
|
+
Requires-Dist: matplotlib>=3.8; extra == "testing"
|
|
712
|
+
Provides-Extra: plotting
|
|
713
|
+
Requires-Dist: matplotlib>=3.8; extra == "plotting"
|
|
714
|
+
Provides-Extra: benchmarking
|
|
715
|
+
Requires-Dist: pytest-benchmark<6,>=5; extra == "benchmarking"
|
|
712
716
|
Provides-Extra: documentation
|
|
717
|
+
Requires-Dist: matplotlib>=3.8; extra == "documentation"
|
|
713
718
|
Requires-Dist: numpydoc==1.10.0; extra == "documentation"
|
|
714
719
|
Requires-Dist: sphinx>=5.1.1; extra == "documentation"
|
|
715
720
|
Requires-Dist: sphinx-gallery==0.21.0; extra == "documentation"
|
|
@@ -775,17 +780,26 @@ Features
|
|
|
775
780
|
* Constrained optimization of layer radii, refractive indices, and custom parameters.
|
|
776
781
|
* Constant or longitudinally varying coupled-mode propagation.
|
|
777
782
|
* A catalog of common and example fiber definitions stored as readable YAML files.
|
|
783
|
+
* Structured solver diagnostics, validated configuration models, and explicit
|
|
784
|
+
solver protocols for extending numerical backends.
|
|
785
|
+
* Geometry-aware modal caching and vectorized radial index and field workflows.
|
|
778
786
|
|
|
779
787
|
Installation
|
|
780
788
|
------------
|
|
781
789
|
|
|
782
|
-
PyFiberModes requires Python 3.
|
|
790
|
+
PyFiberModes requires Python 3.11 or newer. Install the released package from
|
|
783
791
|
PyPI:
|
|
784
792
|
|
|
785
793
|
.. code-block:: bash
|
|
786
794
|
|
|
787
795
|
python -m pip install PyFiberModes
|
|
788
796
|
|
|
797
|
+
Matplotlib-based field visualizations are optional:
|
|
798
|
+
|
|
799
|
+
.. code-block:: bash
|
|
800
|
+
|
|
801
|
+
python -m pip install "PyFiberModes[plotting]"
|
|
802
|
+
|
|
789
803
|
or from Anaconda:
|
|
790
804
|
|
|
791
805
|
.. code-block:: bash
|
|
@@ -1023,7 +1037,7 @@ Or run the complete local check target:
|
|
|
1023
1037
|
|
|
1024
1038
|
make check
|
|
1025
1039
|
|
|
1026
|
-
Tests run on Python 3.
|
|
1040
|
+
Tests run on Python 3.11 through 3.13 in GitHub Actions. Bug reports and
|
|
1027
1041
|
feature proposals are welcome through the
|
|
1028
1042
|
`issue tracker <https://github.com/MartinPdeS/PyFiberModes/issues>`_.
|
|
1029
1043
|
|
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
from PyFiberModes.mode import Mode, Family # noqa: F401
|
|
4
4
|
from PyFiberModes.mode_instances import * # noqa: F403
|
|
5
5
|
from PyFiberModes.factory import FiberFactory
|
|
6
|
+
from PyFiberModes.fiber import Fiber, load_fiber
|
|
6
7
|
from PyFiberModes.field import Field
|
|
8
|
+
from PyFiberModes.coordinates import CartesianCoordinates, CylindricalCoordinates
|
|
9
|
+
from PyFiberModes.exceptions import ConvergenceError, SolverError, ValidationError
|
|
10
|
+
from PyFiberModes.models import LayerSpec, SolverSettings
|
|
11
|
+
from PyFiberModes.solver.results import SolverResult
|
|
7
12
|
from PyFiberModes.analysis import ModeSweepResult, find_modes, sweep_modes
|
|
8
13
|
from PyFiberModes.optimization import DesignParameter, DesignResult, optimize_fiber
|
|
9
14
|
from PyFiberModes.propagation import CoupledModeSystem, PropagationResult, coupling_matrix, overlap
|
|
@@ -17,11 +22,15 @@ except ImportError:
|
|
|
17
22
|
|
|
18
23
|
|
|
19
24
|
__all__ = [ # noqa: F405
|
|
20
|
-
'Wavelength',
|
|
21
25
|
'Mode',
|
|
22
|
-
'
|
|
26
|
+
'Family',
|
|
27
|
+
'Fiber',
|
|
28
|
+
'load_fiber',
|
|
23
29
|
'FiberFactory',
|
|
24
30
|
'Field',
|
|
31
|
+
'CartesianCoordinates', 'CylindricalCoordinates',
|
|
32
|
+
'LayerSpec', 'SolverSettings', 'SolverResult',
|
|
33
|
+
'ValidationError', 'SolverError', 'ConvergenceError',
|
|
25
34
|
'ModeSweepResult', 'find_modes', 'sweep_modes',
|
|
26
35
|
'DesignParameter', 'DesignResult', 'optimize_fiber',
|
|
27
36
|
'CoupledModeSystem', 'PropagationResult', 'coupling_matrix', 'overlap',
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.13.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 13,
|
|
21
|
+
__version__ = version = '0.13.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 13, 2)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -74,9 +74,9 @@ class CartesianCoordinates:
|
|
|
74
74
|
|
|
75
75
|
def __post_init__(self) -> None:
|
|
76
76
|
"""Convert all coordinate arrays to floating-point arrays."""
|
|
77
|
-
self.x = self.x
|
|
78
|
-
self.y = self.y
|
|
79
|
-
self.z = self.z
|
|
77
|
+
self.x = np.asarray(self.x, dtype=float)
|
|
78
|
+
self.y = np.asarray(self.y, dtype=float)
|
|
79
|
+
self.z = np.asarray(self.z, dtype=float)
|
|
80
80
|
|
|
81
81
|
@property
|
|
82
82
|
def x_boundaries(self) -> Tuple[float, float]:
|
|
@@ -119,7 +119,8 @@ class CartesianCoordinates:
|
|
|
119
119
|
"""
|
|
120
120
|
if self.is_structured:
|
|
121
121
|
x_min, x_max = self.x_boundaries
|
|
122
|
-
|
|
122
|
+
unique_x = np.unique(self.x)
|
|
123
|
+
return float(unique_x[1] - unique_x[0])
|
|
123
124
|
raise ValueError("dx value cannot be inferred from an unstructured mesh.")
|
|
124
125
|
|
|
125
126
|
@property
|
|
@@ -139,7 +140,8 @@ class CartesianCoordinates:
|
|
|
139
140
|
"""
|
|
140
141
|
if self.is_structured:
|
|
141
142
|
y_min, y_max = self.y_boundaries
|
|
142
|
-
|
|
143
|
+
unique_y = np.unique(self.y)
|
|
144
|
+
return float(unique_y[1] - unique_y[0])
|
|
143
145
|
raise ValueError("dx value cannot be inferred from an unstructured mesh.")
|
|
144
146
|
|
|
145
147
|
@classmethod
|
|
@@ -9,11 +9,6 @@ __all__ = [
|
|
|
9
9
|
"DOCS_PATH",
|
|
10
10
|
"EXAMPLES_PATH",
|
|
11
11
|
"DOC_CSS_PATH",
|
|
12
|
-
"root_path",
|
|
13
|
-
"project_path",
|
|
14
|
-
"examples_path",
|
|
15
|
-
"doc_path",
|
|
16
|
-
"doc_css_path",
|
|
17
12
|
]
|
|
18
13
|
|
|
19
14
|
PACKAGE_PATH = Path(__file__).resolve().parent
|
|
@@ -21,10 +16,3 @@ PROJECT_PATH = PACKAGE_PATH.parent
|
|
|
21
16
|
DOCS_PATH = PROJECT_PATH / "docs"
|
|
22
17
|
EXAMPLES_PATH = DOCS_PATH / "examples"
|
|
23
18
|
DOC_CSS_PATH = DOCS_PATH / "source" / "_static" / "default.css"
|
|
24
|
-
|
|
25
|
-
# Backwards-compatible aliases for the original public names.
|
|
26
|
-
root_path = PACKAGE_PATH
|
|
27
|
-
project_path = PROJECT_PATH
|
|
28
|
-
doc_path = DOCS_PATH
|
|
29
|
-
examples_path = EXAMPLES_PATH
|
|
30
|
-
doc_css_path = DOC_CSS_PATH
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Domain-specific exceptions raised by PyFiberModes."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PyFiberModesError(Exception):
|
|
5
|
+
"""Base class for package-specific errors."""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ValidationError(PyFiberModesError, ValueError):
|
|
9
|
+
"""Indicate invalid physical geometry or solver configuration."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SolverError(PyFiberModesError, RuntimeError):
|
|
13
|
+
"""Indicate that a modal solver could not complete normally."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ConvergenceError(SolverError):
|
|
17
|
+
"""Indicate that a numerical solver did not converge to a valid root."""
|