gratinglab 0.1.1__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. {gratinglab-0.1.1/src/gratinglab.egg-info → gratinglab-0.1.2}/PKG-INFO +3 -3
  2. {gratinglab-0.1.1 → gratinglab-0.1.2}/README.md +2 -2
  3. {gratinglab-0.1.1 → gratinglab-0.1.2}/pyproject.toml +8 -1
  4. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/__init__.py +1 -1
  5. {gratinglab-0.1.1 → gratinglab-0.1.2/src/gratinglab.egg-info}/PKG-INFO +3 -3
  6. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_result.py +25 -7
  7. {gratinglab-0.1.1 → gratinglab-0.1.2}/LICENSE +0 -0
  8. {gratinglab-0.1.1 → gratinglab-0.1.2}/setup.cfg +0 -0
  9. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/checks.py +0 -0
  10. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/compare.py +0 -0
  11. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/convergence.py +0 -0
  12. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/geometry.py +0 -0
  13. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/__init__.py +0 -0
  14. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/app.py +0 -0
  15. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/diagram.py +0 -0
  16. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/diagram3d.py +0 -0
  17. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/docs.py +0 -0
  18. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/icon.py +0 -0
  19. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/integral_options.py +0 -0
  20. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/mathtext.py +0 -0
  21. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/orders.py +0 -0
  22. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/provenance.py +0 -0
  23. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/__init__.py +0 -0
  24. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/geometry_panel.py +0 -0
  25. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/geometry_tab.py +0 -0
  26. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/integral_tab.py +0 -0
  27. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/main_window.py +0 -0
  28. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/profile_plot_panel.py +0 -0
  29. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/scalar_tab.py +0 -0
  30. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/scene3d_panel.py +0 -0
  31. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/setup_tab.py +0 -0
  32. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/sizing.py +0 -0
  33. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/theory_viewer.py +0 -0
  34. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/qt/worker.py +0 -0
  35. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/richtext.py +0 -0
  36. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/scalar_options.py +0 -0
  37. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/gui/state.py +0 -0
  38. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/illumination.py +0 -0
  39. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/io/__init__.py +0 -0
  40. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/io/efficiency_table.py +0 -0
  41. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/io/ggp.py +0 -0
  42. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/materials/__init__.py +0 -0
  43. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/materials/data/SOURCES.md +0 -0
  44. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/materials/fresnel.py +0 -0
  45. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/materials/optical.py +0 -0
  46. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/materials/refractiveindex.py +0 -0
  47. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/__init__.py +0 -0
  48. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/analyzer.py +0 -0
  49. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/boundary/__init__.py +0 -0
  50. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/boundary/average.py +0 -0
  51. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/boundary/pipeline.py +0 -0
  52. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/cli.py +0 -0
  53. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/config.py +0 -0
  54. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/core/__init__.py +0 -0
  55. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/core/analysis.py +0 -0
  56. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/core/image_flatten.py +0 -0
  57. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/core/processing.py +0 -0
  58. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/core/tip.py +0 -0
  59. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/data/__init__.py +0 -0
  60. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/data/aggregation.py +0 -0
  61. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/__init__.py +0 -0
  62. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/icon.py +0 -0
  63. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/__init__.py +0 -0
  64. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/app.py +0 -0
  65. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/boundary_view.py +0 -0
  66. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/canvas.py +0 -0
  67. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/efficiency_dialog.py +0 -0
  68. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/import_view.py +0 -0
  69. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/main_window.py +0 -0
  70. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/wiki_view.py +0 -0
  71. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/qt/worker.py +0 -0
  72. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/gui/state.py +0 -0
  73. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/io/__init__.py +0 -0
  74. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/io/file_io.py +0 -0
  75. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/io/metrics.py +0 -0
  76. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/io/spm.py +0 -0
  77. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/settings.py +0 -0
  78. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/stats/__init__.py +0 -0
  79. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/stats/analysis.py +0 -0
  80. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/stats/icc.py +0 -0
  81. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/visualization/__init__.py +0 -0
  82. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/visualization/diagnostics.py +0 -0
  83. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/visualization/profiles.py +0 -0
  84. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/visualization/statistics.py +0 -0
  85. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/__init__.py +0 -0
  86. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/facet-fitting.md +0 -0
  87. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/file-formats.md +0 -0
  88. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/flattening.md +0 -0
  89. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/icc-correction.md +0 -0
  90. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/overview.md +0 -0
  91. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/reading-outputs.md +0 -0
  92. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/row-groups.md +0 -0
  93. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/wiki/tip-correction.md +0 -0
  94. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/metrology/workflows.py +0 -0
  95. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/problem.py +0 -0
  96. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/profiles.py +0 -0
  97. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/resolution.py +0 -0
  98. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/result.py +0 -0
  99. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/__init__.py +0 -0
  100. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/base.py +0 -0
  101. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/__init__.py +0 -0
  102. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_boundary.py +0 -0
  103. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_core.py +0 -0
  104. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_finite.py +0 -0
  105. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_greens.py +0 -0
  106. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_kernels.py +0 -0
  107. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/integral/_nystrom.py +0 -0
  108. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab/solvers/scalar.py +0 -0
  109. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab.egg-info/SOURCES.txt +0 -0
  110. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab.egg-info/dependency_links.txt +0 -0
  111. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab.egg-info/entry_points.txt +0 -0
  112. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab.egg-info/requires.txt +0 -0
  113. {gratinglab-0.1.1 → gratinglab-0.1.2}/src/gratinglab.egg-info/top_level.txt +0 -0
  114. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_checks.py +0 -0
  115. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_compare.py +0 -0
  116. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_convergence.py +0 -0
  117. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_cross_method.py +0 -0
  118. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_efficiency_table.py +0 -0
  119. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_fresnel.py +0 -0
  120. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_geometry.py +0 -0
  121. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_ggp.py +0 -0
  122. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_diagram.py +0 -0
  123. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_diagram3d.py +0 -0
  124. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_docs.py +0 -0
  125. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_integral_options.py +0 -0
  126. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_mathtext.py +0 -0
  127. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_orders.py +0 -0
  128. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_provenance.py +0 -0
  129. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_qt.py +0 -0
  130. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_richtext.py +0 -0
  131. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_scalar_options.py +0 -0
  132. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_gui_state.py +0 -0
  133. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_illumination.py +0 -0
  134. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_core.py +0 -0
  135. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_corpus.py +0 -0
  136. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_finite.py +0 -0
  137. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_greens.py +0 -0
  138. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_kernels.py +0 -0
  139. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_operators.py +0 -0
  140. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_integral_solver.py +0 -0
  141. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_materials.py +0 -0
  142. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_perturbation.py +0 -0
  143. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_profiles.py +0 -0
  144. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_refractiveindex.py +0 -0
  145. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_resolution.py +0 -0
  146. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_scalar.py +0 -0
  147. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_solver_conformance.py +0 -0
  148. {gratinglab-0.1.1 → gratinglab-0.1.2}/tests/test_solver_progress.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gratinglab
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Open platform for diffraction grating groove metrology and efficiency analysis
5
5
  Author: Jake McCoy
