pyreduce-astro 0.6.0b2__tar.gz → 0.6.0b5__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 (152) hide show
  1. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/PKG-INFO +4 -3
  2. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/hatch_build.py +6 -2
  3. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyproject.toml +28 -7
  4. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/__init__.py +1 -0
  5. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/extract.py +6 -4
  6. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/andes.json +2 -0
  7. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/andes.py +3 -1
  8. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/reduce.py +1 -1
  9. pyreduce_astro-0.6.0b5/pyreduce/settings/settings_ANDES.json +89 -0
  10. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/.gitignore +0 -0
  11. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/LICENSE +0 -0
  12. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/README.md +0 -0
  13. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/__main__.py +0 -0
  14. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/__init__.py +0 -0
  15. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/build_extract.py +0 -0
  16. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/slit_func_2d_xi_zeta_bd.c +0 -0
  17. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/slit_func_2d_xi_zeta_bd.h +0 -0
  18. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/slit_func_bd.c +0 -0
  19. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clib/slit_func_bd.h +0 -0
  20. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/clipnflip.py +0 -0
  21. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/combine_frames.py +0 -0
  22. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/configuration.py +0 -0
  23. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/continuum_normalization.py +0 -0
  24. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/cwrappers.py +0 -0
  25. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/datasets.py +0 -0
  26. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/echelle.py +0 -0
  27. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/estimate_background_scatter.py +0 -0
  28. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/extraction_width.py +0 -0
  29. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/__init__.py +0 -0
  30. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/common.json +0 -0
  31. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/common.py +0 -0
  32. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/crires_plus.json +0 -0
  33. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/crires_plus.py +0 -0
  34. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/filters.py +0 -0
  35. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/harpn.json +0 -0
  36. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/harpn.py +0 -0
  37. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/harps.json +0 -0
  38. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/harps.py +0 -0
  39. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/instrument_info.py +0 -0
  40. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/instrument_schema.json +0 -0
  41. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/jwst_miri.json +0 -0
  42. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/jwst_miri.py +0 -0
  43. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/jwst_niriss.json +0 -0
  44. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/jwst_niriss.py +0 -0
  45. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/lick_apf.json +0 -0
  46. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/lick_apf.py +0 -0
  47. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/mcdonald.json +0 -0
  48. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/mcdonald.py +0 -0
  49. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/metis_ifu.json +0 -0
  50. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/metis_ifu.py +0 -0
  51. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/metis_lss.json +0 -0
  52. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/metis_lss.py +0 -0
  53. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/micado.json +0 -0
  54. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/micado.py +0 -0
  55. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/neid.json +0 -0
  56. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/neid.py +0 -0
  57. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/nirspec.json +0 -0
  58. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/nirspec.py +0 -0
  59. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/nte.json +0 -0
  60. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/nte.py +0 -0
  61. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/uves.json +0 -0
  62. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/uves.py +0 -0
  63. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/xshooter.json +0 -0
  64. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/instruments/xshooter.py +0 -0
  65. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/make_shear.py +0 -0
  66. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_crires_plus_det1.fits.gz +0 -0
  67. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_crires_plus_det2.fits.gz +0 -0
  68. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_crires_plus_det3.fits.gz +0 -0
  69. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_ctio_chiron.fits.gz +0 -0
  70. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_elodie.fits.gz +0 -0
  71. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_feros3.fits.gz +0 -0
  72. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_flames_giraffe.fits.gz +0 -0
  73. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_harps_blue.fits.gz +0 -0
  74. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_harps_red.fits.gz +0 -0
  75. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_hds_blue.fits.gz +0 -0
  76. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_hds_red.fits.gz +0 -0
  77. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_het_hrs_2x5.fits.gz +0 -0
  78. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_jwst_miri_lrs_slitless.fits.gz +0 -0
  79. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_jwst_niriss_gr700xd.fits.gz +0 -0
  80. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_lick_apf_.fits.gz +0 -0
  81. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_mcdonald.fits.gz +0 -0
  82. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_nes.fits.gz +0 -0
  83. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_nirspec_nirspec.fits.gz +0 -0
  84. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_sarg.fits.gz +0 -0
  85. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_sarg_2x2a.fits.gz +0 -0
  86. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_sarg_2x2b.fits.gz +0 -0
  87. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_subaru_hds_red.fits.gz +0 -0
  88. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_blue.fits.gz +0 -0
  89. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_blue_binned_2_2.fits.gz +0 -0
  90. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_middle.fits.gz +0 -0
  91. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_middle_2x2_split.fits.gz +0 -0
  92. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_middle_binned_2_2.fits.gz +0 -0
  93. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_red.fits.gz +0 -0
  94. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_red_2x2.fits.gz +0 -0
  95. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_red_2x2_split.fits.gz +0 -0
  96. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_uves_red_binned_2_2.fits.gz +0 -0
  97. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/masks/mask_xshooter_nir.fits.gz +0 -0
  98. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/rectify.py +0 -0
  99. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_CRIRES_PLUS.json +0 -0
  100. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_HARPN.json +0 -0
  101. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_HARPS.json +0 -0
  102. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_JWST_MIRI.json +0 -0
  103. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_JWST_NIRISS.json +0 -0
  104. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_LICK_APF.json +0 -0
  105. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_MCDONALD.json +0 -0
  106. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_METIS_IFU.json +0 -0
  107. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_METIS_LSS.json +0 -0
  108. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_MICADO.json +0 -0
  109. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_NEID.json +0 -0
  110. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_NIRSPEC.json +0 -0
  111. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_NTE.json +0 -0
  112. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_UVES.json +0 -0
  113. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_XSHOOTER.json +0 -0
  114. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_pyreduce.json +0 -0
  115. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/settings/settings_schema.json +0 -0
  116. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/tools/__init__.py +0 -0
  117. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/tools/combine.py +0 -0
  118. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/trace_orders.py +0 -0
  119. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/util.py +0 -0
  120. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/MICADO_HK_3arcsec_chip5.npz +0 -0
  121. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/atlas/thar.fits +0 -0
  122. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/atlas/thar_list.txt +0 -0
  123. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/atlas/une.fits +0 -0
  124. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/convert.py +0 -0
  125. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/crires_plus_J1228_Open_det1.npz +0 -0
  126. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/crires_plus_J1228_Open_det2.npz +0 -0
  127. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/crires_plus_J1228_Open_det3.npz +0 -0
  128. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/harpn_harpn_2D.npz +0 -0
  129. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/harps_blue_2D.npz +0 -0
  130. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/harps_blue_pol_2D.npz +0 -0
  131. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/harps_red_2D.npz +0 -0
  132. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/harps_red_pol_2D.npz +0 -0
  133. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/mcdonald.npz +0 -0
  134. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/metis_lss_l_2D.npz +0 -0
  135. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/metis_lss_m_2D.npz +0 -0
  136. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/nirspec_K2.npz +0 -0
  137. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_blue_360nm_2D.npz +0 -0
  138. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_blue_390nm_2D.npz +0 -0
  139. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_blue_437nm_2D.npz +0 -0
  140. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_2x2_2D.npz +0 -0
  141. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_565nm_2D.npz +0 -0
  142. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_580nm_2D.npz +0 -0
  143. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_600nm_2D.npz +0 -0
  144. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_665nm_2D.npz +0 -0
  145. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_middle_860nm_2D.npz +0 -0
  146. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_red_580nm_2D.npz +0 -0
  147. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_red_600nm_2D.npz +0 -0
  148. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_red_665nm_2D.npz +0 -0
  149. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_red_760nm_2D.npz +0 -0
  150. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/uves_red_860nm_2D.npz +0 -0
  151. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavecal/xshooter_nir.npz +0 -0
  152. {pyreduce_astro-0.6.0b2 → pyreduce_astro-0.6.0b5}/pyreduce/wavelength_calibration.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyreduce-astro
