photutils 2.2.0__tar.gz → 2.3.0__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 (330) hide show
  1. {photutils-2.2.0 → photutils-2.3.0}/.github/workflows/ci_cron_daily.yml +4 -3
  2. {photutils-2.2.0 → photutils-2.3.0}/.github/workflows/ci_cron_weekly.yml +6 -4
  3. {photutils-2.2.0 → photutils-2.3.0}/.github/workflows/ci_tests.yml +22 -26
  4. {photutils-2.2.0 → photutils-2.3.0}/.github/workflows/codeql.yml +3 -0
  5. {photutils-2.2.0 → photutils-2.3.0}/.github/workflows/publish.yml +5 -14
  6. {photutils-2.2.0 → photutils-2.3.0}/.pre-commit-config.yaml +20 -11
  7. {photutils-2.2.0 → photutils-2.3.0}/.readthedocs.yaml +1 -1
  8. {photutils-2.2.0 → photutils-2.3.0}/CHANGES.rst +181 -4
  9. {photutils-2.2.0/photutils.egg-info → photutils-2.3.0}/PKG-INFO +17 -42
  10. {photutils-2.2.0 → photutils-2.3.0}/README.rst +1 -1
  11. {photutils-2.2.0 → photutils-2.3.0}/docs/conf.py +21 -12
  12. photutils-2.3.0/docs/development/index.rst +22 -0
  13. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/importing.rst +6 -6
  14. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/index.rst +0 -3
  15. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/install.rst +16 -27
  16. {photutils-2.2.0 → photutils-2.3.0}/docs/index.rst +4 -3
  17. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/index.rst +1 -1
  18. photutils-2.3.0/docs/release_notes/index.rst +58 -0
  19. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/centroids.rst +1 -1
  20. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/detection.rst +1 -1
  21. photutils-2.3.0/docs/user_guide/grouping.rst +207 -0
  22. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/index.rst +9 -2
  23. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/profiles.rst +1 -1
  24. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/psf.rst +37 -55
  25. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.1.rst +5 -0
  26. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.10.rst +4 -0
  27. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.11.rst +4 -0
  28. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.12.rst +4 -0
  29. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.13.rst +6 -2
  30. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.2.rst +8 -0
  31. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.3.rst +8 -1
  32. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.4.rst +6 -1
  33. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.5.rst +6 -1
  34. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.6.rst +4 -0
  35. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.7.rst +4 -0
  36. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.8.rst +4 -0
  37. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/1.9.rst +4 -0
  38. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/2.0.rst +4 -0
  39. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/2.1.rst +6 -2
  40. {photutils-2.2.0 → photutils-2.3.0}/docs/whats_new/2.2.rst +4 -0
  41. photutils-2.3.0/docs/whats_new/2.3.rst +168 -0
  42. {photutils-2.2.0 → photutils-2.3.0}/photutils/CITATION.rst +22 -17
  43. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/__init__.py +1 -1
  44. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/attributes.py +40 -25
  45. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/bounding_box.py +16 -12
  46. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/circle.py +8 -6
  47. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/converters.py +47 -29
  48. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/core.py +37 -21
  49. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/ellipse.py +12 -7
  50. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/mask.py +9 -6
  51. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/photometry.py +6 -6
  52. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/rectangle.py +12 -7
  53. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/stats.py +36 -17
  54. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_aperture_common.py +1 -1
  55. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_converters.py +8 -8
  56. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_photometry.py +0 -1
  57. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/__init__.py +1 -1
  58. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/background_2d.py +117 -74
  59. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/core.py +54 -52
  60. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/interpolators.py +3 -3
  61. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/local_background.py +5 -4
  62. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/tests/test_background_2d.py +44 -6
  63. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/__init__.py +1 -1
  64. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/core.py +35 -21
  65. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/gaussian.py +22 -10
  66. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/tests/test_core.py +17 -0
  67. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/tests/test_gaussian.py +8 -2
  68. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/__init__.py +1 -1
  69. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/examples.py +2 -2
  70. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/images.py +80 -57
  71. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/load.py +6 -4
  72. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/model_params.py +8 -6
  73. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/noise.py +10 -6
  74. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_images.py +53 -0
  75. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_model_params.py +3 -3
  76. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/wcs.py +1 -1
  77. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/__init__.py +2 -2
  78. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/core.py +14 -9
  79. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/daofinder.py +9 -5
  80. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/irafstarfinder.py +9 -5
  81. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/peakfinder.py +8 -6
  82. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/starfinder.py +3 -2
  83. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/test_daofinder.py +11 -11
  84. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/test_irafstarfinder.py +11 -11
  85. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/test_peakfinder.py +5 -5
  86. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/test_starfinder.py +6 -6
  87. {photutils-2.2.0 → photutils-2.3.0}/photutils/extern/__init__.py +1 -1
  88. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/__init__.py +1 -1
  89. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/__init__.py +2 -2
  90. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/ellipse.py +1 -1
  91. photutils-2.3.0/photutils/isophote/ellipse_model.pyx +156 -0
  92. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/fitter.py +2 -2
  93. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/geometry.py +3 -3
  94. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/harmonics.py +3 -2
  95. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/integrator.py +2 -2
  96. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/isophote.py +13 -15
  97. photutils-2.3.0/photutils/isophote/model.py +140 -0
  98. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/sample.py +7 -15
  99. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/make_test_data.py +1 -1
  100. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_angles.py +3 -1
  101. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_model.py +7 -6
  102. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_regression.py +3 -1
  103. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/__init__.py +1 -1
  104. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/core.py +1 -2
  105. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/non_parametric.py +1 -2
  106. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/__init__.py +1 -1
  107. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/core.py +19 -11
  108. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/curve_of_growth.py +9 -8
  109. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/radial_profile.py +1 -1
  110. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/tests/test_radial_profile.py +2 -2
  111. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/__init__.py +3 -1
  112. photutils-2.3.0/photutils/psf/_components.py +1580 -0
  113. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/epsf.py +49 -30
  114. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/epsf_stars.py +37 -31
  115. photutils-2.3.0/photutils/psf/flags.py +437 -0
  116. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/functional_models.py +7 -4
  117. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/gridded_models.py +118 -40
  118. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/groupers.py +10 -3
  119. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/image_models.py +62 -38
  120. photutils-2.3.0/photutils/psf/iterative.py +654 -0
  121. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/__init__.py +1 -1
  122. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/fourier.py +4 -3
  123. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/windows.py +4 -3
  124. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/model_helpers.py +45 -32
  125. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/model_io.py +25 -16
  126. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/model_plotting.py +1 -1
  127. photutils-2.3.0/photutils/psf/photometry.py +1701 -0
  128. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/simulation.py +10 -12
  129. photutils-2.3.0/photutils/psf/tests/test_components.py +621 -0
  130. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_epsf.py +85 -93
  131. photutils-2.3.0/photutils/psf/tests/test_flags.py +513 -0
  132. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_functional_models.py +2 -1
  133. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_gridded_models.py +37 -1
  134. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_image_models.py +39 -39
  135. photutils-2.3.0/photutils/psf/tests/test_iterative.py +483 -0
  136. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_model_helpers.py +3 -3
  137. photutils-2.3.0/photutils/psf/tests/test_photometry.py +1855 -0
  138. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_utils.py +25 -7
  139. photutils-2.3.0/photutils/psf/utils.py +816 -0
  140. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/__init__.py +1 -1
  141. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/catalog.py +89 -49
  142. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/core.py +272 -79
  143. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/deblend.py +18 -17
  144. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/detect.py +28 -16
  145. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/finder.py +6 -7
  146. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_catalog.py +17 -2
  147. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_core.py +121 -5
  148. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_deblend.py +6 -6
  149. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_detect.py +1 -1
  150. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_finder.py +1 -1
  151. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/utils.py +3 -3
  152. {photutils-2.2.0 → photutils-2.3.0}/photutils/tests/helper.py +1 -1
  153. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/__init__.py +2 -2
  154. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_convolution.py +1 -1
  155. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_coords.py +3 -2
  156. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_misc.py +1 -2
  157. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_moments.py +3 -2
  158. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_optional_deps.py +3 -24
  159. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_parameters.py +40 -8
  160. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_progress_bars.py +23 -1
  161. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_quantity_helpers.py +3 -3
  162. photutils-2.3.0/photutils/utils/_repr.py +78 -0
  163. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_round.py +1 -1
  164. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_stats.py +3 -3
  165. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/_wcs_helpers.py +1 -1
  166. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/colormaps.py +1 -1
  167. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/cutouts.py +9 -2
  168. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/depths.py +20 -12
  169. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/errors.py +16 -12
  170. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/exceptions.py +1 -1
  171. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/footprints.py +3 -3
  172. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/interpolation.py +24 -19
  173. photutils-2.3.0/photutils/utils/tests/test_coords.py +37 -0
  174. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_depths.py +1 -1
  175. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_interpolation.py +1 -1
  176. photutils-2.3.0/photutils/utils/tests/test_repr.py +73 -0
  177. photutils-2.3.0/photutils/version.py +34 -0
  178. {photutils-2.2.0 → photutils-2.3.0/photutils.egg-info}/PKG-INFO +17 -42
  179. {photutils-2.2.0 → photutils-2.3.0}/photutils.egg-info/SOURCES.txt +14 -4
  180. photutils-2.3.0/photutils.egg-info/requires.txt +28 -0
  181. {photutils-2.2.0 → photutils-2.3.0}/pyproject.toml +65 -67
  182. {photutils-2.2.0 → photutils-2.3.0}/tox.ini +6 -19
  183. photutils-2.2.0/docs/development/index.rst +0 -12
  184. photutils-2.2.0/docs/nitpick-exceptions.txt +0 -9
  185. photutils-2.2.0/docs/user_guide/grouping.rst +0 -191
  186. photutils-2.2.0/docs/whats_new/index.rst +0 -35
  187. photutils-2.2.0/photutils/isophote/model.py +0 -168
  188. photutils-2.2.0/photutils/psf/photometry.py +0 -2012
  189. photutils-2.2.0/photutils/psf/tests/test_photometry.py +0 -1225
  190. photutils-2.2.0/photutils/psf/utils.py +0 -425
  191. photutils-2.2.0/photutils/utils/_repr.py +0 -54
  192. photutils-2.2.0/photutils/version.py +0 -16
  193. photutils-2.2.0/photutils.egg-info/requires.txt +0 -23
  194. {photutils-2.2.0 → photutils-2.3.0}/.flake8 +0 -0
  195. {photutils-2.2.0 → photutils-2.3.0}/.github/dependabot.yml +0 -0
  196. {photutils-2.2.0 → photutils-2.3.0}/.gitignore +0 -0
  197. {photutils-2.2.0 → photutils-2.3.0}/.pycodestyle +0 -0
  198. {photutils-2.2.0 → photutils-2.3.0}/CITATION.md +0 -0
  199. {photutils-2.2.0 → photutils-2.3.0}/CODE_OF_CONDUCT.rst +0 -0
  200. {photutils-2.2.0 → photutils-2.3.0}/CONTRIBUTING.rst +0 -0
  201. {photutils-2.2.0 → photutils-2.3.0}/LICENSE.rst +0 -0
  202. {photutils-2.2.0 → photutils-2.3.0}/codecov.yml +0 -0
  203. {photutils-2.2.0 → photutils-2.3.0}/docs/Makefile +0 -0
  204. {photutils-2.2.0 → photutils-2.3.0}/docs/_static/custom.css +0 -0
  205. {photutils-2.2.0 → photutils-2.3.0}/docs/_static/photutils_logo.ico +0 -0
  206. {photutils-2.2.0 → photutils-2.3.0}/docs/_static/photutils_logo_dark_plain_path.svg +0 -0
  207. {photutils-2.2.0 → photutils-2.3.0}/docs/_static/photutils_logo_light_plain_path.svg +0 -0
  208. {photutils-2.2.0 → photutils-2.3.0}/docs/changelog.rst +0 -0
  209. {photutils-2.2.0/docs/getting_started → photutils-2.3.0/docs/development}/contributing.rst +0 -0
  210. {photutils-2.2.0/docs/getting_started → photutils-2.3.0/docs/development}/contributors.rst +0 -0
  211. {photutils-2.2.0 → photutils-2.3.0}/docs/development/license.rst +0 -0
  212. {photutils-2.2.0 → photutils-2.3.0}/docs/development/releasing.rst +0 -0
  213. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/citation.rst +0 -0
  214. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/overview.rst +0 -0
  215. {photutils-2.2.0 → photutils-2.3.0}/docs/getting_started/pixel_conventions.rst +0 -0
  216. {photutils-2.2.0 → photutils-2.3.0}/docs/make.bat +0 -0
  217. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/aperture_api.rst +0 -0
  218. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/background_api.rst +0 -0
  219. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/centroids_api.rst +0 -0
  220. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/datasets_api.rst +0 -0
  221. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/detection_api.rst +0 -0
  222. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/geometry_api.rst +0 -0
  223. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/isophote_api.rst +0 -0
  224. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/morphology_api.rst +0 -0
  225. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/profiles_api.rst +0 -0
  226. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/psf_api.rst +0 -0
  227. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/psf_matching_api.rst +0 -0
  228. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/segmentation_api.rst +0 -0
  229. {photutils-2.2.0 → photutils-2.3.0}/docs/reference/utils_api.rst +0 -0
  230. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/aperture.rst +0 -0
  231. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/background.rst +0 -0
  232. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/datasets.rst +0 -0
  233. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/epsf.rst +0 -0
  234. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/geometry.rst +0 -0
  235. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/isophote.rst +0 -0
  236. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/isophote_faq.rst +0 -0
  237. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/morphology.rst +0 -0
  238. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/psf_matching.rst +0 -0
  239. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/segmentation.rst +0 -0
  240. {photutils-2.2.0 → photutils-2.3.0}/docs/user_guide/utils.rst +0 -0
  241. {photutils-2.2.0 → photutils-2.3.0}/photutils/__init__.py +0 -0
  242. {photutils-2.2.0 → photutils-2.3.0}/photutils/_compiler.c +0 -0
  243. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/__init__.py +0 -0
  244. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_bounding_box.py +0 -0
  245. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_circle.py +0 -0
  246. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_ellipse.py +0 -0
  247. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_mask.py +0 -0
  248. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_rectangle.py +0 -0
  249. {photutils-2.2.0 → photutils-2.3.0}/photutils/aperture/tests/test_stats.py +0 -0
  250. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/tests/__init__.py +0 -0
  251. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/tests/test_core.py +0 -0
  252. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/tests/test_interpolators.py +0 -0
  253. {photutils-2.2.0 → photutils-2.3.0}/photutils/background/tests/test_local_background.py +0 -0
  254. {photutils-2.2.0 → photutils-2.3.0}/photutils/centroids/tests/__init__.py +0 -0
  255. {photutils-2.2.0 → photutils-2.3.0}/photutils/conftest.py +0 -0
  256. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/data/100gaussians_params.ecsv +0 -0
  257. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/data/4gaussians_params.ecsv +0 -0
  258. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/__init__.py +0 -0
  259. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_examples.py +0 -0
  260. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_load.py +0 -0
  261. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_noise.py +0 -0
  262. {photutils-2.2.0 → photutils-2.3.0}/photutils/datasets/tests/test_wcs.py +0 -0
  263. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/__init__.py +0 -0
  264. {photutils-2.2.0 → photutils-2.3.0}/photutils/detection/tests/conftest.py +0 -0
  265. {photutils-2.2.0 → photutils-2.3.0}/photutils/extern/biweight.py +0 -0
  266. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/circular_overlap.pyx +0 -0
  267. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/core.pxd +0 -0
  268. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/core.pyx +0 -0
  269. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/elliptical_overlap.pyx +0 -0
  270. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/rectangular_overlap.pyx +0 -0
  271. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/tests/__init__.py +0 -0
  272. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/tests/test_circular_overlap_grid.py +0 -0
  273. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/tests/test_elliptical_overlap_grid.py +0 -0
  274. {photutils-2.2.0 → photutils-2.3.0}/photutils/geometry/tests/test_rectangular_overlap_grid.py +0 -0
  275. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/__init__.py +0 -0
  276. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/M51_table.fits +0 -0
  277. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/README.rst +0 -0
  278. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/minimum_radius_test.fits +0 -0
  279. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/synth_highsnr_table.fits +0 -0
  280. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/synth_lowsnr_table.fits +0 -0
  281. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/synth_table.fits +0 -0
  282. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/synth_table_mean.fits +0 -0
  283. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/data/synth_table_mean.txt +0 -0
  284. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_ellipse.py +0 -0
  285. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_fitter.py +0 -0
  286. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_geometry.py +0 -0
  287. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_harmonics.py +0 -0
  288. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_integrator.py +0 -0
  289. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_isophote.py +0 -0
  290. {photutils-2.2.0 → photutils-2.3.0}/photutils/isophote/tests/test_sample.py +0 -0
  291. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/tests/__init__.py +0 -0
  292. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/tests/test_core.py +0 -0
  293. {photutils-2.2.0 → photutils-2.3.0}/photutils/morphology/tests/test_non_parametric.py +0 -0
  294. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/tests/__init__.py +0 -0
  295. {photutils-2.2.0 → photutils-2.3.0}/photutils/profiles/tests/test_curve_of_growth.py +0 -0
  296. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/tests/__init__.py +0 -0
  297. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/tests/test_fourier.py +0 -0
  298. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/matching/tests/test_windows.py +0 -0
  299. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/__init__.py +0 -0
  300. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/STDPSF_ACSWFC_F814W_mock.fits +0 -0
  301. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/STDPSF_NRCA1_F150W_mock.fits +0 -0
  302. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/STDPSF_NRCSW_F150W_mock.fits +0 -0
  303. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/STDPSF_WFC3UV_F814W_mock.fits +0 -0
  304. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/STDPSF_WFPC2_F814W_mock.fits +0 -0
  305. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/nircam_nrca1_f200w_fovp101_samp4_npsf16_mock.fits +0 -0
  306. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/nircam_nrca1_f200w_fovp101_samp4_npsf4_mock.fits +0 -0
  307. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/nircam_nrca5_f444w_fovp101_samp4_npsf4_mock.fits +0 -0
  308. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/data/nircam_nrcb4_f150w_fovp101_samp4_npsf1_mock.fits +0 -0
  309. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_epsf_stars.py +0 -0
  310. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_groupers.py +0 -0
  311. {photutils-2.2.0 → photutils-2.3.0}/photutils/psf/tests/test_simulation.py +0 -0
  312. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/__init__.py +0 -0
  313. {photutils-2.2.0 → photutils-2.3.0}/photutils/segmentation/tests/test_utils.py +0 -0
  314. {photutils-2.2.0 → photutils-2.3.0}/photutils/tests/__init__.py +0 -0
  315. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/__init__.py +0 -0
  316. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_colormaps.py +0 -0
  317. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_convolution.py +0 -0
  318. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_cutouts.py +0 -0
  319. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_errors.py +0 -0
  320. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_footprints.py +0 -0
  321. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_misc.py +0 -0
  322. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_moments.py +0 -0
  323. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_parameters.py +0 -0
  324. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_quantity_helpers.py +0 -0
  325. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_round.py +0 -0
  326. {photutils-2.2.0 → photutils-2.3.0}/photutils/utils/tests/test_stats.py +0 -0
  327. {photutils-2.2.0 → photutils-2.3.0}/photutils.egg-info/dependency_links.txt +0 -0
  328. {photutils-2.2.0 → photutils-2.3.0}/photutils.egg-info/not-zip-safe +0 -0
  329. {photutils-2.2.0 → photutils-2.3.0}/photutils.egg-info/top_level.txt +0 -0
  330. {photutils-2.2.0 → photutils-2.3.0}/setup.cfg +0 -0
