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.
Files changed (193) hide show
  1. {gratinglab-0.2.3/src/gratinglab.egg-info → gratinglab-0.2.5}/PKG-INFO +9 -7
  2. {gratinglab-0.2.3 → gratinglab-0.2.5}/README.md +8 -6
  3. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/__init__.py +1 -1
  4. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/theming.py +10 -1
  5. gratinglab-0.2.5/src/gratinglab/metrology/gui/qt/layout.py +95 -0
  6. {gratinglab-0.2.3 → gratinglab-0.2.5/src/gratinglab.egg-info}/PKG-INFO +9 -7
  7. gratinglab-0.2.3/src/gratinglab/metrology/gui/qt/layout.py +0 -46
  8. {gratinglab-0.2.3 → gratinglab-0.2.5}/LICENSE +0 -0
  9. {gratinglab-0.2.3 → gratinglab-0.2.5}/pyproject.toml +0 -0
  10. {gratinglab-0.2.3 → gratinglab-0.2.5}/setup.cfg +0 -0
  11. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/checks.py +0 -0
  12. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/compare.py +0 -0
  13. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/convergence.py +0 -0
  14. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/geometry.py +0 -0
  15. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/__init__.py +0 -0
  16. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/app.py +0 -0
  17. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/cmethod_options.py +0 -0
  18. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/diagram.py +0 -0
  19. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/diagram3d.py +0 -0
  20. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/docs.py +0 -0
  21. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/efficiency_plot.py +0 -0
  22. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/icon.py +0 -0
  23. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/integral_options.py +0 -0
  24. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/launcher.py +0 -0
  25. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/mathtext.py +0 -0
  26. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/orders.py +0 -0
  27. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/provenance.py +0 -0
  28. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/__init__.py +0 -0
  29. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/cmethod_tab.py +0 -0
  30. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/geometry_panel.py +0 -0
  31. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/geometry_tab.py +0 -0
  32. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/integral_tab.py +0 -0
  33. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/launcher.py +0 -0
  34. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/main_window.py +0 -0
  35. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/profile_plot_panel.py +0 -0
  36. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/rcwa_tab.py +0 -0
  37. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/scalar_tab.py +0 -0
  38. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/scene3d_panel.py +0 -0
  39. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/setup_tab.py +0 -0
  40. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/sizing.py +0 -0
  41. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/theory_viewer.py +0 -0
  42. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/qt/worker.py +0 -0
  43. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/rcwa_options.py +0 -0
  44. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/richtext.py +0 -0
  45. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/scalar_options.py +0 -0
  46. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/state.py +0 -0
  47. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/gui/theme.py +0 -0
  48. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/illumination.py +0 -0
  49. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/__init__.py +0 -0
  50. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/boundary.py +0 -0
  51. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/efficiency_table.py +0 -0
  52. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/io/ggp.py +0 -0
  53. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/__init__.py +0 -0
  54. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/data/SOURCES.md +0 -0
  55. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/fresnel.py +0 -0
  56. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/optical.py +0 -0
  57. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/materials/refractiveindex.py +0 -0
  58. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/measured.py +0 -0
  59. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/__init__.py +0 -0
  60. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/analyzer.py +0 -0
  61. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/__init__.py +0 -0
  62. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/average.py +0 -0
  63. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/pipeline.py +0 -0
  64. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/boundary/swaths.py +0 -0
  65. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/cli.py +0 -0
  66. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/config.py +0 -0
  67. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/__init__.py +0 -0
  68. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/analysis.py +0 -0
  69. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/image_flatten.py +0 -0
  70. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/orientation.py +0 -0
  71. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/processing.py +0 -0
  72. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/region_mask.py +0 -0
  73. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/scars.py +0 -0
  74. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/core/tip.py +0 -0
  75. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/data/__init__.py +0 -0
  76. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/data/aggregation.py +0 -0
  77. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/__init__.py +0 -0
  78. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/icon.py +0 -0
  79. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/__init__.py +0 -0
  80. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/app.py +0 -0
  81. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/boundary_view.py +0 -0
  82. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/canvas.py +0 -0
  83. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/efficiency_dialog.py +0 -0
  84. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/import_view.py +0 -0
  85. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/main_window.py +0 -0
  86. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/swath_dialog.py +0 -0
  87. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/wiki_view.py +0 -0
  88. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/qt/worker.py +0 -0
  89. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/gui/state.py +0 -0
  90. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/__init__.py +0 -0
  91. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/file_io.py +0 -0
  92. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/ibw.py +0 -0
  93. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/metrics.py +0 -0
  94. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/io/spm.py +0 -0
  95. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/settings.py +0 -0
  96. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/__init__.py +0 -0
  97. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/analysis.py +0 -0
  98. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/stats/icc.py +0 -0
  99. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/__init__.py +0 -0
  100. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/diagnostics.py +0 -0
  101. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/profiles.py +0 -0
  102. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/visualization/statistics.py +0 -0
  103. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/__init__.py +0 -0
  104. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/facet-fitting.md +0 -0
  105. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/file-formats.md +0 -0
  106. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/flattening.md +0 -0
  107. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/groove-orientation.md +0 -0
  108. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/icc-correction.md +0 -0
  109. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/overview.md +0 -0
  110. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/reading-outputs.md +0 -0
  111. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/row-groups.md +0 -0
  112. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/scars-and-masking.md +0 -0
  113. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/swath-statistics.md +0 -0
  114. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/wiki/tip-correction.md +0 -0
  115. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/metrology/workflows.py +0 -0
  116. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/problem.py +0 -0
  117. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/profiles.py +0 -0
  118. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/resolution.py +0 -0
  119. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/result.py +0 -0
  120. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/__init__.py +0 -0
  121. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/_conditioning.py +0 -0
  122. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/_execution.py +0 -0
  123. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/base.py +0 -0
  124. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/__init__.py +0 -0
  125. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/_core.py +0 -0
  126. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/cmethod/_series.py +0 -0
  127. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/__init__.py +0 -0
  128. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_boundary.py +0 -0
  129. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_core.py +0 -0
  130. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_finite.py +0 -0
  131. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_greens.py +0 -0
  132. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_kernels.py +0 -0
  133. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/integral/_nystrom.py +0 -0
  134. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/__init__.py +0 -0
  135. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/_core.py +0 -0
  136. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/rcwa/_stack.py +0 -0
  137. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab/solvers/scalar.py +0 -0
  138. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/SOURCES.txt +0 -0
  139. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/dependency_links.txt +0 -0
  140. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/entry_points.txt +0 -0
  141. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/requires.txt +0 -0
  142. {gratinglab-0.2.3 → gratinglab-0.2.5}/src/gratinglab.egg-info/top_level.txt +0 -0
  143. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_changelog.py +0 -0
  144. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_checks.py +0 -0
  145. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_cmethod.py +0 -0
  146. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_compare.py +0 -0
  147. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_conditioning.py +0 -0
  148. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_convergence.py +0 -0
  149. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_cross_method.py +0 -0
  150. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_efficiency_table.py +0 -0
  151. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_fresnel.py +0 -0
  152. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_geometry.py +0 -0
  153. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_ggp.py +0 -0
  154. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_cmethod_options.py +0 -0
  155. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_cmethod_tab.py +0 -0
  156. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_diagram.py +0 -0
  157. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_diagram3d.py +0 -0
  158. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_docs.py +0 -0
  159. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_integral_options.py +0 -0
  160. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_launcher.py +0 -0
  161. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_mathtext.py +0 -0
  162. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_orders.py +0 -0
  163. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_provenance.py +0 -0
  164. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_qt.py +0 -0
  165. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_rcwa_options.py +0 -0
  166. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_richtext.py +0 -0
  167. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_scalar_options.py +0 -0
  168. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_state.py +0 -0
  169. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_gui_theme.py +0 -0
  170. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_illumination.py +0 -0
  171. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_core.py +0 -0
  172. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_corpus.py +0 -0
  173. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_finite.py +0 -0
  174. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_graded.py +0 -0
  175. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_greens.py +0 -0
  176. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_kernels.py +0 -0
  177. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_operators.py +0 -0
  178. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_integral_solver.py +0 -0
  179. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_io_boundary.py +0 -0
  180. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_materials.py +0 -0
  181. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_measured.py +0 -0
  182. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_perturbation.py +0 -0
  183. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_profiles.py +0 -0
  184. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rayleigh_anomaly.py +0 -0
  185. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rcwa.py +0 -0
  186. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_rcwa_benchmarks.py +0 -0
  187. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_refractiveindex.py +0 -0
  188. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_resolution.py +0 -0
  189. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_result.py +0 -0
  190. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_scalar.py +0 -0
  191. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_solver_conformance.py +0 -0
  192. {gratinglab-0.2.3 → gratinglab-0.2.5}/tests/test_solver_execution.py +0 -0
  193. {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
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). A rigorous coupled-wave analysis (RCWA) backend
114
- is planned, written in-house.
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 both solvers accept any of them. Which method serves which regime, and what is not yet covered
140
- (coated and multilayer gratings, for one), is mapped in
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) | planned, written in-house |
150
- | C-method (Chandezon) | planned |
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). A rigorous coupled-wave analysis (RCWA) backend
69
- is planned, written in-house.
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 both solvers accept any of them. Which method serves which regime, and what is not yet covered
95
- (coated and multilayer gratings, for one), is mapped in
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) | planned, written in-house |
105
- | C-method (Chandezon) | planned |
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.3"
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 _settings() -> QSettings:
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
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). A rigorous coupled-wave analysis (RCWA) backend
114
- is planned, written in-house.
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 both solvers accept any of them. Which method serves which regime, and what is not yet covered
140
- (coated and multilayer gratings, for one), is mapped in
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) | planned, written in-house |
150
- | C-method (Chandezon) | planned |
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