3
- Version: 0.6.0b2
3
+ Version: 0.6.0b5
4
4
  Summary: A data reduction package for echelle spectrographs
5
5
  Project-URL: Homepage, https://github.com/ivh/PyReduce
6
- Project-URL: Documentation, https://pyreduce.readthedocs.io
6
+ Project-URL: Documentation, https://pyreduce-astro.readthedocs.io
7
7
  Project-URL: Repository, https://github.com/ivh/PyReduce
8
8
  Project-URL: Issues, https://github.com/ivh/PyReduce/issues
9
- Author: Ansgar Wehrhahn, Nikolai Piskunov
9
+ Author: Nikolai Piskunov, Ansgar Wehrhahn
10
10
  Author-email: Thomas Marquart <thomas.marquart@astro.uu.se>
11
11
  License: GPL-3.0-or-later
12
12
  License-File: LICENSE
@@ -41,6 +41,7 @@ Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
41
41
  Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
42
42
  Requires-Dist: pytest>=7.4.0; extra == 'dev'
43
43
  Requires-Dist: ruff>=0.8.0; extra == 'dev'
44
+ Requires-Dist: setuptools; extra == 'dev'
44
45
  Requires-Dist: sphinx>=7.2.0; extra == 'dev'
45
46
  Description-Content-Type: text/markdown