@@ -35,7 +35,7 @@ jobs:
35
35
  matrix:
36
36
  include:
37
37
  - os: ubuntu-latest
38
- python: '3.12'
38
+ python: '3.13'
39
39
  tox_env: 'linkcheck'
40
40
  allow_failure: false
41
41
  prefix: ''
@@ -51,9 +51,10 @@ jobs:
51
51
  - name: Check out repository
52
52
  uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
53
53
  with:
54
+ persist-credentials: false
54
55
  fetch-depth: 0
55
56
  - name: Set up Python ${{ matrix.python }}
56
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
57
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
57
58
  with:
58
59
  python-version: ${{ matrix.python }}
59
60
  allow-prereleases: true
@@ -69,7 +70,7 @@ jobs:
69
70
  run: python -m tox -e ${{ matrix.tox_env }} -- ${{ matrix.toxposargs }}
70
71
  - name: Upload coverage to codecov
71
72
  if: ${{ contains(matrix.tox_env, '-cov') }}
72
- uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
73
+ uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
73
74
  with:
74
75
  files: ./coverage.xml
75
76
  verbose: true
@@ -37,7 +37,7 @@ jobs:
37
37
  matrix:
38
38
  include:
39
39
  - os: ubuntu-latest
40
- python: '3.12'
40
+ python: '3.13'
41
41
  tox_env: 'py312-test-alldeps-devinfra'
