gratinglab 0.2.3__tar.gz → 0.2.5__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.2.3/src/gratinglab.egg-info → gratinglab-0.2.5}/PKG-INFO +9 -7
- {gratinglab-0.2.3 → gratinglab-0.2.5}/README.md +8 -6
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/__init__.py +1 -1
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/theming.py +10 -1
- gratinglab-0.2.5/src/gratinglab/metrology/gui/qt/layout.py +95 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5/src/gratinglab.egg-info}/PKG-INFO +9 -7
- gratinglab-0.2.3/src/gratinglab/metrology/gui/qt/layout.py +0 -46
- {gratinglab-0.2.3 → gratinglab-0.2.5}/LICENSE +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/pyproject.toml +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/setup.cfg +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/checks.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/compare.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/convergence.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/geometry.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/app.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/cmethod_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/diagram.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/diagram3d.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/docs.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/efficiency_plot.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/icon.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/integral_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/launcher.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/mathtext.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/orders.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/provenance.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/cmethod_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/geometry_panel.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/geometry_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/integral_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/launcher.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/main_window.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/profile_plot_panel.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/rcwa_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/scalar_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/scene3d_panel.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/setup_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/sizing.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/theory_viewer.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/worker.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/rcwa_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/richtext.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/scalar_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/state.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/theme.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/illumination.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/boundary.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/efficiency_table.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/ggp.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/data/SOURCES.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/fresnel.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/optical.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/refractiveindex.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/measured.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/analyzer.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/average.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/pipeline.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/swaths.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/cli.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/config.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/analysis.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/image_flatten.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/orientation.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/processing.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/region_mask.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/scars.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/tip.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/data/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/data/aggregation.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/icon.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/app.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/boundary_view.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/canvas.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/efficiency_dialog.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/import_view.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/main_window.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/swath_dialog.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/wiki_view.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/worker.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/state.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/file_io.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/ibw.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/metrics.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/spm.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/settings.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/analysis.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/icc.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/diagnostics.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/profiles.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/statistics.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/facet-fitting.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/file-formats.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/flattening.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/groove-orientation.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/icc-correction.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/overview.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/reading-outputs.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/row-groups.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/scars-and-masking.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/swath-statistics.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/tip-correction.md +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/workflows.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/problem.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/profiles.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/resolution.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/result.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/_conditioning.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/_execution.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/base.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/_core.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/_series.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_boundary.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_core.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_finite.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_greens.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_kernels.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_nystrom.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/__init__.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/_core.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/_stack.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/scalar.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/SOURCES.txt +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/dependency_links.txt +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/entry_points.txt +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/requires.txt +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/top_level.txt +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_changelog.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_checks.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_cmethod.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_compare.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_conditioning.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_convergence.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_cross_method.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_efficiency_table.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_fresnel.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_geometry.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_ggp.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_cmethod_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_cmethod_tab.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_diagram.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_diagram3d.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_docs.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_integral_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_launcher.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_mathtext.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_orders.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_provenance.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_qt.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_rcwa_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_richtext.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_scalar_options.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_state.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_theme.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_illumination.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_core.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_corpus.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_finite.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_graded.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_greens.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_kernels.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_operators.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_solver.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_io_boundary.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_materials.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_measured.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_perturbation.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_profiles.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rayleigh_anomaly.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rcwa.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rcwa_benchmarks.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_refractiveindex.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_resolution.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_result.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_scalar.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_solver_conformance.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_solver_execution.py +0 -0
- {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_solver_progress.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gratinglab
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Open platform for diffraction grating groove metrology and efficiency analysis
|
|
5
5
|
Author: Jake McCoy, Aditi Gangadharan
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -110,8 +110,10 @@ convergence harnesses and the materials layer work end to end. They are checked
|
|
|
110
110
|
against closed-form results, published benchmark tables, energy balance and
|
|
111
111
|
reciprocity, but remain experimental until they have been used on real problems.
|
|
112
112
|
Efficiencies are absolute when a coating is named, using an optical constant table
|
|
113
|
-
supplied by the user (see Install).
|
|
114
|
-
|
|
113
|
+
supplied by the user (see Install). Since 0.2.0 two more rigorous backends sit
|
|
114
|
+
beside them, both written in-house and both experimental: a rigorous coupled-wave
|
|
115
|
+
analysis (RCWA), which also models coated gratings through conformal layers, and
|
|
116
|
+
the C-method (Chandezon). Each has a tab in the efficiency window since 0.2.1.
|
|
115
117
|
|
|
116
118
|
## Scope
|
|
117
119
|
|
|
@@ -136,8 +138,8 @@ grazing incidence (γ of a degree or two), the soft X-ray spectroscopy regime th
|
|
|
136
138
|
project began with, where the integral method is the established approach and
|
|
137
139
|
general-purpose RCWA codes are least reliable. `Illumination.classical`,
|
|
138
140
|
`Illumination.conical(theta, phi)` and `Illumination.offplane(graze, azimuth)` all
|
|
139
|
-
build the same object, and
|
|
140
|
-
(
|
|
141
|
+
build the same object, and every solver accepts any of them. Which method serves which regime, and what is not yet covered
|
|
142
|
+
(multilayer stacks checked against an independent code, for one), is mapped in
|
|
141
143
|
[`docs/roadmap.md`](https://github.com/jamccoy/gratinglab/blob/master/docs/roadmap.md#regimes-and-the-methods-that-serve-them).
|
|
142
144
|
|
|
143
145
|
The method backends, in order of development:
|
|
@@ -146,8 +148,8 @@ The method backends, in order of development:
|
|
|
146
148
|
|---|---|
|
|
147
149
|
| Scalar (Kirchhoff, x-ray blaze form) | experimental; checked against closed-form results |
|
|
148
150
|
| Integral method (boundary integral, conical, undercut-capable) | experimental; perfect and finite conductivity (`conductivity="tabulated"`, Goray & Schmidt 2010), absolute efficiencies with the absorbed fraction recorded; a corner-graded mesh for profiles with corners (`corner_grading=4`), under either boundary condition; checked against published benchmark tables (Maystre & Popov; Goray & Schmidt), energy balance and reciprocity |
|
|
149
|
-
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) |
|
|
150
|
-
| C-method (Chandezon) |
|
|
151
|
+
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) | experimental, since 0.2.0; lamellar gratings exact and other profiles staircased, transmitted orders, and coatings through conformal layers (`Problem.layers`); checked against Fresnel, the Airy film formula, reciprocity, the integral solver, and published lamellar values (Granet; Lalanne & Hugonin; Gralak; Goray & Schmidt's conical tables). Not yet checked: staircase accuracy in metallic TM, and layers of a second material against an independent code |
|
|
152
|
+
| C-method (Chandezon) | experimental, since 0.2.0; perfect conductor in any mount, and one interface into an absorbing or lossless material, conical and coupled; checked against Goray & Schmidt's Table 3, Fresnel and the integral solver. Refuses vertical facets and undercuts; converges slowly on sawtooth corners, and loses precision at high truncation on profiles deeper than about half the period, both reported in provenance. No coatings |
|
|
151
153
|
|
|
152
154
|
The comparison harness also accepts an efficiency table already computed by an
|
|
153
155
|
external program as one of its methods, so that comparison plots can be made without
|
|
@@ -65,8 +65,10 @@ convergence harnesses and the materials layer work end to end. They are checked
|
|
|
65
65
|
against closed-form results, published benchmark tables, energy balance and
|
|
66
66
|
reciprocity, but remain experimental until they have been used on real problems.
|
|
67
67
|
Efficiencies are absolute when a coating is named, using an optical constant table
|
|
68
|
-
supplied by the user (see Install).
|
|
69
|
-
|
|
68
|
+
supplied by the user (see Install). Since 0.2.0 two more rigorous backends sit
|
|
69
|
+
beside them, both written in-house and both experimental: a rigorous coupled-wave
|
|
70
|
+
analysis (RCWA), which also models coated gratings through conformal layers, and
|
|
71
|
+
the C-method (Chandezon). Each has a tab in the efficiency window since 0.2.1.
|
|
70
72
|
|
|
71
73
|
## Scope
|
|
72
74
|
|
|
@@ -91,8 +93,8 @@ grazing incidence (γ of a degree or two), the soft X-ray spectroscopy regime th
|
|
|
91
93
|
project began with, where the integral method is the established approach and
|
|
92
94
|
general-purpose RCWA codes are least reliable. `Illumination.classical`,
|
|
93
95
|
`Illumination.conical(theta, phi)` and `Illumination.offplane(graze, azimuth)` all
|
|
94
|
-
build the same object, and
|
|
95
|
-
(
|
|
96
|
+
build the same object, and every solver accepts any of them. Which method serves which regime, and what is not yet covered
|
|
97
|
+
(multilayer stacks checked against an independent code, for one), is mapped in
|
|
96
98
|
[`docs/roadmap.md`](https://github.com/jamccoy/gratinglab/blob/master/docs/roadmap.md#regimes-and-the-methods-that-serve-them).
|
|
97
99
|
|
|
98
100
|
The method backends, in order of development:
|
|
@@ -101,8 +103,8 @@ The method backends, in order of development:
|
|
|
101
103
|
|---|---|
|
|
102
104
|
| Scalar (Kirchhoff, x-ray blaze form) | experimental; checked against closed-form results |
|
|
103
105
|
| Integral method (boundary integral, conical, undercut-capable) | experimental; perfect and finite conductivity (`conductivity="tabulated"`, Goray & Schmidt 2010), absolute efficiencies with the absorbed fraction recorded; a corner-graded mesh for profiles with corners (`corner_grading=4`), under either boundary condition; checked against published benchmark tables (Maystre & Popov; Goray & Schmidt), energy balance and reciprocity |
|
|
104
|
-
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) |
|
|
105
|
-
| C-method (Chandezon) |
|
|
106
|
+
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) | experimental, since 0.2.0; lamellar gratings exact and other profiles staircased, transmitted orders, and coatings through conformal layers (`Problem.layers`); checked against Fresnel, the Airy film formula, reciprocity, the integral solver, and published lamellar values (Granet; Lalanne & Hugonin; Gralak; Goray & Schmidt's conical tables). Not yet checked: staircase accuracy in metallic TM, and layers of a second material against an independent code |
|
|
107
|
+
| C-method (Chandezon) | experimental, since 0.2.0; perfect conductor in any mount, and one interface into an absorbing or lossless material, conical and coupled; checked against Goray & Schmidt's Table 3, Fresnel and the integral solver. Refuses vertical facets and undercuts; converges slowly on sawtooth corners, and loses precision at high truncation on profiles deeper than about half the period, both reported in provenance. No coatings |
|
|
106
108
|
|
|
107
109
|
The comparison harness also accepts an efficiency table already computed by an
|
|
108
110
|
external program as one of its methods, so that comparison plots can be made without
|
|
@@ -22,7 +22,7 @@ from .measured import MeasuredEfficiency, MeasurementProvenance
|
|
|
22
22
|
from .resolution import ResolvingPower, resolving_power
|
|
23
23
|
from .result import EfficiencyScan, OrderEfficiency, Provenance
|
|
24
24
|
|
|
25
|
-
__version__ = "0.2.
|
|
25
|
+
__version__ = "0.2.5"
|
|
26
26
|
|
|
27
27
|
__all__ = [
|
|
28
28
|
"Illumination",
|
|
@@ -36,6 +36,7 @@ __all__ = [
|
|
|
36
36
|
"current",
|
|
37
37
|
"install",
|
|
38
38
|
"manager",
|
|
39
|
+
"settings",
|
|
39
40
|
"subscribe",
|
|
40
41
|
"swatch",
|
|
41
42
|
]
|
|
@@ -47,13 +48,21 @@ _KEY = "appearance/theme"
|
|
|
47
48
|
_PROPERTY = "_gratinglab_theme_manager"
|
|
48
49
|
|
|
49
50
|
|
|
50
|
-
def
|
|
51
|
+
def settings() -> QSettings:
|
|
52
|
+
"""The application's settings store, or the INI file ``GRATINGLAB_SETTINGS`` names.
|
|
53
|
+
|
|
54
|
+
Shared by everything the windows remember (the theme, the AFM column
|
|
55
|
+
width), so the test suite's redirect covers all of it at once.
|
|
56
|
+
"""
|
|
51
57
|
path = os.environ.get(SETTINGS_ENV)
|
|
52
58
|
if path:
|
|
53
59
|
return QSettings(path, QSettings.Format.IniFormat)
|
|
54
60
|
return QSettings("gratinglab", "gratinglab")
|
|
55
61
|
|
|
56
62
|
|
|
63
|
+
_settings = settings
|
|
64
|
+
|
|
65
|
+
|
|
57
66
|
def palette(theme: Theme) -> QPalette:
|
|
58
67
|
"""A ``QPalette`` for ``theme``, with disabled text dimmed to its muted colour."""
|
|
59
68
|
role = QPalette.ColorRole
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
The controls-and-plot layout every AFM tab shares.
|
|
3
|
+
|
|
4
|
+
Each tab was a fixed 272 px column of controls in a 292 px scroll area beside
|
|
5
|
+
its plot, so long labels were crammed and nothing could be widened. A splitter
|
|
6
|
+
replaces that: the column starts wide enough for its contents, cannot be
|
|
7
|
+
dragged narrower than its widest control needs, and gives the plot every pixel
|
|
8
|
+
the window gains.
|
|
9
|
+
|
|
10
|
+
The width is one setting, not one per tab. Dragging the column in any tab
|
|
11
|
+
moves it in the others, so switching tabs never makes the plot jump, and the
|
|
12
|
+
width is saved as it is dragged, so the window opens at it next time. It is
|
|
13
|
+
kept in the same store as the theme (``theming.settings``), which the test
|
|
14
|
+
suite redirects to a scratch file.
|
|
15
|
+
"""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import weakref
|
|
19
|
+
|
|
20
|
+
from . import * # noqa: F401,F403 - sets QT_API before matplotlib's shim loads
|
|
21
|
+
|
|
22
|
+
from PySide6.QtCore import Qt
|
|
23
|
+
from PySide6.QtWidgets import QFrame, QScrollArea, QSplitter, QWidget
|
|
24
|
+
|
|
25
|
+
from gratinglab.gui.qt.theming import settings
|
|
26
|
+
|
|
27
|
+
__all__ = ["controls_beside", "MIN_CONTROLS_WIDTH", "START_CONTROLS_WIDTH",
|
|
28
|
+
"WIDTH_KEY"]
|
|
29
|
+
|
|
30
|
+
#: Narrower than this and the group boxes' labels start to wrap mid-word.
|
|
31
|
+
MIN_CONTROLS_WIDTH = 260
|
|
32
|
+
#: Where the column starts, unless its contents ask for more.
|
|
33
|
+
START_CONTROLS_WIDTH = 320
|
|
34
|
+
#: Where the chosen width is remembered.
|
|
35
|
+
WIDTH_KEY = "afm/controls_width"
|
|
36
|
+
|
|
37
|
+
# Every live splitter, so a drag in one tab can move the others. Weak, so a
|
|
38
|
+
# closed window's splitters drop out on their own.
|
|
39
|
+
_SPLITTERS: "weakref.WeakSet[QSplitter]" = weakref.WeakSet()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _saved_width() -> int | None:
|
|
43
|
+
value = settings().value(WIDTH_KEY)
|
|
44
|
+
try:
|
|
45
|
+
return int(value) if value is not None else None
|
|
46
|
+
except (TypeError, ValueError):
|
|
47
|
+
return None # a hand-edited or corrupt value: fall back to the default
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _follow(source: QSplitter) -> None:
|
|
51
|
+
"""Remember ``source``'s column width and give it to every other tab."""
|
|
52
|
+
width = source.sizes()[0]
|
|
53
|
+
store = settings()
|
|
54
|
+
store.setValue(WIDTH_KEY, width)
|
|
55
|
+
store.sync()
|
|
56
|
+
for other in list(_SPLITTERS):
|
|
57
|
+
if other is source:
|
|
58
|
+
continue
|
|
59
|
+
try:
|
|
60
|
+
total = sum(other.sizes())
|
|
61
|
+
other.blockSignals(True)
|
|
62
|
+
other.setSizes([width, max(1, total - width)])
|
|
63
|
+
other.blockSignals(False)
|
|
64
|
+
except RuntimeError:
|
|
65
|
+
# Its window was closed and Qt has deleted it, while the Python
|
|
66
|
+
# wrapper waits for collection.
|
|
67
|
+
_SPLITTERS.discard(other)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def controls_beside(controls: QWidget, plot: QWidget) -> QSplitter:
|
|
71
|
+
"""A splitter holding the scrolling ``controls`` column and the ``plot``."""
|
|
72
|
+
scroll = QScrollArea()
|
|
73
|
+
scroll.setWidget(controls)
|
|
74
|
+
scroll.setWidgetResizable(True)
|
|
75
|
+
scroll.setFrameShape(QFrame.NoFrame)
|
|
76
|
+
# Width is the splitter's to decide; only the height should ever scroll.
|
|
77
|
+
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
|
78
|
+
|
|
79
|
+
gutter = scroll.verticalScrollBar().sizeHint().width()
|
|
80
|
+
floor = max(MIN_CONTROLS_WIDTH, controls.minimumSizeHint().width() + gutter)
|
|
81
|
+
scroll.setMinimumWidth(floor)
|
|
82
|
+
|
|
83
|
+
splitter = QSplitter(Qt.Horizontal)
|
|
84
|
+
splitter.setChildrenCollapsible(False)
|
|
85
|
+
splitter.addWidget(scroll)
|
|
86
|
+
splitter.addWidget(plot)
|
|
87
|
+
splitter.setStretchFactor(0, 0)
|
|
88
|
+
splitter.setStretchFactor(1, 1)
|
|
89
|
+
# A remembered width wins, but never below what this tab's controls need.
|
|
90
|
+
start = max(_saved_width() or START_CONTROLS_WIDTH, floor)
|
|
91
|
+
splitter.setSizes([start, max(1, 4 * start)])
|
|
92
|
+
|
|
93
|
+
_SPLITTERS.add(splitter)
|
|
94
|
+
splitter.splitterMoved.connect(lambda *_: _follow(splitter))
|
|
95
|
+
return splitter
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gratinglab
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Open platform for diffraction grating groove metrology and efficiency analysis
|
|
5
5
|
Author: Jake McCoy, Aditi Gangadharan
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -110,8 +110,10 @@ convergence harnesses and the materials layer work end to end. They are checked
|
|
|
110
110
|
against closed-form results, published benchmark tables, energy balance and
|
|
111
111
|
reciprocity, but remain experimental until they have been used on real problems.
|
|
112
112
|
Efficiencies are absolute when a coating is named, using an optical constant table
|
|
113
|
-
supplied by the user (see Install).
|
|
114
|
-
|
|
113
|
+
supplied by the user (see Install). Since 0.2.0 two more rigorous backends sit
|
|
114
|
+
beside them, both written in-house and both experimental: a rigorous coupled-wave
|
|
115
|
+
analysis (RCWA), which also models coated gratings through conformal layers, and
|
|
116
|
+
the C-method (Chandezon). Each has a tab in the efficiency window since 0.2.1.
|
|
115
117
|
|
|
116
118
|
## Scope
|
|
117
119
|
|
|
@@ -136,8 +138,8 @@ grazing incidence (γ of a degree or two), the soft X-ray spectroscopy regime th
|
|
|
136
138
|
project began with, where the integral method is the established approach and
|
|
137
139
|
general-purpose RCWA codes are least reliable. `Illumination.classical`,
|
|
138
140
|
`Illumination.conical(theta, phi)` and `Illumination.offplane(graze, azimuth)` all
|
|
139
|
-
build the same object, and
|
|
140
|
-
(
|
|
141
|
+
build the same object, and every solver accepts any of them. Which method serves which regime, and what is not yet covered
|
|
142
|
+
(multilayer stacks checked against an independent code, for one), is mapped in
|
|
141
143
|
[`docs/roadmap.md`](https://github.com/jamccoy/gratinglab/blob/master/docs/roadmap.md#regimes-and-the-methods-that-serve-them).
|
|
142
144
|
|
|
143
145
|
The method backends, in order of development:
|
|
@@ -146,8 +148,8 @@ The method backends, in order of development:
|
|
|
146
148
|
|---|---|
|
|
147
149
|
| Scalar (Kirchhoff, x-ray blaze form) | experimental; checked against closed-form results |
|
|
148
150
|
| Integral method (boundary integral, conical, undercut-capable) | experimental; perfect and finite conductivity (`conductivity="tabulated"`, Goray & Schmidt 2010), absolute efficiencies with the absorbed fraction recorded; a corner-graded mesh for profiles with corners (`corner_grading=4`), under either boundary condition; checked against published benchmark tables (Maystre & Popov; Goray & Schmidt), energy balance and reciprocity |
|
|
149
|
-
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) |
|
|
150
|
-
| C-method (Chandezon) |
|
|
151
|
+
| RCWA (in-plane, conical, off-plane; Li factorization, S-matrix, layer stacks) | experimental, since 0.2.0; lamellar gratings exact and other profiles staircased, transmitted orders, and coatings through conformal layers (`Problem.layers`); checked against Fresnel, the Airy film formula, reciprocity, the integral solver, and published lamellar values (Granet; Lalanne & Hugonin; Gralak; Goray & Schmidt's conical tables). Not yet checked: staircase accuracy in metallic TM, and layers of a second material against an independent code |
|
|
152
|
+
| C-method (Chandezon) | experimental, since 0.2.0; perfect conductor in any mount, and one interface into an absorbing or lossless material, conical and coupled; checked against Goray & Schmidt's Table 3, Fresnel and the integral solver. Refuses vertical facets and undercuts; converges slowly on sawtooth corners, and loses precision at high truncation on profiles deeper than about half the period, both reported in provenance. No coatings |
|
|
151
153
|
|
|
152
154
|
The comparison harness also accepts an efficiency table already computed by an
|
|
153
155
|
external program as one of its methods, so that comparison plots can be made without
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The controls-and-plot layout every AFM tab shares.
|
|
3
|
-
|
|
4
|
-
Each tab was a fixed 272 px column of controls in a 292 px scroll area beside
|
|
5
|
-
its plot, so long labels were crammed and nothing could be widened. A splitter
|
|
6
|
-
replaces that: the column starts wide enough for its contents, cannot be
|
|
7
|
-
dragged narrower than its widest control needs, and gives the plot every pixel
|
|
8
|
-
the window gains.
|
|
9
|
-
"""
|
|
10
|
-
from __future__ import annotations
|
|
11
|
-
|
|
12
|
-
from . import * # noqa: F401,F403 - sets QT_API before matplotlib's shim loads
|
|
13
|
-
|
|
14
|
-
from PySide6.QtCore import Qt
|
|
15
|
-
from PySide6.QtWidgets import QFrame, QScrollArea, QSplitter, QWidget
|
|
16
|
-
|
|
17
|
-
__all__ = ["controls_beside", "MIN_CONTROLS_WIDTH", "START_CONTROLS_WIDTH"]
|
|
18
|
-
|
|
19
|
-
#: Narrower than this and the group boxes' labels start to wrap mid-word.
|
|
20
|
-
MIN_CONTROLS_WIDTH = 260
|
|
21
|
-
#: Where the column starts, unless its contents ask for more.
|
|
22
|
-
START_CONTROLS_WIDTH = 320
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def controls_beside(controls: QWidget, plot: QWidget) -> QSplitter:
|
|
26
|
-
"""A splitter holding the scrolling ``controls`` column and the ``plot``."""
|
|
27
|
-
scroll = QScrollArea()
|
|
28
|
-
scroll.setWidget(controls)
|
|
29
|
-
scroll.setWidgetResizable(True)
|
|
30
|
-
scroll.setFrameShape(QFrame.NoFrame)
|
|
31
|
-
# Width is the splitter's to decide; only the height should ever scroll.
|
|
32
|
-
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
|
33
|
-
|
|
34
|
-
gutter = scroll.verticalScrollBar().sizeHint().width()
|
|
35
|
-
floor = max(MIN_CONTROLS_WIDTH, controls.minimumSizeHint().width() + gutter)
|
|
36
|
-
scroll.setMinimumWidth(floor)
|
|
37
|
-
|
|
38
|
-
splitter = QSplitter(Qt.Horizontal)
|
|
39
|
-
splitter.setChildrenCollapsible(False)
|
|
40
|
-
splitter.addWidget(scroll)
|
|
41
|
-
splitter.addWidget(plot)
|
|
42
|
-
splitter.setStretchFactor(0, 0)
|
|
43
|
-
splitter.setStretchFactor(1, 1)
|
|
44
|
-
start = max(START_CONTROLS_WIDTH, floor)
|
|
45
|
-
splitter.setSizes([start, max(1, 4 * start)])
|
|
46
|
-
return splitter
|
|
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
|
|
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
|