46
47
 
@@ -21,6 +21,10 @@ class CustomBuildHook(BuildHookInterface):
21
21
 
22
22
  This method is called by hatchling during the build process.
23
23
  """
24
+ # Mark wheel as platform-specific (not py3-none-any)
25
+ build_data["pure_python"] = False
26
+ build_data["infer_tag"] = True
27
+
24
28
  print("=" * 60)
25
29
  print("Building CFFI extensions for PyReduce")
26
30
  print("=" * 60)
@@ -56,7 +60,7 @@ class CustomBuildHook(BuildHookInterface):
56
60
  try:
57
61
  os.chdir(clib_dir)
58
62
  ffibuilder_vertical.compile(verbose=True)
59
- print(" Vertical extraction extension built successfully\n")
63
+ print("[OK] Vertical extraction extension built successfully\n")
60
64
  finally:
61
65
  os.chdir(old_cwd)
62
66
 
@@ -79,7 +83,7 @@ class CustomBuildHook(BuildHookInterface):
79
83
  try:
80
84
  os.chdir(clib_dir)
81
85
  ffibuilder_curved.compile(verbose=True)
82
- print(" Curved extraction extension built successfully\n")
86
+ print("[OK] Curved extraction extension built successfully\n")
83
87
  finally:
84
88
  os.chdir(old_cwd)
85
89
 
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pyreduce-astro"
7
- version = "0.6.0b2"
7
+ version = "0.6.0b5"
8
8
  requires-python = ">=3.11"
9
9
  description = "A data reduction package for echelle spectrographs"
10
10
  readme = "README.md"
11
11
  authors = [
12
- {name = "Ansgar Wehrhahn"},
13
12
  {name = "Thomas Marquart", email = "thomas.marquart@astro.uu.se"},
14
- {name = "Nikolai Piskunov"}
13
+ {name = "Nikolai Piskunov"},
14
+ {name = "Ansgar Wehrhahn"}
15
15
  ]
16
16
  license = {text = "GPL-3.0-or-later"}
17
17
  classifiers = [
@@ -52,11 +52,12 @@ dev = [
52
52
  "pytest>=7.4.0",
53
53
  "pytest-cov>=4.1.0",
54
54
  "sphinx>=7.2.0",
55
+ "setuptools", # Required for CFFI compilation in tests (Python 3.12+)
55
56
  ]
56
57
 
57
58
  [project.urls]
58
59
  Homepage = "https://github.com/ivh/PyReduce"
59
- Documentation = "https://pyreduce.readthedocs.io"
60
+ Documentation = "https://pyreduce-astro.readthedocs.io"
60
61
  Repository = "https://github.com/ivh/PyReduce"
61
62
  Issues = "https://github.com/ivh/PyReduce/issues"
62
63
 
@@ -79,13 +80,15 @@ include = [
79
80
  "pyreduce/**/*.py",
80
81
  "pyreduce/**/*.c",
81
82
  "pyreduce/**/*.h",
82
- "pyreduce/**/*.so",
83
+ "pyreduce/**/*.so", # Linux/macOS compiled extensions
84
+ "pyreduce/**/*.pyd", # Windows compiled extensions
83
85
  "pyreduce/**/*.json",
84
86
  "pyreduce/**/*.npz",
85
87
  "pyreduce/**/*.sav",
86
88
  ]
87
89
  artifacts = [
88
- "pyreduce/clib/*.so",
90
+ "pyreduce/clib/*.so", # Linux/macOS compiled extensions
91
+ "pyreduce/clib/*.pyd", # Windows compiled extensions
89
92
  ]
90
93
 
91
94
  # Build CFFI extensions via build hook
@@ -147,10 +150,16 @@ known-first-party = ["pyreduce"]
147
150
  [tool.pytest.ini_options]
148
151
  minversion = "7.0"
149
152
  addopts = "-ra -q --strict-markers"
150
- testpaths = ["tests"]
153
+ testpaths = ["test"]
151
154
  python_files = ["test_*.py", "*_test.py"]
152
155
  python_classes = ["Test*"]
153
156
  python_functions = ["test_*"]
157
+ markers = [
158
+ "unit: Fast unit tests with synthetic data (no downloads)",
159
+ "instrument: Integration tests using real instrument datasets",
160
+ "slow: Tests taking >5 seconds",
161
+ "downloads: Tests that download sample datasets",
162
+ ]
154
163
 
155
164
  # Coverage configuration
156
165
  [tool.coverage.run]
@@ -178,3 +187,15 @@ dev = [
178
187
  "pytest-cov>=4.1.0",
179
188
  "sphinx>=7.2.0",
180
189
  ]
190
+
191
+ # cibuildwheel configuration for building platform-specific wheels
192
+ [tool.cibuildwheel]
193
+ # Build for Python 3.11, 3.12, 3.13 on common platforms
194
+ build = "cp311-* cp312-* cp313-*"
195
+
196
+ # Skip musllinux (use manylinux instead) and 32-bit builds
197
+ skip = "*-musllinux_* *-win32 *-manylinux_i686"
198
+
199
+ # Test the built wheels
200
+ test-command = "pytest {project}/test -m unit"
201
+ test-requires = ["pytest"]
@@ -60,6 +60,7 @@ def __getattr__(name):
60
60
  """Lazy load submodules on first access."""
61
61
  if name in ("configuration", "datasets", "reduce", "util"):
62
62
  import importlib
63
+
63
64
  module = importlib.import_module(f".{name}", __name__)
64
65
  globals()[name] = module
65
66
  return module
@@ -405,6 +405,8 @@ def fix_column_range(column_range, orders, extraction_width, nrow, ncol):
405
405
  -------
406
406
  column_range : array[nord, 2]
407
407
  updated column range
408
+ orders : array[nord, degree]
409
+ order tracing coefficients (may have rows removed if no valid pixels)
408
410
  """