42
42
  allow_failure: false
43
43
 
@@ -45,9 +45,10 @@ jobs:
45
45
  - name: Check out repository
46
46
  uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
47
47
  with:
48
+ persist-credentials: false
48
49
  fetch-depth: 0
49
50
  - name: Set up Python ${{ matrix.python }}
50
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
51
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
51
52
  with:
52
53
  python-version: ${{ matrix.python }}
53
54
  - name: Install base dependencies
@@ -84,8 +85,9 @@ jobs:
84
85
  steps:
85
86
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
86
87
  with:
88
+ persist-credentials: false
87
89
  fetch-depth: 0
88
- - uses: uraimo/run-on-arch-action@5397f9e30a9b62422f302092631c99ae1effcd9e # v2.8.1
90
+ - uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # v3.0.1
89
91
  name: Run tests
90
92
  id: build
91
93
  with:
@@ -123,7 +125,7 @@ jobs:
123
125
  python3 -m venv --system-site-packages tests
124
126
  source tests/bin/activate
125
127
  # cython and pyerfa versions in ubuntu repos are too old currently
126
- pip install -U cython
128
+ pip install -U cython setuptools packaging
127
129
  pip install -U --no-build-isolation pyerfa
128
130
  ASTROPY_USE_SYSTEM_ALL=1 pip3 install -v --no-build-isolation -e .[test]