6
6
  License: BSD-3-Clause
@@ -39,8 +39,8 @@ Dynamic: license-file
39
39
 
40
40
  # gratinglab
41
41
 
42
- [![PyPI](https://img.shields.io/pypi/v/gratinglab)](https://pypi.org/project/gratinglab/)
43
- [![Python](https://img.shields.io/pypi/pyversions/gratinglab)](https://pypi.org/project/gratinglab/)
42
+ [![PyPI](https://img.shields.io/pypi/v/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
43
+ [![Python](https://img.shields.io/pypi/pyversions/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
44
44
  [![tests](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml/badge.svg)](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
45
45
  [![License: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue)](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
46
46
 
@@ -1,7 +1,7 @@
1
1
  # gratinglab
2
2
 
3
- [![PyPI](https://img.shields.io/pypi/v/gratinglab)](https://pypi.org/project/gratinglab/)
4
- [![Python](https://img.shields.io/pypi/pyversions/gratinglab)](https://pypi.org/project/gratinglab/)
3
+ [![PyPI](https://img.shields.io/pypi/v/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
4
+ [![Python](https://img.shields.io/pypi/pyversions/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
5
5
  [![tests](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml/badge.svg)](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
6
6
  [![License: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue)](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
7
7
 
@@ -4,7 +4,11 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gratinglab"
7
- version = "0.1.1"
7
+ # Read from `gratinglab.__version__`, the way endstation does, so a release
8
+ # bumps one literal. Everything else (provenance, the GUI's About box, the
9
+ # release workflow's tag check) already reads `__version__`, and
10
+ # tests/test_result.py holds CITATION.cff to it.
11
+ dynamic = ["version"]
8
12
  description = "Open platform for diffraction grating groove metrology and efficiency analysis"
9
13
  readme = "README.md"
10
14
  requires-python = ">=3.11"
@@ -76,6 +80,9 @@ Homepage = "https://github.com/jamccoy/gratinglab"
76
80
  # Solver backends register here. A backend may live in its own distribution.
77
81
  [project.entry-points."gratinglab.solvers"]
78
82
 
83
+ [tool.setuptools.dynamic]
84
+ version = { attr = "gratinglab.__version__" }
85
+
79
86
  [tool.setuptools.packages.find]
80
87
  where = ["src"]
81
88
 
@@ -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.1"
24
+ __version__ = "0.1.2"
25
25
 
26
26
  __all__ = [
27
27
  "Illumination",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gratinglab
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Open platform for diffraction grating groove metrology and efficiency analysis
5
5
  Author: Jake McCoy
6
6
  License: BSD-3-Clause
@@ -39,8 +39,8 @@ Dynamic: license-file
39
39
 
40
40
  # gratinglab
41
41
 
42
- [![PyPI](https://img.shields.io/pypi/v/gratinglab)](https://pypi.org/project/gratinglab/)
43
- [![Python](https://img.shields.io/pypi/pyversions/gratinglab)](https://pypi.org/project/gratinglab/)
42
+ [![PyPI](https://img.shields.io/pypi/v/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
43
+ [![Python](https://img.shields.io/pypi/pyversions/gratinglab?cacheSeconds=3600)](https://pypi.org/project/gratinglab/)
44
44
  [![tests](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml/badge.svg)](https://github.com/jamccoy/gratinglab/actions/workflows/test.yml)
45
45
  [![License: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue)](https://github.com/jamccoy/gratinglab/blob/master/LICENSE)
46
46
 
@@ -192,14 +192,32 @@ class TestPublicAPI:
192
192
  assert hasattr(gratinglab, name)
193
193
 
194
194
 
195
- def test_the_version_provenance_records_is_the_one_being_shipped():
196
- """`__version__` is stamped on every result's provenance and is written by
197
- hand beside pyproject.toml's. A release that bumped one and not the other
198
- would label its results with a version nobody can install."""
195
+ def test_the_package_version_is_read_from_version():
196
+ """`__version__` is the one written version: it is stamped on every
197
+ result's provenance, and pyproject.toml reads it rather than restating it.
198
+ A second literal there could drift and label results with a version
199
+ nobody can install."""
199
200
  import tomllib
200
201
 
201
- from gratinglab import __version__
202
-
203
202
  pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml"
204
203
  with pyproject.open("rb") as f:
205
- assert __version__ == tomllib.load(f)["project"]["version"]
204
+ config = tomllib.load(f)
205
+ assert "version" not in config["project"]
206
+ assert "version" in config["project"]["dynamic"]
207
+ assert config["tool"]["setuptools"]["dynamic"]["version"] == {
208
+ "attr": "gratinglab.__version__"
209
+ }
210
+
211
+
212
+ def test_the_citation_names_the_version_being_shipped():
213
+ """CITATION.cff is the one copy setuptools cannot read for us, so a release
214
+ that bumps `__version__` and forgets it fails here instead of shipping a
215
+ citation for the previous release."""
216
+ import re
217
+
218
+ from gratinglab import __version__
219
+
220
+ citation = Path(__file__).resolve().parents[1] / "CITATION.cff"
221
+ found = re.search(r"^version: (\S+)$", citation.read_text(encoding="utf-8"), re.M)
222
+ assert found is not None, "CITATION.cff has no version line"
223
+ assert found.group(1) == __version__
File without changes
File without changes
File without changes