409
411
 
410
412
  ix = np.arange(ncol)
@@ -426,7 +428,7 @@ def fix_column_range(column_range, orders, extraction_width, nrow, ncol):
426
428
 
427
429
  if len(points_in_image) == 0:
428
430
  # print(y_bot, y_top,nrow, ncol, points_in_image)
429
- logger.warn(
431
+ logger.warning(
430
432
  f"No pixels are completely within the extraction width for order {i}, removing it."
431
433
  )
432
434
  to_remove += [i]
@@ -452,9 +454,9 @@ def fix_column_range(column_range, orders, extraction_width, nrow, ncol):
452
454
  column_range[0] = column_range[1]
453
455
  column_range[-1] = column_range[-2]
454
456
 
455
- for i in to_remove:
456
- np.delete(column_range, i, axis=0)
457
- np.delete(orders, i, axis=0)
457
+ if to_remove:
458
+ column_range = np.delete(column_range, to_remove, axis=0)
459
+ orders = np.delete(orders, to_remove, axis=0)
458
460
 
459
461
  return column_range, orders
460
462
 
@@ -8,8 +8,10 @@
8
8
  "date_format": "fits",
9
9
  "id_mode": "ESO INS MODE",
10
10
  "id_band": "ESO INS WLEN ID",
11
+ "id_decker": "ESO INS OPTI8 ID",
11
12
  "id_lamp": "ESO INS1 LAMP? ID",
12
13
  "modes": ["SL", "IFU"],
14
+ "deckers": ["Open", "pos1", "pos2"],
13
15
  "bands": ["UBV", "RIZ", "YJH", "K"],
14
16
  "settings": ["B", "V", "R", "IZ", "Y", "J", "H", "K"],
15
17
  "chips": ["det1"],
@@ -45,8 +45,10 @@ class ANDES(Instrument):
45
45
  return modes
46
46
 
47
47
  def parse_mode(self, mode):
48
- pattern = r"([YJHKLM]\d{4})(_(Open|pos1|pos2))?_det(\d)"
48
+ pattern = r"([A-Z]+)(_(Open|pos1|pos2))?_det(\d)"
49
49
  match = re.match(pattern, mode, flags=re.IGNORECASE)
50
+ if not match:
51
+ raise ValueError(f"Invalid mode format: {mode}")
50
52
  band = match.group(1).upper()
51
53
  if match.group(3) is not None:
52
54
  decker = match.group(3).lower().capitalize()
@@ -562,7 +562,7 @@ class Bias(Step):
562
562
  hdus.writeto(
563
563
  self.savefile,
564
564
  overwrite=True,
565
- output_verify="fix", # "silentfix+ignore",
565
+ output_verify="silentfix+ignore",
566
566
  )
567
567
  logger.info("Created master bias file: %s", self.savefile)
568
568
 
@@ -0,0 +1,89 @@
1
+ {
2
+ "__instrument__": "ANDES",
3
+ "instrument": {},
4
+ "bias": {
5
+ "degree": 1
6
+ },
7
+ "flat": {
8
+ "bias_scaling": "exposure_time"
9
+ },
10
+ "orders": {
11
+ "degree": 3,
12
+ "degree_before_merge": 1,
13
+ "filter_size": 100,
14
+ "min_cluster": 200000,
15
+ "border_width": 0,
16
+ "noise": 0,
17
+ "manual": false,
18
+ "auto_merge_threshold": 1,
19
+ "merge_min_threshold": 0.9,
20
+ "bias_scaling": "exposure_time"
21
+ },
22
+ "scatter": {
23
+ "extraction_width": 0.45,
24
+ "border_width": 50,
25
+ "bias_scaling": "exposure_time"
26
+ },
27
+ "norm_flat": {
28
+ "smooth_slitfunction": 2,
29
+ "smooth_spectrum": 0,
30
+ "extraction_width": 100,
31
+ "oversampling": 12,
32
+ "swath_width": 200,
33
+ "threshold": 1000
34
+ },
35
+ "wavecal_master": {
36
+ "extraction_method": "optimal",
37
+ "extraction_width": 100,
38
+ "oversampling": 5,
39
+ "swath_width": 2000,
40
+ "smooth_slitfunction": 1,
41
+ "smooth_spectrum": 1e-7,
42
+ "extraction_cutoff": 20,
43
+ "bias_scaling": "exposure_time"
44
+ },
45
+ "wavecal_init": {
46
+ "element": "UNe",
47
+ "medium": "vac",
48
+ "cutoff": 5,
49
+ "smoothing": 1
50
+ },
51
+ "wavecal": {
52
+ "threshold": 100,
53
+ "closing": 0,
54
+ "dimensionality": "2D",
55
+ "element": null,
56
+ "degree": [5,5],
57
+ "manual": false
58
+ },
59
+ "freq_comb_master": {
60
+ "extraction_width": 10,
61
+ "bias_scaling": "exposure_time"
62
+ },
63
+ "freq_comb": {
64
+ "threshold": 100,
65
+ "dimensionality": "2D",
66
+ "degree": [8, 8]
67
+ },
68
+ "curvature": {
69
+ "peak_threshold": 1,
70
+ "window_width": 15,
71
+ "extraction_width": 100,
72
+ "dimensionality": "2D",
73
+ "degree": [
74
+ 1,
75
+ 1
76
+ ],
77
+ "curv_degree": 1,
78
+ "peak_function": "lorentzian",
79
+ "bias_scaling": "exposure_time"
80
+ },
81
+ "science": {
82
+ "oversampling": 1,
83
+ "extraction_width": 10,
84
+ "swath_width": 300,
85
+ "smooth_slitfunction": 0.1,
86
+ "smooth_spectrum": 0,
87
+ "bias_scaling": "exposure_time"
88
+ }
89
+ }