129
131
  pip3 list
@@ -42,33 +42,26 @@ jobs:
42
42
  allow_failure: false
43
43
  prefix: ''
44
44
 
45
- - os: macos-latest
45
+ - os: ubuntu-latest
46
46
  python: '3.12'
47
47
  tox_env: 'py312-test-alldeps'
48
48
  allow_failure: false
49
49
  prefix: ''
50
50
 
51
- - os: macos-14
52
- python: '3.12'
53
- tox_env: 'py312-test-alldeps'
54
- allow_failure: false
55
- prefix: 'M1'
56
-
57
- - os: windows-latest
58
- python: '3.12'
59
- tox_env: 'py312-test-alldeps'
51
+ - os: macos-latest
52
+ python: '3.13'
53
+ tox_env: 'py313-test-alldeps'
60
54
  allow_failure: false
61
55
  prefix: ''
62
56
 
63
- - os: ubuntu-latest
64
- python: '3.12'
65
- tox_env: 'py312-test'
66
- toxposargs: --remote-data=any
57
+ - os: windows-latest
58
+ python: '3.13'
59
+ tox_env: 'py313-test-alldeps'
67
60
  allow_failure: false
68
61
  prefix: ''
69
62
 
70
63
  - os: ubuntu-latest
71
- python: '3.12'
64
+ python: '3.13'
72
65
  tox_env: 'py312-test-alldeps-cov'
73
66
  toxposargs: --remote-data=any
74
67
  allow_failure: false
@@ -76,32 +69,34 @@ jobs:
76
69
 
