gratinglab 0.1.7__tar.gz → 0.1.8__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.
- {gratinglab-0.1.7/src/gratinglab.egg-info → gratinglab-0.1.8}/PKG-INFO +5 -3
- {gratinglab-0.1.7 → gratinglab-0.1.8}/README.md +1 -1
- {gratinglab-0.1.7 → gratinglab-0.1.8}/pyproject.toml +15 -1
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/__init__.py +1 -1
- {gratinglab-0.1.7 → gratinglab-0.1.8/src/gratinglab.egg-info}/PKG-INFO +5 -3
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab.egg-info/SOURCES.txt +1 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab.egg-info/requires.txt +6 -1
- gratinglab-0.1.8/tests/test_changelog.py +34 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/LICENSE +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/setup.cfg +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/checks.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/compare.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/convergence.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/geometry.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/app.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/diagram.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/diagram3d.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/docs.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/icon.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/integral_options.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/mathtext.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/orders.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/provenance.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/gc_guard.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/geometry_panel.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/geometry_tab.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/integral_tab.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/main_window.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/profile_plot_panel.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/scalar_tab.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/scene3d_panel.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/setup_tab.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/sizing.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/theory_viewer.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/qt/worker.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/richtext.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/scalar_options.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/gui/state.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/illumination.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/io/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/io/boundary.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/io/efficiency_table.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/io/ggp.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/materials/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/materials/data/SOURCES.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/materials/fresnel.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/materials/optical.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/materials/refractiveindex.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/analyzer.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/boundary/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/boundary/average.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/boundary/pipeline.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/boundary/swaths.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/cli.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/config.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/core/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/core/analysis.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/core/image_flatten.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/core/processing.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/core/tip.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/data/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/data/aggregation.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/icon.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/app.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/boundary_view.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/canvas.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/efficiency_dialog.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/import_view.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/main_window.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/swath_dialog.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/wiki_view.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/qt/worker.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/gui/state.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/io/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/io/file_io.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/io/metrics.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/io/spm.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/settings.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/stats/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/stats/analysis.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/stats/icc.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/visualization/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/visualization/diagnostics.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/visualization/profiles.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/visualization/statistics.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/facet-fitting.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/file-formats.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/flattening.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/icc-correction.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/overview.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/reading-outputs.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/row-groups.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/swath-statistics.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/wiki/tip-correction.md +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/metrology/workflows.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/problem.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/profiles.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/resolution.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/result.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/base.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/__init__.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_boundary.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_core.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_finite.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_greens.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_kernels.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/integral/_nystrom.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab/solvers/scalar.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab.egg-info/dependency_links.txt +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab.egg-info/entry_points.txt +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/src/gratinglab.egg-info/top_level.txt +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_checks.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_compare.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_convergence.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_cross_method.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_efficiency_table.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_fresnel.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_geometry.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_ggp.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_diagram.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_diagram3d.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_docs.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_integral_options.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_mathtext.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_orders.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_provenance.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_qt.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_richtext.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_scalar_options.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_gui_state.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_illumination.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_core.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_corpus.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_finite.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_greens.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_kernels.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_operators.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_integral_solver.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_io_boundary.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_materials.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_perturbation.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_profiles.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_refractiveindex.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_resolution.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_result.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_scalar.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_solver_conformance.py +0 -0
- {gratinglab-0.1.7 → gratinglab-0.1.8}/tests/test_solver_progress.py +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gratinglab
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: Open platform for diffraction grating groove metrology and efficiency analysis
|
|
5
5
|
Author: Jake McCoy
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
Project-URL: Homepage, https://github.com/jamccoy/gratinglab
|
|
8
|
+
Project-URL: Changelog, https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md
|
|
8
9
|
Keywords: diffraction,grating,efficiency,rcwa,x-ray,spectroscopy,afm,metrology,blaze,pcgrate
|
|
9
10
|
Classifier: Development Status :: 2 - Pre-Alpha
|
|
10
11
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -27,7 +28,8 @@ Requires-Dist: pandas>=2.1; extra == "dev"
|
|
|
27
28
|
Requires-Dist: ruff>=0.16; extra == "dev"
|
|
28
29
|
Provides-Extra: gui
|
|
29
30
|
Requires-Dist: matplotlib>=3.8; extra == "gui"
|
|
30
|
-
Requires-Dist: PySide6-Essentials
|
|
31
|
+
Requires-Dist: PySide6-Essentials!=6.12.0,>=6.7; python_version < "3.12" and extra == "gui"
|
|
32
|
+
Requires-Dist: PySide6-Essentials>=6.7; python_version >= "3.12" and extra == "gui"
|
|
31
33
|
Requires-Dist: endstation[qt]>=0.2.2; extra == "gui"
|
|
32
34
|
Provides-Extra: metrology
|
|
33
35
|
Requires-Dist: matplotlib>=3.9; extra == "metrology"
|
|
@@ -44,7 +46,7 @@ Dynamic: license-file
|
|
|
44
46
|
[](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
|
|
45
47
|
[](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
|
|
46
48
|
|
|
47
|
-
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
49
|
+
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Changelog](https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
48
50
|
|
|
49
51
|
gratinglab is a Python package for measuring the groove profiles of diffraction
|
|
50
52
|
gratings from atomic force microscope (AFM) scans and for computing the diffraction
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
|
|
6
6
|
[](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
|
|
7
7
|
|
|
8
|
-
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
8
|
+
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Changelog](https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
9
9
|
|
|
10
10
|
gratinglab is a Python package for measuring the groove profiles of diffraction
|
|
11
11
|
gratings from atomic force microscope (AFM) scans and for computing the diffraction
|
|
@@ -48,7 +48,20 @@ dev = ["pytest>=7", "pytest-qt>=4.5", "matplotlib>=3.8", "pandas>=2.1", "ruff>=0
|
|
|
48
48
|
#
|
|
49
49
|
# PySide6 (LGPLv3) rather than PyQt6 (GPL): this package is BSD-3, and an
|
|
50
50
|
# optional dynamically-linked dependency keeps it that way.
|
|
51
|
-
|
|
51
|
+
#
|
|
52
|
+
# PySide6 6.12.0 on Python 3.11 aborts the interpreter at exit (Fatal Python
|
|
53
|
+
# error: bool_dealloc) after heavy GUI use: it releases a reference to True or
|
|
54
|
+
# False that it does not own, which on 3.11 eventually frees the object during
|
|
55
|
+
# finalization. On 3.12 and later True and False are immortal and the bug is
|
|
56
|
+
# harmless. Measured in CI on 2026-10-22: 6.9.3, 6.10.3 and 6.11.2 passed twice
|
|
57
|
+
# each and 6.12.0 crashed twice. Only that release is excluded, and only on 3.11,
|
|
58
|
+
# so a fixed 6.12.x is taken as soon as it exists.
|
|
59
|
+
gui = [
|
|
60
|
+
"matplotlib>=3.8",
|
|
61
|
+
"PySide6-Essentials>=6.7,!=6.12.0; python_version < '3.12'",
|
|
62
|
+
"PySide6-Essentials>=6.7; python_version >= '3.12'",
|
|
63
|
+
"endstation[qt]>=0.2.2",
|
|
64
|
+
]
|
|
52
65
|
# Groove metrology: reading AFM scans and averaging them into a boundary
|
|
53
66
|
# profile. An extra for the same reason the GUI is one -- `pip install
|
|
54
67
|
# gratinglab` must stay numpy/scipy/pydantic, so a solver-only user never
|
|
@@ -76,6 +89,7 @@ gratinglab-metrology = "gratinglab.metrology.cli:main"
|
|
|
76
89
|
|
|
77
90
|
[project.urls]
|
|
78
91
|
Homepage = "https://github.com/jamccoy/gratinglab"
|
|
92
|
+
Changelog = "https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md"
|
|
79
93
|
|
|
80
94
|
# Solver backends register here. A backend may live in its own distribution.
|
|
81
95
|
[project.entry-points."gratinglab.solvers"]
|
|
@@ -21,7 +21,7 @@ from .illumination import Illumination, Polarization
|
|
|
21
21
|
from .resolution import ResolvingPower, resolving_power
|
|
22
22
|
from .result import EfficiencyScan, OrderEfficiency, Provenance
|
|
23
23
|
|
|
24
|
-
__version__ = "0.1.
|
|
24
|
+
__version__ = "0.1.8"
|
|
25
25
|
|
|
26
26
|
__all__ = [
|
|
27
27
|
"Illumination",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gratinglab
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: Open platform for diffraction grating groove metrology and efficiency analysis
|
|
5
5
|
Author: Jake McCoy
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
Project-URL: Homepage, https://github.com/jamccoy/gratinglab
|
|
8
|
+
Project-URL: Changelog, https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md
|
|
8
9
|
Keywords: diffraction,grating,efficiency,rcwa,x-ray,spectroscopy,afm,metrology,blaze,pcgrate
|
|
9
10
|
Classifier: Development Status :: 2 - Pre-Alpha
|
|
10
11
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -27,7 +28,8 @@ Requires-Dist: pandas>=2.1; extra == "dev"
|
|
|
27
28
|
Requires-Dist: ruff>=0.16; extra == "dev"
|
|
28
29
|
Provides-Extra: gui
|
|
29
30
|
Requires-Dist: matplotlib>=3.8; extra == "gui"
|
|
30
|
-
Requires-Dist: PySide6-Essentials
|
|
31
|
+
Requires-Dist: PySide6-Essentials!=6.12.0,>=6.7; python_version < "3.12" and extra == "gui"
|
|
32
|
+
Requires-Dist: PySide6-Essentials>=6.7; python_version >= "3.12" and extra == "gui"
|
|
31
33
|
Requires-Dist: endstation[qt]>=0.2.2; extra == "gui"
|
|
32
34
|
Provides-Extra: metrology
|
|
33
35
|
Requires-Dist: matplotlib>=3.9; extra == "metrology"
|
|
@@ -44,7 +46,7 @@ Dynamic: license-file
|
|
|
44
46
|
[](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
|
|
45
47
|
[](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
|
|
46
48
|
|
|
47
|
-
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
49
|
+
**[PyPI](https://pypi.org/project/gratinglab/)** · **[Documentation](https://github.com/jamccoy/gratinglab/wiki)** · **[Changelog](https://github.com/jamccoy/gratinglab/blob/master/CHANGELOG.md)** · **[Releases](https://github.com/jamccoy/gratinglab/releases)** · **[Issues](https://github.com/jamccoy/gratinglab/issues)**
|
|
48
50
|
|
|
49
51
|
gratinglab is a Python package for measuring the groove profiles of diffraction
|
|
50
52
|
gratings from atomic force microscope (AFM) scans and for computing the diffraction
|
|
@@ -113,6 +113,7 @@ src/gratinglab/solvers/integral/_finite.py
|
|
|
113
113
|
src/gratinglab/solvers/integral/_greens.py
|
|
114
114
|
src/gratinglab/solvers/integral/_kernels.py
|
|
115
115
|
src/gratinglab/solvers/integral/_nystrom.py
|
|
116
|
+
tests/test_changelog.py
|
|
116
117
|
tests/test_checks.py
|
|
117
118
|
tests/test_compare.py
|
|
118
119
|
tests/test_convergence.py
|
|
@@ -12,9 +12,14 @@ ruff>=0.16
|
|
|
12
12
|
|
|
13
13
|
[gui]
|
|
14
14
|
matplotlib>=3.8
|
|
15
|
-
PySide6-Essentials>=6.7
|
|
16
15
|
endstation[qt]>=0.2.2
|
|
17
16
|
|
|
17
|
+
[gui:python_version < "3.12"]
|
|
18
|
+
PySide6-Essentials!=6.12.0,>=6.7
|
|
19
|
+
|
|
20
|
+
[gui:python_version >= "3.12"]
|
|
21
|
+
PySide6-Essentials>=6.7
|
|
22
|
+
|
|
18
23
|
[metrology]
|
|
19
24
|
matplotlib>=3.9
|
|
20
25
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""The changelog has a section for the version being released.
|
|
2
|
+
|
|
3
|
+
A release commit moves the "Unreleased" entries under a heading named for the
|
|
4
|
+
new version. This test fails on the bump commit if that step was forgotten,
|
|
5
|
+
which is the point at which it is cheapest to fix, the same arrangement as the
|
|
6
|
+
CITATION.cff test.
|
|
7
|
+
"""
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
import gratinglab
|
|
12
|
+
|
|
13
|
+
ROOT = Path(__file__).resolve().parent.parent
|
|
14
|
+
CHANGELOG = ROOT / "CHANGELOG.md"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _sections():
|
|
18
|
+
text = CHANGELOG.read_text(encoding="utf-8")
|
|
19
|
+
return re.findall(r"^## (\S+)", text, re.M)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_the_current_version_has_a_section():
|
|
23
|
+
assert gratinglab.__version__ in _sections(), (
|
|
24
|
+
f"CHANGELOG.md has no '## {gratinglab.__version__}' section; move the "
|
|
25
|
+
"Unreleased entries under it in the release commit")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_unreleased_comes_first_and_versions_descend():
|
|
29
|
+
sections = _sections()
|
|
30
|
+
versions = [s for s in sections if s != "Unreleased"]
|
|
31
|
+
if "Unreleased" in sections:
|
|
32
|
+
assert sections[0] == "Unreleased", "Unreleased must be the first section"
|
|
33
|
+
key = [tuple(int(p) for p in v.split(".")) for v in versions]
|
|
34
|
+
assert key == sorted(key, reverse=True), "versions must be listed newest first"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|