77
70
  # cannot use alldeps: rasterio does not have a arm64 wheel
78
71
  - os: ubuntu-24.04-arm
79
- python: '3.12'
80
- tox_env: 'py312-test'
72
+ python: '3.13'
73
+ tox_env: 'py313-test'
81
74
  allow_failure: false
82
75
  prefix: ''
83
76
 
77
+ # test without all dependencies
84
78
  - os: ubuntu-latest
85
- python: '3.12'
86
- tox_env: 'codestyle'
79
+ python: '3.13'
80
+ tox_env: 'py313-test'
81
+ toxposargs: --remote-data=any
87
82
  allow_failure: false
88
83
  prefix: ''
89
84
 
90
85
  - os: ubuntu-latest
91
- python: '3.12'
92
- tox_env: 'pep517'
86
+ python: '3.13'
87
+ tox_env: 'codestyle'
93
88
  allow_failure: false
94
89
  prefix: ''
95
90
 
96
91
  - os: ubuntu-latest
97
- python: '3.12'
98
- tox_env: 'bandit'
92
+ python: '3.13'
93
+ tox_env: 'pep517'
99
94
  allow_failure: false
100
95
  prefix: ''
101
96
 
102
97
  - os: ubuntu-latest
103
98
  python: '3.13'
104
- tox_env: 'py313-test-alldeps'
99
+ tox_env: 'bandit'
105
100
  allow_failure: false
106
101
  prefix: ''
107
102
 
@@ -116,9 +111,10 @@ jobs:
116
111
  - name: Check out repository
117
112
  uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
118
113
  with:
114
+ persist-credentials: false
119
115
  fetch-depth: 0
120
116
  - name: Set up Python ${{ matrix.python }}
121
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
117
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
122
118
  with:
123
119
  python-version: ${{ matrix.python }}
124
120
  allow-prereleases: true
@@ -134,7 +130,7 @@ jobs:
134
130
  run: python -m tox -e ${{ matrix.tox_env }} -- -n=2 ${{ matrix.toxposargs }}
135
131
  - name: Upload coverage to codecov
136
132
  if: ${{ contains(matrix.tox_env, '-cov') }}
137
- uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
133
+ uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
138
134
  with:
139
135
  files: ./coverage.xml
140
136
  verbose: true
@@ -44,6 +44,9 @@ jobs:
44
44
  steps:
45
45
  - name: Checkout repository
46
46
  uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
47
+ with:
48
+ persist-credentials: false
49
+ fetch-depth: 0
47
50
 
48
51
  # Initializes the CodeQL tools for scanning.
49
52
  - name: Initialize CodeQL
@@ -32,7 +32,7 @@ jobs:
32
32
  permissions:
33
33
  contents: none
34
34
 
35
- uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish.yml@8c0fde6f7e926df6ed7057255d29afa9c1ad5320 # v1.16.0
35
+ uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish.yml@28e947497bed4d6ec3fa1d66d198e95a1d17bc63 # v2.2.1
36
36
 
37
37
  if: (github.repository == 'astropy/photutils' && (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Build all wheels')))
38
38
  with:
@@ -43,23 +43,14 @@ jobs:
43
43
  test_command: pytest -p no:warnings --pyargs photutils
44
44
  targets: |
45
45
  # Linux wheels
46
- - cp311-manylinux_x86_64
47
- - cp312-manylinux_x86_64
48
- - cp313-manylinux_x86_64
46
+ - cp*-manylinux_x86_64
49
47
 
50
48
  # MacOS X wheels
51
- - cp311*macosx_x86_64
52
- - cp312*macosx_x86_64
53
- - cp313*macosx_x86_64
54
-
55
- - cp311*macosx_arm64
56
- - cp312*macosx_arm64
57
- - cp313*macosx_arm64
49
+ - cp*-macosx_x86_64
50
+ - cp*-macosx_arm64
58
51
 
59
52
  # Windows wheels
60
- - cp311*win_amd64
61
- - cp312*win_amd64
62
- - cp313*win_amd64
53
+ - cp*-win_amd64
63
54
 
64
55
  # Developer wheels
65
56
  upload_to_anaconda: ${{ (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') }}
@@ -4,7 +4,7 @@ ci:
4
4
 
5
5
  repos:
6
6
  - repo: https://github.com/pre-commit/pre-commit-hooks
7
- rev: v5.0.0
7
+ rev: v6.0.0
8
8
  hooks:
9
9
  - id: check-added-large-files
10
10
  # Prevent giant files from being committed.
@@ -55,18 +55,18 @@ repos:
55
55
  # Enforce that all noqa annotations always occur with specific codes.
56
56
 
57
57
  - repo: https://github.com/astral-sh/ruff-pre-commit
58
- rev: "v0.9.4"
58
+ rev: "v0.12.11"
59
59
  hooks:
60
60
  - id: ruff
61
61
  args: ["--fix", "--show-fixes"]
62
62
 
63
63
  - repo: https://github.com/scientific-python/cookie
64
- rev: 2025.01.22
64
+ rev: 2025.05.02
65
65
  hooks:
66
66
  - id: sp-repo-review
67
67
 
68
68
  - repo: https://github.com/pycqa/isort
69
- rev: 6.0.0
69
+ rev: 6.0.1
70
70
  hooks:
71
71
  - id: isort
72
72
  name: isort (python)
@@ -77,7 +77,7 @@ repos:
77
77
  additional_dependencies: [toml]
78
78
 
79
79
  - repo: https://github.com/PyCQA/flake8
80
- rev: 7.1.1
80
+ rev: 7.3.0
81
81
  hooks:
82
82
  - id: flake8
83
83
  args: ["--ignore", "E501,W503"]
@@ -86,26 +86,35 @@ repos:
86
86
  rev: v2.4.1
87
87
  hooks:
88
88
  - id: codespell
89
- args: ["--write-changes", "--ignore-words-list", "exten, conver, fom"]
89
+ args: ["--write-changes"]
90
90
  additional_dependencies:
91
91
  - tomli
92
92
 
93
93
  - repo: https://github.com/numpy/numpydoc
94
- rev: v1.8.0
94
+ rev: v1.9.0
95
95
  hooks:
96
96
  - id: numpydoc-validation
97
97
  exclude: "extern/"
98
98
 
99
- # temporarily use commit from master branch until the next release
100
- # see https://github.com/PyCQA/docformatter/pull/287
99
+ # Formats docstrings to follow PEP 257
101
100
  - repo: https://github.com/PyCQA/docformatter
102
- rev: 06907d0267368b49b9180eed423fae5697c1e909
101
+ rev: v1.7.7
103
102
  hooks:
104
103
  - id: docformatter
105
- additional_dependencies: [tomli]
106
104
  args: [--in-place, --config, ./pyproject.toml]
107
105
  exclude: "extern/"
108
106
 
107
+ - repo: https://github.com/woodruffw/zizmor-pre-commit
108
+ rev: v1.12.1
109
+ hooks:
110
+ - id: zizmor
111
+
112
+ - repo: https://github.com/sphinx-contrib/sphinx-lint
113
+ rev: v1.0.0
114
+ hooks:
115
+ - id: sphinx-lint
116
+ exclude: "(docs/_build/|photutils/extern/)"
117
+
109
118
  # - repo: https://github.com/MarcoGorelli/absolufy-imports
110
119
  # rev: v0.3.1
111
120
  # hooks:
@@ -5,7 +5,7 @@ build:
5
5
  apt_packages:
6
6
  - graphviz
7
7
  tools:
8
- python: "3.12"
8
+ python: "3.13"
9
9
  jobs:
10
10
  post_checkout:
11
11
  - git fetch --shallow-since=2023-05-01 || true
@@ -1,3 +1,180 @@
1
+ 2.3.0 (2025-09-15)
2
+ ------------------
3
+
4
+ General
5
+ ^^^^^^^
6
+
7
+ - The minimum required NumPy is now 1.25. [#2043]
8
+
9
+ - The minimum required SciPy is now 1.11.1. [#2043]
10
+
11
+ - The minimum required Matplotlib is now 3.8. [#2043]
12
+
13
+ - The minimum required scikit-image is now 0.21. [#2043]
14
+
15
+ New Features
16
+ ^^^^^^^^^^^^
17
+
18
+ - ``photutils.isophote``
19
+
20
+ - ``build_ellipse_model`` is now Cythonized and considerably faster.
21
+ [#2046]
22
+
23
+ - ``build_ellipse_model`` also has an additional optional keyword
24
+ argument ``sma_interval``, which was previously hardcoded. [#2046]
25
+
26
+ - ``photutils.psf``
27
+
28
+ - ``PSFPhotometry`` and ``IterativePSFPhotometry`` now raise an error
29
+ if the input ``error`` array contains non-finite or zero values.
30
+ [#2022]
31
+
32
+ - ``GriddedPSFModel`` can now be used with a single input ePSF model,
33
+ which will be equivalent to ``ImagePSF``. [#2034]
34
+
35
+ - The ``finder`` callable input to ``PSFPhotometry`` and
36
+ ``IterativePSFPhotometry`` is no longer restricted to have x and y
37
+ column names of ``'xcentroid'`` and ``'ycentroid'``. The allowed
38
+ column names are now the same as those allowed in the
39
+ ``init_params`` table. [#2072]
40
+
41
+ - Added a ``group_warning_threshold`` keyword to ``PSFPhotometry`` and
42
+ ``IterativePSFPhotometry``. [#2081]
43
+
44
+ - The ``PSFPhotometry`` and ``IterativePSFPhotometry`` classes no
45
+ longer fail for invalid sources, defined as those that have no
46
+ overlap with the input data, are completely masked, or have too few
47
+ unmasked pixels for a fit. These classes have new flags (64, 128,
48
+ 256, respectively) for these invalid conditions. [#2084, #2085]
49
+
50
+ - The ``PSFPhotometry`` and ``IterativePSFPhotometry`` classes have
51
+ new ``results_to_init_params`` and ``results_to_model_params``
52
+ methods for outputting fit results in different formats. [#2084]
53
+
54
+ - When using Astropy 7.0+, the ``PSFPhotometry`` and
55
+ ``IterativePSFPhotometry`` ``fitter`` object now modifies the PSF
56
+ model in place instead of creating a copy, improving performance and
57
+ significantly reducing memory usage in some cases. [#2093]
58
+
59
+ - ``PSFPhotometry`` and ``IterativePSFPhotometry`` now return a
60
+ reduced chi-squared statistic (``reduced_chi2`` column in the
61
+ results table). [#2086]
62
+
63
+ - The PSF photometry classes now use a dynamically generated "flat"
64
+ model instead of a compound model for grouped sources. This
65
+ eliminates recursion limits and significantly reduces memory usage
66
+ for large groups. [#2100]
67
+
68
+ - ``photutils.segmentation``
69
+
70
+ - An optional ``array`` keyword was added to the ``SourceCatalog``
71
+ ``make_cutouts`` method. [#2023]
72
+
73
+ - Added a ``group`` keyword to the ``SegmentationImage``
74
+ ``to_regions`` method. [#2060, #2065]
75
+
76
+ - Added a ``decode_psf_flags`` utility function for decoding PSF
77
+ photometry bit flags. [#2090]
78
+
79
+ - Added a ``PSF_FLAGS`` object to hold all PSF photometry bit flags in
80
+ one place. PSF_FLAGS provides readable, named constants for each bit
81
+ flag and helper utilities for decoding bit flags. [#2091]
82
+
83
+ Bug Fixes
84
+ ^^^^^^^^^
85
+
86
+ - ``photutils.centroids``
87
+
88
+ - Fixed an issue with the initial Gaussian theta units in
89
+ ``centroid_2dg``. [#2013]
90
+
91
+ - Fixed a corner-case issue where zero-sum arrays with ndim > 2 input
92
+ to ``centroid_com`` would return only two np.nan coordinates instead
93
+ of matching the dimensionality of the input array. [#2045]
94
+
95
+ - ``photutils.datasets``
96
+
97
+ - Fixed a bug in ``make_model_image`` where the output image would not
98
+ have units in the case where the input params had units and none
99
+ of the models overlapped the image shape. [#2082]
100
+
101
+ - Fixed a bug in ``make_model_image`` where an error would be raised
102
+ if any row in the input parameters table contained non-finite model
103
+ parameters. Such sources are now silently ignored. [#2083]
104
+
105
+ - ``photutils.psf``
106
+
107
+ - Fixed a bug in ``fit_2dgaussian`` and ``fit_fwhm`` where the fit
108
+ would fail if there were NaN values in the input data. [#2030]
109
+
110
+ - Fixed the check in ``GriddedPSFModel`` for rectangular pixel grids.
111
+ [#2035]
112
+
113
+ - Fixed a bug in ``PSFPhotometry`` where the ``'group_id'`` column
114
+ would be ignored if included in the ``init_params`` table. [#2070]
115
+
116
+ - Fixed a bug in ``PSFPhotometry`` where the output ``flux_err``
117
+ column would not have units if the input data had units and the flux
118
+ model parameter was fixed in value. [#2072]
119
+
120
+ - Fixed a bug in ``PSFPhotometry`` and ``IterativePSFPhotometry``
121
+ where an error would be raised if the x or y columns in
122
+ ``init_params`` had units. [#2079]
123
+
124
+ - Fixed a bug in ``PSFPhotometry`` and ``IterativePSFPhotometry`` for
125
+ the boundary conditions where flag=2 would be set. [#2080]
126
+
127
+ - Fixed a bug in ``EPSFBuilder`` where the output PSF would have the
128
+ wrong shape if the input ``stars`` were non-square cutouts. [#2089,
129
+ #2092]
130
+
131
+ - Fixed a bug in the calculation of the ``PSFPhotometry`` and
132
+ ``IterativePSFPhotometry`` ``qfit`` and ``cfit`` to not include the
133
+ fit weights. [#2099]
134
+
135
+ - ``photutils.segmentation``
136
+
137
+ - Fixed an issue where a newly-defined extra property of a
138
+ ``SourceCatalog`` with ``overwrite=True`` would not be added to
139
+ the ``extra_properties`` attribute. [#2039]
140
+
141
+ - Fixed an issue where the ``SegmentationImage`` ``segments``
142
+ attribute would fail if any source segment was non-contiguous.
143
+ [#2060]
144
+
145
+ API Changes
146
+ ^^^^^^^^^^^
147
+
148
+ - ``photutils.background``
149
+
150
+ - An explicit ``ValueError`` is now raised if the input ``data`` to
151
+ ``Background2D`` contains all non-finite values. [#2062]
152
+
153
+ - ``photutils.psf``
154
+
155
+ - The ``GriddedPSFModel`` ``data`` and ``grid_xypos`` attributes are
156
+ now read-only. [#2036]
157
+
158
+ - The ``PSFPhotometry`` ``fit_param`` attribute is now deprecated. Use
159
+ the new ``results_to_init_params`` method instead. [#2084]
160
+
161
+ - The deprecated ``PSFPhotometry`` ``fit_results`` attribute has been
162
+ removed. [#2084]
163
+
164
+ - ``photutils.segmentation``
165
+
166
+ - The ``SegmentationImage`` ``polygons`` list may now include either
167
+ Shapely ``Polygon`` or ``MultiPolygon`` (non-contiguous) objects.
168
+ [#2060]
169
+
170
+ - The ``SegmentationImage`` ``to_patches`` and ``plot_patches``
171
+ methods now return ``matplotlib.patches.PathPatch`` objects. [#2060]
172
+
173
+ - The ``SegmentationImage`` ``to_regions`` method now returns
174
+ ``PolygonPixelRegion`` regions that have the segment label stored in
175
+ the object ``meta`` dictionary. [#2060]
176
+
177
+
1
178
  2.2.0 (2025-02-18)
2
179
  ------------------
3
180
 
@@ -62,13 +239,13 @@ New Features
62
239
  - ``photutils.datasets``
63
240
 
64
241
  - A ``params_map`` keyword was added to ``make_model_image`` to allow
65
- a custom mapping between model parameter names and columns names in
242
+ a custom mapping between model parameter names and column names in
66
243
  the parameter table. [#1994]
67
244
 
68
245
  - ``photutils.detection``
69
246
 
70
247
  - The ``find_peaks`` ``border_width`` keyword can now accept two
71
- values, indicating the border width along the the y and x edges,
248
+ values, indicating the border width along the y and x edges,
72
249
  respectively. [#1957]
73
250
 
74
251
  - ``photutils.morphology``
@@ -95,7 +272,7 @@ Bug Fixes
95
272
  - Fixed a bug to ensure that the dtype of the ``SegmentationImage``
96
273
  ``labels`` always matches the image dtype. [#1986]
97
274
 
98
- - Fixed a issue with the source labels after source deblending when
275
+ - Fixed an issue with the source labels after source deblending when
99
276
  using ``relabel=False``. [#1988]
100
277
 
101
278
  API Changes
@@ -298,7 +475,7 @@ New Features
298
475
 
299
476
  - Improved the accuracy of the progress bar in ``deblend_sources`` and
300
477
  ``SourceFinder`` when using multiprocessing. Also added the source
301
- ID label number to the progress bar. [#1925, 1926]
478
+ ID label number to the progress bar. [#1925, #1926]
302
479
 
303
480
  Bug Fixes
304
481
  ^^^^^^^^^
@@ -1,43 +1,13 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: photutils
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: An Astropy package for source detection and photometry
5
5
  Author-email: Photutils Developers <astropy.team@gmail.com>
6
- License: Copyright (c) 2011-2025, Photutils Developers
7
- All rights reserved.
8
-
9
- Redistribution and use in source and binary forms, with or without
10
- modification, are permitted provided that the following conditions are
11
- met:
12
-
13
- 1. Redistributions of source code must retain the above copyright
14
- notice, this list of conditions and the following disclaimer.
15
-
16
- 2. Redistributions in binary form must reproduce the above copyright
17
- notice, this list of conditions and the following disclaimer in the
18
- documentation and/or other materials provided with the distribution.
19
-
20
- 3. Neither the name of the copyright holder nor the names of its
21
- contributors may be used to endorse or promote products derived from
22
- this software without specific prior written permission.
23
-
24
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
-
6
+ License-Expression: BSD-3-Clause
36
7
  Project-URL: Homepage, https://github.com/astropy/photutils
37
8
  Project-URL: Documentation, https://photutils.readthedocs.io/en/stable/
38
9
  Keywords: astronomy,astrophysics,photometry,aperture,psf,source detection,background,segmentation,centroids,isophote,morphology,radial profiles
39
10
  Classifier: Intended Audience :: Science/Research
40
- Classifier: License :: OSI Approved :: BSD License
41
11
  Classifier: Natural Language :: English
42
12
  Classifier: Operating System :: OS Independent
43
13
  Classifier: Programming Language :: Cython
@@ -47,26 +17,31 @@ Classifier: Topic :: Scientific/Engineering :: Astronomy
47
17
  Requires-Python: >=3.11
48
18
  Description-Content-Type: text/x-rst
49
19
  License-File: LICENSE.rst
50
- Requires-Dist: numpy>=1.24
20
+ Requires-Dist: numpy>=1.25
51
21
  Requires-Dist: astropy>=5.3
52
- Requires-Dist: scipy>=1.10
22
+ Requires-Dist: scipy>=1.11.1
53
23
  Provides-Extra: all
54
- Requires-Dist: matplotlib>=3.7; extra == "all"
24
+ Requires-Dist: matplotlib>=3.8; extra == "all"
55
25
  Requires-Dist: regions>=0.9; extra == "all"
56
- Requires-Dist: scikit-image>=0.20; extra == "all"
26
+ Requires-Dist: scikit-image>=0.21; extra == "all"
57
27
  Requires-Dist: gwcs>=0.20; extra == "all"
58
- Requires-Dist: bottleneck; extra == "all"
59
- Requires-Dist: tqdm; extra == "all"
60
- Requires-Dist: rasterio; extra == "all"
61
- Requires-Dist: shapely; extra == "all"
28
+ Requires-Dist: bottleneck>=1.3.6; extra == "all"
29
+ Requires-Dist: tqdm>=4.65; extra == "all"
30
+ Requires-Dist: rasterio>=1.3.7; extra == "all"
31
+ Requires-Dist: shapely>=2.0.0; extra == "all"
62
32
  Provides-Extra: test
63
33
  Requires-Dist: pytest-astropy>=0.11; extra == "test"
64
34
  Requires-Dist: pytest-xdist>=2.5.0; extra == "test"
35
+ Requires-Dist: tox>4.0; extra == "test"
65
36
  Provides-Extra: docs
66
37
  Requires-Dist: photutils[all]; extra == "docs"
67
38
  Requires-Dist: sphinx; extra == "docs"
68
39
  Requires-Dist: sphinx_design; extra == "docs"
69
40
  Requires-Dist: sphinx-astropy[confv2]>=1.9.1; extra == "docs"
41
+ Provides-Extra: dev
42
+ Requires-Dist: photutils[docs,test]; extra == "dev"
43
+ Requires-Dist: pre-commit>4.0; extra == "dev"
44
+ Dynamic: license-file
70
45
 
71
46
  =========
72
47
  Photutils
@@ -81,7 +56,7 @@ and key functionality for detecting and performing photometry of
81
56
  astronomical sources. Tools are provided for background estimation,
82
57
  star finding, source detection and extraction, aperture photometry,
83
58
  PSF photometry, image segmentation, centroids, radial profiles,
84
- and elliptical isophote fitting. It is an a `coordinated package
59
+ and elliptical isophote fitting. It is a `coordinated package
85
60
  <https://www.astropy.org/affiliated/index.html>`_ of `Astropy`_ and
86
61
  integrates well with other Astropy packages, making it a powerful tool
87
62
  for astronomical image analysis.
@@ -11,7 +11,7 @@ and key functionality for detecting and performing photometry of
11
11
  astronomical sources. Tools are provided for background estimation,
12
12
  star finding, source detection and extraction, aperture photometry,
13
13
  PSF photometry, image segmentation, centroids, radial profiles,
14
- and elliptical isophote fitting. It is an a `coordinated package
14
+ and elliptical isophote fitting. It is a `coordinated package
15
15
  <https://www.astropy.org/affiliated/index.html>`_ of `Astropy`_ and
16
16
  integrates well with other Astropy packages, making it a powerful tool
17
17
  for astronomical image analysis.
@@ -100,18 +100,27 @@ dev = 'dev' in release
100
100
 
101
101
  # -- Options for HTML output --------------------------------------------------
102
102
 
103
- html_theme_options.update( # noqa: F405
104
- {
105
- 'github_url': 'https://github.com/astropy/photutils',
106
- 'header_links_before_dropdown': 6,
107
- 'navigation_with_keys': False,
108
- 'use_edit_page_button': False,
109
- 'logo': {
110
- 'image_light': 'photutils_logo_light_plain_path.svg',
111
- 'image_dark': 'photutils_logo_dark_plain_path.svg',
112
- },
113
- }
114
- )
103
+ html_theme_options = {
104
+ 'header_links_before_dropdown': 6,
105
+ 'collapse_navigation': True,
106
+ 'navigation_depth': 2,
107
+ 'show_nav_level': 2,
108
+ 'navigation_with_keys': False,
109
+ 'use_edit_page_button': False,
110
+ 'logo': {
111
+ 'image_light': 'photutils_logo_light_plain_path.svg',
112
+ 'image_dark': 'photutils_logo_dark_plain_path.svg',
113
+ },
114
+ # alternate way to set the logo
115
+ # 'github_url': 'https://github.com/astropy/photutils',
116
+ 'icon_links': [
117
+ {'name': 'GitHub',
118
+ 'url': 'https://github.com/astropy/photutils',
119
+ 'icon': 'fa-brands fa-github',
120
+ 'type': 'fontawesome',
121
+ },
122
+ ],
123
+ }
115
124
 
116
125
  html_title = f'{project} {release}'
117
126
  html_show_sourcelink = False