specula 1.0.0a10__tar.gz → 1.0.1__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 (471) hide show
  1. {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/publish.yml +6 -11
  2. specula-1.0.1/.github/workflows/pythonpackage.yml +68 -0
  3. {specula-1.0.0a10 → specula-1.0.1}/.readthedocs.yaml +2 -1
  4. {specula-1.0.0a10 → specula-1.0.1}/PKG-INFO +23 -12
  5. {specula-1.0.0a10 → specula-1.0.1}/README.md +22 -10
  6. {specula-1.0.0a10 → specula-1.0.1}/docs/api/data_objects.rst +9 -0
  7. {specula-1.0.0a10 → specula-1.0.1}/docs/api/lib.rst +27 -0
  8. {specula-1.0.0a10 → specula-1.0.1}/docs/api/processing_objects.rst +153 -0
  9. {specula-1.0.0a10 → specula-1.0.1}/docs/conf.py +13 -1
  10. {specula-1.0.0a10 → specula-1.0.1}/docs/index.rst +2 -0
  11. {specula-1.0.0a10 → specula-1.0.1}/docs/installation.rst +22 -14
  12. {specula-1.0.0a10 → specula-1.0.1}/docs/requirements.txt +1 -0
  13. {specula-1.0.0a10 → specula-1.0.1}/docs/simulation_basics.rst +68 -9
  14. specula-1.0.1/docs/simulation_parameters.rst +178 -0
  15. specula-1.0.1/docs/tutorials/field_analyser_tutorial.rst +386 -0
  16. specula-1.0.1/docs/tutorials/generators_tutorial.rst +104 -0
  17. {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/scao_basic_tutorial.rst +16 -1
  18. {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/scao_tutorial.rst +18 -4
  19. {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/step_response_tutorial.rst +4 -0
  20. {specula-1.0.0a10 → specula-1.0.1}/requirements.txt +0 -1
  21. {specula-1.0.0a10 → specula-1.0.1}/specula/__init__.py +3 -2
  22. {specula-1.0.0a10 → specula-1.0.1}/specula/_version.py +3 -3
  23. {specula-1.0.0a10 → specula-1.0.1}/specula/base_value.py +1 -4
  24. {specula-1.0.0a10 → specula-1.0.1}/specula/calib_manager.py +5 -0
  25. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/electric_field.py +2 -2
  26. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/iir_filter_data.py +9 -6
  27. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/intensity.py +1 -1
  28. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/layer.py +2 -2
  29. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/m2c.py +10 -5
  30. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pixels.py +1 -1
  31. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pupilstop.py +1 -1
  32. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/slopes.py +1 -1
  33. specula-1.0.1/specula/data_objects/ssr_filter_data.py +442 -0
  34. {specula-1.0.0a10 → specula-1.0.1}/specula/display/base_display.py +17 -1
  35. {specula-1.0.0a10 → specula-1.0.1}/specula/display/plot_display.py +37 -3
  36. specula-1.0.1/specula/lib/calc_geometry.py +97 -0
  37. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_noise_cov_elong.py +65 -43
  38. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_zonal_ifunc.py +56 -28
  39. specula-1.0.1/specula/lib/extrapolation_2d.py +371 -0
  40. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/interp2d.py +19 -0
  41. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/mmse_reconstructor.py +12 -7
  42. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/modal_base_generator.py +18 -15
  43. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/utils.py +81 -6
  44. specula-1.0.1/specula/processing_objects/abstract_coronagraph.py +199 -0
  45. specula-1.0.1/specula/processing_objects/apodizer_coronagraph.py +232 -0
  46. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_evolution.py +103 -25
  47. specula-1.0.1/specula/processing_objects/atmo_evolution_up_down.py +160 -0
  48. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_infinite_evolution.py +40 -2
  49. specula-1.0.1/specula/processing_objects/atmo_infinite_evolution_up_down.py +265 -0
  50. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_propagation.py +157 -66
  51. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_random_phase.py +25 -0
  52. specula-1.0.1/specula/processing_objects/base_filter.py +134 -0
  53. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_slicer.py +16 -1
  54. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/ccd.py +67 -1
  55. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_source.py +10 -7
  56. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_store.py +49 -20
  57. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/dm.py +46 -0
  58. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/electric_field_reflection.py +1 -1
  59. specula-1.0.1/specula/processing_objects/ext_source_pyramid.py +467 -0
  60. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/extended_source.py +62 -23
  61. specula-1.0.1/specula/processing_objects/focal_plane_filter.py +38 -0
  62. specula-1.0.1/specula/processing_objects/four_quadrant_coronagraph.py +56 -0
  63. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/ideal_derivative_sensor.py +20 -35
  64. specula-1.0.1/specula/processing_objects/iir_filter.py +96 -0
  65. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/im_calibrator.py +1 -1
  66. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/integrator.py +8 -7
  67. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/low_pass_filter.py +2 -4
  68. specula-1.0.1/specula/processing_objects/lyot_coronagraph.py +67 -0
  69. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modalrec.py +15 -5
  70. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modalrec_implicit_polc.py +24 -26
  71. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modulated_pyramid.py +166 -182
  72. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/psf.py +24 -1
  73. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/psf_coronagraph.py +18 -6
  74. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/pyr_pupdata_calibrator.py +2 -0
  75. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh.py +21 -114
  76. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh_slopec.py +7 -2
  77. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/slopec.py +14 -6
  78. specula-1.0.1/specula/processing_objects/ssr_filter.py +81 -0
  79. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/vibration_generator.py +10 -5
  80. specula-1.0.1/specula/processing_objects/vortex_coronagraph.py +73 -0
  81. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/zernike_sensor.py +5 -40
  82. specula-1.0.1/specula/scripts/specula_main.py +46 -0
  83. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/PKG-INFO +23 -12
  84. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/SOURCES.txt +22 -0
  85. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/requires.txt +0 -1
  86. specula-1.0.1/test/test_app_coronagraph.py +177 -0
  87. {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_evolution.py +0 -1
  88. specula-1.0.1/test/test_atmo_evolution_up_down.py +390 -0
  89. {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_infinite_evolution.py +0 -1
  90. specula-1.0.1/test/test_atmo_infinite_evolution_up_down.py +589 -0
  91. {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_random_phase.py +0 -1
  92. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_data_obj.py +0 -1
  93. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_operation.py +0 -1
  94. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_processing_obj.py +0 -1
  95. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_slicer.py +43 -1
  96. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_time_obj.py +4 -0
  97. {specula-1.0.0a10 → specula-1.0.1}/test/test_base_value.py +0 -3
  98. {specula-1.0.0a10 → specula-1.0.1}/test/test_calib_manager.py +0 -2
  99. {specula-1.0.0a10 → specula-1.0.1}/test/test_ccd.py +0 -1
  100. {specula-1.0.0a10 → specula-1.0.1}/test/test_connections.py +0 -2
  101. specula-1.0.1/test/test_cov_elong.py +265 -0
  102. {specula-1.0.0a10 → specula-1.0.1}/test/test_data_objects.py +3 -2
  103. {specula-1.0.0a10 → specula-1.0.1}/test/test_data_source.py +111 -5
  104. {specula-1.0.0a10 → specula-1.0.1}/test/test_data_store.py +91 -6
  105. {specula-1.0.0a10 → specula-1.0.1}/test/test_diagram.py +3 -1
  106. {specula-1.0.0a10 → specula-1.0.1}/test/test_display.py +154 -2
  107. {specula-1.0.0a10 → specula-1.0.1}/test/test_display_server.py +0 -2
  108. {specula-1.0.0a10 → specula-1.0.1}/test/test_distributed_sh.py +0 -2
  109. {specula-1.0.0a10 → specula-1.0.1}/test/test_dm.py +0 -1
  110. {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof_slopec.py +0 -1
  111. {specula-1.0.0a10 → specula-1.0.1}/test/test_electric_field.py +0 -1
  112. {specula-1.0.0a10 → specula-1.0.1}/test/test_elt_m1_ifunc.py +0 -1
  113. specula-1.0.1/test/test_ext_source_pyr.py +924 -0
  114. {specula-1.0.0a10 → specula-1.0.1}/test/test_extended_source.py +2 -1
  115. {specula-1.0.0a10 → specula-1.0.1}/test/test_extrapolation_2d.py +15 -15
  116. specula-1.0.1/test/test_filter_equivalence.py +329 -0
  117. {specula-1.0.0a10 → specula-1.0.1}/test/test_focal_plane_filter.py +9 -8
  118. specula-1.0.1/test/test_four_quadrant_coronagraph.py +347 -0
  119. {specula-1.0.0a10 → specula-1.0.1}/test/test_fsoc_lib.py +0 -1
  120. {specula-1.0.0a10 → specula-1.0.1}/test/test_generators.py +0 -1
  121. {specula-1.0.0a10 → specula-1.0.1}/test/test_ifunc.py +104 -2
  122. {specula-1.0.0a10 → specula-1.0.1}/test/test_ifunc_inv.py +4 -0
  123. specula-1.0.1/test/test_iircontrol.py +306 -0
  124. {specula-1.0.0a10 → specula-1.0.1}/test/test_iirfilter.py +0 -1
  125. {specula-1.0.0a10 → specula-1.0.1}/test/test_import_class.py +4 -0
  126. {specula-1.0.0a10 → specula-1.0.1}/test/test_intensity.py +4 -0
  127. {specula-1.0.0a10 → specula-1.0.1}/test/test_intmat.py +0 -3
  128. {specula-1.0.0a10 → specula-1.0.1}/test/test_laser_launch_telescope.py +0 -2
  129. {specula-1.0.0a10 → specula-1.0.1}/test/test_layer.py +0 -1
  130. {specula-1.0.0a10 → specula-1.0.1}/test/test_lenslet.py +0 -2
  131. {specula-1.0.0a10 → specula-1.0.1}/test/test_loop_control.py +0 -1
  132. specula-1.0.1/test/test_lyot_coronagraph.py +284 -0
  133. {specula-1.0.0a10 → specula-1.0.1}/test/test_m2c.py +4 -1
  134. {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_pushpull_signal.py +4 -0
  135. specula-1.0.1/test/test_modalrec.py +616 -0
  136. {specula-1.0.0a10 → specula-1.0.1}/test/test_mvm.py +0 -1
  137. specula-1.0.1/test/test_physical_propagation.py +167 -0
  138. {specula-1.0.0a10 → specula-1.0.1}/test/test_pixels.py +0 -2
  139. {specula-1.0.0a10 → specula-1.0.1}/test/test_process_utils.py +4 -0
  140. {specula-1.0.0a10 → specula-1.0.1}/test/test_pupdata.py +3 -0
  141. {specula-1.0.0a10 → specula-1.0.1}/test/test_pupilstop.py +0 -1
  142. {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr.py +290 -35
  143. {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_slopec.py +0 -1
  144. {specula-1.0.0a10 → specula-1.0.1}/test/test_recmat.py +4 -0
  145. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh.py +0 -2
  146. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_slopec.py +51 -1
  147. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_subap_calibrator.py +3 -0
  148. {specula-1.0.0a10 → specula-1.0.1}/test/test_simul.py +0 -2
  149. {specula-1.0.0a10 → specula-1.0.1}/test/test_simul_params.py +4 -0
  150. {specula-1.0.0a10 → specula-1.0.1}/test/test_slopes.py +1 -2
  151. {specula-1.0.0a10 → specula-1.0.1}/test/test_source.py +0 -2
  152. specula-1.0.1/test/test_ssrcontrol.py +427 -0
  153. specula-1.0.1/test/test_ssrfilter.py +426 -0
  154. {specula-1.0.0a10 → specula-1.0.1}/test/test_subapdata.py +3 -0
  155. {specula-1.0.0a10 → specula-1.0.1}/test/test_time_history.py +0 -2
  156. {specula-1.0.0a10 → specula-1.0.1}/test/test_utils.py +0 -2
  157. specula-1.0.1/test/test_vortex_coronagraph.py +255 -0
  158. specula-1.0.0a10/.github/workflows/pythonpackage.yml +0 -58
  159. specula-1.0.0a10/docs/tutorials/field_analyser_tutorial.rst +0 -169
  160. specula-1.0.0a10/specula/lib/extrapolation_2d.py +0 -172
  161. specula-1.0.0a10/specula/processing_objects/ext_source_pyramid.py +0 -169
  162. specula-1.0.0a10/specula/processing_objects/focal_plane_filter.py +0 -263
  163. specula-1.0.0a10/specula/processing_objects/iir_filter.py +0 -197
  164. specula-1.0.0a10/specula/scripts/specula_main.py +0 -31
  165. specula-1.0.0a10/test/test_cov_elong.py +0 -109
  166. specula-1.0.0a10/test/test_ext_source_pyr.py +0 -278
  167. specula-1.0.0a10/test/test_iircontrol.py +0 -144
  168. specula-1.0.0a10/test/test_modalrec.py +0 -156
  169. specula-1.0.0a10/test/test_physical_propagation.py +0 -65
  170. {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackageW.yml +0 -0
  171. {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackage_full.yml +0 -0
  172. {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackage_fullW.yml +0 -0
  173. {specula-1.0.0a10 → specula-1.0.1}/.gitignore +0 -0
  174. {specula-1.0.0a10 → specula-1.0.1}/LICENSE +0 -0
  175. {specula-1.0.0a10 → specula-1.0.1}/config/ANDES/params_andes.yml +0 -0
  176. {specula-1.0.0a10 → specula-1.0.1}/config/ANDES/params_andes_1kHz.yml +0 -0
  177. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_ngs_rec.yml +0 -0
  178. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_ngs_subaps.yml +0 -0
  179. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_rec_lgs.yml +0 -0
  180. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_rec_lo.yml +0 -0
  181. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_subaps.yml +0 -0
  182. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/eris_lgsonly.yml +0 -0
  183. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris.yml +0 -0
  184. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris_ngs.yml +0 -0
  185. {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris_ngs_ut4pupil.yml +0 -0
  186. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_im.yml +0 -0
  187. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_scao_rec.yml +0 -0
  188. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_small_rec.yml +0 -0
  189. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_small_rec_override.yml +0 -0
  190. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_subaps.yml +0 -0
  191. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/override_morfeo_focus_ref_2gpus.yml +0 -0
  192. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/override_morfeo_no_focus_no_ref_2gpus.yml +0 -0
  193. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_focus_ref.yml +0 -0
  194. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_full.yml +0 -0
  195. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_ltao.yml +0 -0
  196. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_ltao_plots.yml +0 -0
  197. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_no_focus_no_ref.yml +0 -0
  198. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_no_na_no_focus_no_ref.yml +0 -0
  199. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_scao_plots.yml +0 -0
  200. {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_small.yml +0 -0
  201. {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/ov_add_display.yml +0 -0
  202. {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/params_pyr_soul.yml +0 -0
  203. {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/params_pyr_soul_basic.yml +0 -0
  204. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptANDES +0 -0
  205. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptERIS +0 -0
  206. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpi +0 -0
  207. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpiDistributed4 +0 -0
  208. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpiSpread +0 -0
  209. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptSOULCPU +0 -0
  210. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptSOULGPU +0 -0
  211. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptScao +0 -0
  212. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_ANDES_leonardo.yml +0 -0
  213. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_ERIS_leonardo.yml +0 -0
  214. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo.yml +0 -0
  215. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo_ds4.yml +0 -0
  216. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo_spread.yml +0 -0
  217. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_SOUL_CPU_leonardo.yml +0 -0
  218. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_SOUL_GPU_leonardo.yml +0 -0
  219. {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_scao_leonardo.yml +0 -0
  220. {specula-1.0.0a10 → specula-1.0.1}/config/other/extract_filenames.py +0 -0
  221. {specula-1.0.0a10 → specula-1.0.1}/config/other/gandalf.yml +0 -0
  222. {specula-1.0.0a10 → specula-1.0.1}/config/other/gandalf_mpi.yml +0 -0
  223. {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_petals_ol.yml +0 -0
  224. {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_random_phase.yml +0 -0
  225. {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_test.yml +0 -0
  226. {specula-1.0.0a10 → specula-1.0.1}/config/other/params_control_lpf.yml +0 -0
  227. {specula-1.0.0a10 → specula-1.0.1}/config/other/params_test_comb.yml +0 -0
  228. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/im/scao_recmat.fits +0 -0
  229. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/pupils/scao_pup.fits +0 -0
  230. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/rec/scao_recmat.fits +0 -0
  231. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/slopenulls/scao_sn.fits +0 -0
  232. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_atmo_random_phase_pupdata.yml +0 -0
  233. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_ltao_sh_rec.yml +0 -0
  234. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_pyr_pupdata.yml +0 -0
  235. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_pyr_rec.yml +0 -0
  236. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_scao_pupdata.yml +0 -0
  237. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_scao_rec.yml +0 -0
  238. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_sh_rec.yml +0 -0
  239. {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_sh_subaps.yml +0 -0
  240. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao.yml +0 -0
  241. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_elt.yml +0 -0
  242. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_elt_plots.yml +0 -0
  243. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_plots.yml +0 -0
  244. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_pyr.yml +0 -0
  245. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_pyr_extended.yml +0 -0
  246. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_sh.yml +0 -0
  247. {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_sh_plots.yml +0 -0
  248. {specula-1.0.0a10 → specula-1.0.1}/config/scao/runAll.sh +0 -0
  249. {specula-1.0.0a10 → specula-1.0.1}/config/scao/sncalib.yml +0 -0
  250. {specula-1.0.0a10 → specula-1.0.1}/docs/Makefile +0 -0
  251. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_control_lpf.png +0 -0
  252. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_scao_sh.png +0 -0
  253. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_scao_sh_colors.png +0 -0
  254. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/DM_shapes.png +0 -0
  255. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/SR.png +0 -0
  256. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/modal_plot.png +0 -0
  257. {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/singular_values.png +0 -0
  258. {specula-1.0.0a10 → specula-1.0.1}/docs/api/base_classes.rst +0 -0
  259. {specula-1.0.0a10 → specula-1.0.1}/docs/base_classes.rst +0 -0
  260. {specula-1.0.0a10 → specula-1.0.1}/docs/calibration_manager.rst +0 -0
  261. {specula-1.0.0a10 → specula-1.0.1}/docs/data_objects.rst +0 -0
  262. {specula-1.0.0a10 → specula-1.0.1}/docs/development.rst +0 -0
  263. {specula-1.0.0a10 → specula-1.0.1}/docs/make.bat +0 -0
  264. {specula-1.0.0a10 → specula-1.0.1}/docs/processing_objects.rst +0 -0
  265. {specula-1.0.0a10 → specula-1.0.1}/docs/readme.txt +0 -0
  266. {specula-1.0.0a10 → specula-1.0.1}/docs/running_simulations.rst +0 -0
  267. {specula-1.0.0a10 → specula-1.0.1}/docs/scripts/generate_api_docs.py +0 -0
  268. {specula-1.0.0a10 → specula-1.0.1}/docs/simul_diagrams.rst +0 -0
  269. {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/pwfs_calib_pc_tutorial.rst +0 -0
  270. {specula-1.0.0a10 → specula-1.0.1}/pyproject.toml +0 -0
  271. {specula-1.0.0a10 → specula-1.0.1}/setup.cfg +0 -0
  272. {specula-1.0.0a10 → specula-1.0.1}/specula/base_data_obj.py +0 -0
  273. {specula-1.0.0a10 → specula-1.0.1}/specula/base_processing_obj.py +0 -0
  274. {specula-1.0.0a10 → specula-1.0.1}/specula/base_time_obj.py +0 -0
  275. {specula-1.0.0a10 → specula-1.0.1}/specula/connections.py +0 -0
  276. {specula-1.0.0a10 → specula-1.0.1}/specula/data/EltM1SegmMap1015pix38570mm.fits +0 -0
  277. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/__init__.py +0 -0
  278. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/convolution_kernel.py +0 -0
  279. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/gaussian_convolution_kernel.py +0 -0
  280. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/ifunc.py +0 -0
  281. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/ifunc_inv.py +0 -0
  282. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/infinite_phase_screen.py +0 -0
  283. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/intmat.py +0 -0
  284. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/laser_launch_telescope.py +0 -0
  285. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/lenslet.py +0 -0
  286. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pupdata.py +0 -0
  287. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/recmat.py +0 -0
  288. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/simul_params.py +0 -0
  289. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/source.py +0 -0
  290. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/subap_data.py +0 -0
  291. {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/time_history.py +0 -0
  292. {specula-1.0.0a10 → specula-1.0.1}/specula/display/__init__.py +0 -0
  293. {specula-1.0.0a10 → specula-1.0.1}/specula/display/data_plotter.py +0 -0
  294. {specula-1.0.0a10 → specula-1.0.1}/specula/display/double_phase_display.py +0 -0
  295. {specula-1.0.0a10 → specula-1.0.1}/specula/display/modes_display.py +0 -0
  296. {specula-1.0.0a10 → specula-1.0.1}/specula/display/phase_display.py +0 -0
  297. {specula-1.0.0a10 → specula-1.0.1}/specula/display/pixels_display.py +0 -0
  298. {specula-1.0.0a10 → specula-1.0.1}/specula/display/plot_vector_display.py +0 -0
  299. {specula-1.0.0a10 → specula-1.0.1}/specula/display/psf_display.py +0 -0
  300. {specula-1.0.0a10 → specula-1.0.1}/specula/display/pupil_display.py +0 -0
  301. {specula-1.0.0a10 → specula-1.0.1}/specula/display/slopec_display.py +0 -0
  302. {specula-1.0.0a10 → specula-1.0.1}/specula/field_analyser.py +0 -0
  303. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/ELT_M1_ifunc_calculator.py +0 -0
  304. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/__init__.py +0 -0
  305. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_phasescreen.py +0 -0
  306. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_psf.py +0 -0
  307. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_spatialfrequency.py +0 -0
  308. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_petal_ifunc.py +0 -0
  309. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_zern_ifunc.py +0 -0
  310. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/flatten.py +0 -0
  311. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/fsoc_lib.py +0 -0
  312. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/make_mask.py +0 -0
  313. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/make_xy.py +0 -0
  314. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/mask.py +0 -0
  315. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/modal_pushpull_signal.py +0 -0
  316. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/n_phot.py +0 -0
  317. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/phasescreen_manager.py +0 -0
  318. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/platescale_coeff.py +0 -0
  319. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/process_utils.py +0 -0
  320. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/rebin.py +0 -0
  321. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/toccd.py +0 -0
  322. {specula-1.0.0a10 → specula-1.0.1}/specula/lib/zernike_generator.py +0 -0
  323. {specula-1.0.0a10 → specula-1.0.1}/specula/loop_control.py +0 -0
  324. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/__init__.py +0 -0
  325. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/avc.py +0 -0
  326. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_generator.py +0 -0
  327. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_operation.py +0 -0
  328. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_buffer.py +0 -0
  329. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_print.py +0 -0
  330. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/demodulator.py +0 -0
  331. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/display_server.py +0 -0
  332. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/distributed_sh.py +0 -0
  333. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/double_roof_slopec.py +0 -0
  334. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/electric_field_combinator.py +0 -0
  335. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/gain_optimizer.py +0 -0
  336. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/linear_combination.py +0 -0
  337. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/mirror_commands_combinator.py +0 -0
  338. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modal_analysis.py +0 -0
  339. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modulated_double_roof.py +0 -0
  340. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/multi_im_calibrator.py +0 -0
  341. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/multi_rec_calibrator.py +0 -0
  342. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/mvm.py +0 -0
  343. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/optical_gain_estimator.py +0 -0
  344. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/phase_flattening.py +0 -0
  345. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_chrom_sh.py +0 -0
  346. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_chrom_wfs.py +0 -0
  347. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_crom_pyramid.py +0 -0
  348. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/power_loss.py +0 -0
  349. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/push_pull_generator.py +0 -0
  350. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/pyr_slopec.py +0 -0
  351. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/random_generator.py +0 -0
  352. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/rec_calibrator.py +0 -0
  353. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/schedule_generator.py +0 -0
  354. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh_subap_calibrator.py +0 -0
  355. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sn_calibrator.py +0 -0
  356. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/spot_monitor.py +0 -0
  357. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/time_history_generator.py +0 -0
  358. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/wave_generator.py +0 -0
  359. {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/windowed_integration.py +0 -0
  360. {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/parse_classes.py +0 -0
  361. {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/templates/specula_display.html +0 -0
  362. {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/templates/specula_frontend.html +0 -0
  363. {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/web_frontend.py +0 -0
  364. {specula-1.0.0a10 → specula-1.0.1}/specula/simul.py +0 -0
  365. {specula-1.0.0a10 → specula-1.0.1}/specula/template_processing_obj.py +0 -0
  366. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/dependency_links.txt +0 -0
  367. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/entry_points.txt +0 -0
  368. {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/top_level.txt +0 -0
  369. {specula-1.0.0a10 → specula-1.0.1}/test/README.py +0 -0
  370. {specula-1.0.0a10 → specula-1.0.1}/test/__init__.py +0 -0
  371. {specula-1.0.0a10 → specula-1.0.1}/test/bench_fft.py +0 -0
  372. {specula-1.0.0a10 → specula-1.0.1}/test/bench_fft_numpy.py +0 -0
  373. {specula-1.0.0a10 → specula-1.0.1}/test/calib/pupilstop/EELT480pp0.0803m_obs0.283_spider2023.fits +0 -0
  374. {specula-1.0.0a10 → specula-1.0.1}/test/calib/subapdata/maory_np_ps480p0.080_shs68x68_wl589_fv16.1_np14_th0.50_rot6.2.fits +0 -0
  375. {specula-1.0.0a10 → specula-1.0.1}/test/calib/subapdata/maory_np_ps480p0.080_shs68x68_wl589_fv16.1_np14_th0.50_rot6.2_reduced_17x17.fits +0 -0
  376. {specula-1.0.0a10 → specula-1.0.1}/test/data/PASSATA_pupilstop_64pix.fits +0 -0
  377. {specula-1.0.0a10 → specula-1.0.1}/test/data/atmo_s0.8asec_L010m_D8m_100modes_rms.fits +0 -0
  378. {specula-1.0.0a10 → specula-1.0.1}/test/data/cov_sh_ref.fits +0 -0
  379. {specula-1.0.0a10 → specula-1.0.1}/test/data/diff_ref.fits +0 -0
  380. {specula-1.0.0a10 → specula-1.0.1}/test/data/input_phase.fits +0 -0
  381. {specula-1.0.0a10 → specula-1.0.1}/test/data/lgs_map_sh_ref.fits +0 -0
  382. {specula-1.0.0a10 → specula-1.0.1}/test/data/mask.fits +0 -0
  383. {specula-1.0.0a10 → specula-1.0.1}/test/data/phase.fits +0 -0
  384. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_phase.fits +0 -0
  385. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_crop_intensity.fits +0 -0
  386. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_crop_slopes.fits +0 -0
  387. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_intensity.fits +0 -0
  388. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_phase.fits +0 -0
  389. {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_slopes.fits +0 -0
  390. {specula-1.0.0a10 → specula-1.0.1}/test/data/res_sr_ref.fits +0 -0
  391. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_im_20modes_ref.fits +0 -0
  392. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_pupdata_ref.fits +0 -0
  393. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_rec_20modes_ref.fits +0 -0
  394. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_im_n8_th0.5_ref.fits +0 -0
  395. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_pupdata_ref.fits +0 -0
  396. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_rec_n8_th0.5_ref.fits +0 -0
  397. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_sn_n8_th0.5_ref.fits +0 -0
  398. {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_subaps_n8_th0.5_ref.fits +0 -0
  399. {specula-1.0.0a10 → specula-1.0.1}/test/data/timehistory_test.fits +0 -0
  400. {specula-1.0.0a10 → specula-1.0.1}/test/params_atmo_test.yml +0 -0
  401. {specula-1.0.0a10 → specula-1.0.1}/test/params_demodulator_test.yml +0 -0
  402. {specula-1.0.0a10 → specula-1.0.1}/test/params_elt_pfs_test.yml +0 -0
  403. {specula-1.0.0a10 → specula-1.0.1}/test/params_field_analyser_test.yml +0 -0
  404. {specula-1.0.0a10 → specula-1.0.1}/test/params_gain_optimizer.yml +0 -0
  405. {specula-1.0.0a10 → specula-1.0.1}/test/params_low_pass_filter_test.yml +0 -0
  406. {specula-1.0.0a10 → specula-1.0.1}/test/params_optical_gain_estimator_test.yml +0 -0
  407. {specula-1.0.0a10 → specula-1.0.1}/test/params_platescale_test.yml +0 -0
  408. {specula-1.0.0a10 → specula-1.0.1}/test/params_pyr_ol_test.yml +0 -0
  409. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test.yml +0 -0
  410. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test_pupdata.yml +0 -0
  411. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test_rec.yml +0 -0
  412. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_pyr_test.yml +0 -0
  413. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_pyr_test_pupdata.yml +0 -0
  414. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test.yml +0 -0
  415. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_rec.yml +0 -0
  416. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_sn.yml +0 -0
  417. {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_subap.yml +0 -0
  418. {specula-1.0.0a10 → specula-1.0.1}/test/params_timehistory_test.yml +0 -0
  419. {specula-1.0.0a10 → specula-1.0.1}/test/params_trigger_zero.yml +0 -0
  420. {specula-1.0.0a10 → specula-1.0.1}/test/specula_testlib.py +0 -0
  421. {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_propagation.py +0 -0
  422. {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_simulation.py +0 -0
  423. {specula-1.0.0a10 → specula-1.0.1}/test/test_calc_psf.py +0 -0
  424. {specula-1.0.0a10 → specula-1.0.1}/test/test_compute_ifs_covmat.py +0 -0
  425. {specula-1.0.0a10 → specula-1.0.1}/test/test_compute_zonal_ifunc.py +0 -0
  426. {specula-1.0.0a10 → specula-1.0.1}/test/test_convolution_kernel.py +0 -0
  427. {specula-1.0.0a10 → specula-1.0.1}/test/test_data_buffer.py +0 -0
  428. {specula-1.0.0a10 → specula-1.0.1}/test/test_data_print.py +0 -0
  429. {specula-1.0.0a10 → specula-1.0.1}/test/test_demodulator.py +0 -0
  430. {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof.py +0 -0
  431. {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof_calibration.py +0 -0
  432. {specula-1.0.0a10 → specula-1.0.1}/test/test_field_analyser.py +0 -0
  433. {specula-1.0.0a10 → specula-1.0.1}/test/test_gain_optimizer.py +0 -0
  434. {specula-1.0.0a10 → specula-1.0.1}/test/test_ideal_derivative_sensor.py +0 -0
  435. {specula-1.0.0a10 → specula-1.0.1}/test/test_im_rec_calibrator.py +0 -0
  436. {specula-1.0.0a10 → specula-1.0.1}/test/test_infinite_phase_screen.py +0 -0
  437. {specula-1.0.0a10 → specula-1.0.1}/test/test_init.py +0 -0
  438. {specula-1.0.0a10 → specula-1.0.1}/test/test_interp2d.py +0 -0
  439. {specula-1.0.0a10 → specula-1.0.1}/test/test_linear_combination.py +0 -0
  440. {specula-1.0.0a10 → specula-1.0.1}/test/test_local_mean_rebin.py +0 -0
  441. {specula-1.0.0a10 → specula-1.0.1}/test/test_low_pass_filter_simulation.py +0 -0
  442. {specula-1.0.0a10 → specula-1.0.1}/test/test_make_mask.py +0 -0
  443. {specula-1.0.0a10 → specula-1.0.1}/test/test_make_xy.py +0 -0
  444. {specula-1.0.0a10 → specula-1.0.1}/test/test_mask.py +0 -0
  445. {specula-1.0.0a10 → specula-1.0.1}/test/test_mmse_reconstructor.py +0 -0
  446. {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_analysis_simulation.py +0 -0
  447. {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_basis.py +0 -0
  448. {specula-1.0.0a10 → specula-1.0.1}/test/test_multi_im_calibrator.py +0 -0
  449. {specula-1.0.0a10 → specula-1.0.1}/test/test_multi_rec_calibrator.py +0 -0
  450. {specula-1.0.0a10 → specula-1.0.1}/test/test_optical_gain_estimator.py +0 -0
  451. {specula-1.0.0a10 → specula-1.0.1}/test/test_phase_flattening.py +0 -0
  452. {specula-1.0.0a10 → specula-1.0.1}/test/test_platescale.py +0 -0
  453. {specula-1.0.0a10 → specula-1.0.1}/test/test_poly_chrom_pyramid.py +0 -0
  454. {specula-1.0.0a10 → specula-1.0.1}/test/test_poly_chrom_sh.py +0 -0
  455. {specula-1.0.0a10 → specula-1.0.1}/test/test_power_loss.py +0 -0
  456. {specula-1.0.0a10 → specula-1.0.1}/test/test_psf.py +0 -0
  457. {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_calibration.py +0 -0
  458. {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_simulation.py +0 -0
  459. {specula-1.0.0a10 → specula-1.0.1}/test/test_rec_calibrator.py +0 -0
  460. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_calibration.py +0 -0
  461. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_simulation.py +0 -0
  462. {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_slopec_morfeo.py +0 -0
  463. {specula-1.0.0a10 → specula-1.0.1}/test/test_sn_calibrator.py +0 -0
  464. {specula-1.0.0a10 → specula-1.0.1}/test/test_spot_monitor.py +0 -0
  465. {specula-1.0.0a10 → specula-1.0.1}/test/test_timehistory_integration.py +0 -0
  466. {specula-1.0.0a10 → specula-1.0.1}/test/test_to_xp.py +0 -0
  467. {specula-1.0.0a10 → specula-1.0.1}/test/test_toccd.py +0 -0
  468. {specula-1.0.0a10 → specula-1.0.1}/test/test_trigger_zero.py +0 -0
  469. {specula-1.0.0a10 → specula-1.0.1}/test/test_windowed_integration.py +0 -0
  470. {specula-1.0.0a10 → specula-1.0.1}/test/test_zernike.py +0 -0
  471. {specula-1.0.0a10 → specula-1.0.1}/test/test_zernike_sensor.py +0 -0
@@ -10,6 +10,10 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
  permissions:
12
12
  contents: read
13
+ id-token: write # OIDC AUTHENTICATION
14
+ # Run only on:
15
+ # - tag pushes
16
+ # - PRs with label "Build wheels"
13
17
  if: >
14
18
  (github.event_name == 'push' && startsWith(github.ref, 'refs/tags')) ||
15
19
  contains(toJson(github.event.pull_request.labels), 'Build wheels')
@@ -26,15 +30,6 @@ jobs:
26
30
  run: python -m build --sdist --wheel .
27
31
  - name: List result
28
32
  run: ls -l dist
29
- - name: Publish pre-release 📦 to TestPyPI
30
- if: startsWith(github.ref, 'refs/tags') && (contains(github.ref, 'a') || contains(github.ref, 'b') || contains(github.ref, 'rc') || contains(github.ref, '-'))
31
- env:
32
- TWINE_USERNAME: __token__
33
- TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }}
34
- run: python -m twine upload --repository testpypi dist/*
35
33
  - name: Publish distribution 📦 to PyPI
36
- if: startsWith(github.ref, 'refs/tags') && !contains(github.ref, 'a') && !contains(github.ref, 'b') && !contains(github.ref, 'rc') && !contains(github.ref, '-')
37
- env:
38
- TWINE_USERNAME: __token__
39
- TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
40
- run: python -m twine upload dist/*
34
+ if: startsWith(github.ref, 'refs/tags')
35
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,68 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Python package
5
+
6
+ on:
7
+ push:
8
+ branches: [ main ]
9
+ pull_request:
10
+ branches: [ main ]
11
+ # schedule:
12
+ # - cron: "1 1 * * *"
13
+
14
+
15
+ jobs:
16
+ build:
17
+
18
+ runs-on: ${{ matrix.os }}
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ os: [ubuntu-latest, macos-latest]
23
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ fetch-depth: 0
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ uses: actions/setup-python@v5
32
+ with:
33
+ python-version: ${{ matrix.python-version }}
34
+
35
+
36
+ - name: Install dependencies
37
+ run: |
38
+ bash
39
+ if ${{runner.os == 'Linux'}}; then
40
+ sudo apt update
41
+ sudo apt install libcairo2-dev pkg-config python3-dev
42
+ fi
43
+ python -m pip install --upgrade pip
44
+ pip install -r requirements.txt
45
+ pip install pytest pytest-cov flake8
46
+
47
+ - name: Lint with flake8
48
+ run: |
49
+ # stop the build if there are Python syntax errors or undefined names
50
+ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
51
+ # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
52
+ flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
53
+
54
+ - name: Test with pytest and generate coverage report
55
+ run: |
56
+ pytest --cov=./ --cov-report=xml
57
+
58
+ - name: Upload coverage to Codecov
59
+ if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
60
+ uses: codecov/codecov-action@v4
61
+ with:
62
+ token: ${{ secrets.CODECOV_TOKEN }}
63
+ file: ./coverage.xml
64
+ flags: unittests
65
+ override_branch: ${{ github.head_ref || github.ref_name }}
66
+ override_commit: ${{ github.sha }}
67
+ fail_ci_if_error: false
68
+ verbose: true
@@ -20,4 +20,5 @@ sphinx:
20
20
  python:
21
21
  install:
22
22
  - requirements: docs/requirements.txt
23
-
23
+ - method: pip
24
+ path: .
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specula
3
- Version: 1.0.0a10
3
+ Version: 1.0.1
4
4
  Summary: PYramid Simulator Software for Adaptive OpTics Arcetri
5
5
  Author: Alfio Puglisi, Guido Agapito, INAF Arcetri Adaptive Optics group
6
6
  Author-email: Fabio Rossi <fabio.rossi@inaf.it>
@@ -22,7 +22,6 @@ Requires-Dist: flask-socketio
22
22
  Requires-Dist: python-socketio
23
23
  Requires-Dist: requests
24
24
  Requires-Dist: pytest
25
- Requires-Dist: scikit-image
26
25
  Provides-Extra: control
27
26
  Requires-Dist: control; extra == "control"
28
27
  Provides-Extra: diagrams
@@ -44,8 +43,9 @@ See the documentation here: [specula.readthedocs.io](https://specula.readthedocs
44
43
  ## Directories
45
44
 
46
45
  - **docs**: contains the documentation.
47
- - **main**: contains functions and parameter files to calibrate and run a closed loop of an adaptive optics system (single-conjugated, multi-conjugated, natural, laser, ...).
46
+ - **config**: contains functions and parameter files to calibrate and run a closed loop of an adaptive optics system (single-conjugated, multi-conjugated, natural, laser, ...).
48
47
  - **specula**: the main library, structured as follows:
48
+ - **data**: data required by utility functions.
49
49
  - **data_objects**: classes that wrap the data and provide methods to access them.
50
50
  - **display**: classes for data visualization.
51
51
  - **lib**: utility functions used by multiple objects.
@@ -62,22 +62,14 @@ See the documentation here: [specula.readthedocs.io](https://specula.readthedocs
62
62
  - flask
63
63
  - flask-socketio
64
64
  - socketio
65
- - scikit-image (for physical propagation)
66
65
  - cupy (for GPU acceleration, optional)
67
66
 
68
67
  ### Optional libraries
69
68
 
70
69
  Some features require additional libraries:
71
- - **pycairo**: needed for block diagram generation with orthogram
72
- - **orthogram**: for automatic block diagram creation (see [orthogram](https://pypi.org/project/orthogram/))
70
+ - **orthogram**: for automatic block diagram creation (see [orthogram](https://pypi.org/project/orthogram/), requires **pycairo**)
73
71
  - **control**: for conversion of transfer function system in SPECULA format and vice-versa and analysis of transfer function
74
72
 
75
- Install optional dependencies (pycairo will be installed as dependency of orthogram) with:
76
- ```bash
77
- pip install orthogram
78
- pip install control
79
- ```
80
-
81
73
  ## Contributing to SPECULA
82
74
  To contribute to SPECULA, follow these steps:
83
75
 
@@ -89,3 +81,22 @@ To contribute to SPECULA, follow these steps:
89
81
  6. Create the pull request.
90
82
 
91
83
  We require tests for all new features to ensure the stability of the project.
84
+
85
+ ## Citation
86
+
87
+ If you use SPECULA in your research, please cite:
88
+
89
+ ```bibtex
90
+ @article{specula2026,
91
+ author = {Fabio Rossi and Alfio Puglisi and Guido Agapito},
92
+ title = {{Introducing a new generation adaptive optics simulation framework: from PASSATA to SPECULA}},
93
+ volume = {12},
94
+ journal = {Journal of Astronomical Telescopes, Instruments, and Systems},
95
+ number = {1},
96
+ publisher = {SPIE},
97
+ pages = {019001},
98
+ year = {2026},
99
+ doi = {10.1117/1.JATIS.12.1.019001},
100
+ URL = {https://doi.org/10.1117/1.JATIS.12.1.019001}
101
+ }
102
+ ```
@@ -10,8 +10,9 @@ See the documentation here: [specula.readthedocs.io](https://specula.readthedocs
10
10
  ## Directories
11
11
 
12
12
  - **docs**: contains the documentation.
13
- - **main**: contains functions and parameter files to calibrate and run a closed loop of an adaptive optics system (single-conjugated, multi-conjugated, natural, laser, ...).
13
+ - **config**: contains functions and parameter files to calibrate and run a closed loop of an adaptive optics system (single-conjugated, multi-conjugated, natural, laser, ...).
14
14
  - **specula**: the main library, structured as follows:
15
+ - **data**: data required by utility functions.
15
16
  - **data_objects**: classes that wrap the data and provide methods to access them.
16
17
  - **display**: classes for data visualization.
17
18
  - **lib**: utility functions used by multiple objects.
@@ -28,22 +29,14 @@ See the documentation here: [specula.readthedocs.io](https://specula.readthedocs
28
29
  - flask
29
30
  - flask-socketio
30
31
  - socketio
31
- - scikit-image (for physical propagation)
32
32
  - cupy (for GPU acceleration, optional)
33
33
 
34
34
  ### Optional libraries
35
35
 
36
36
  Some features require additional libraries:
37
- - **pycairo**: needed for block diagram generation with orthogram
38
- - **orthogram**: for automatic block diagram creation (see [orthogram](https://pypi.org/project/orthogram/))
37
+ - **orthogram**: for automatic block diagram creation (see [orthogram](https://pypi.org/project/orthogram/), requires **pycairo**)
39
38
  - **control**: for conversion of transfer function system in SPECULA format and vice-versa and analysis of transfer function
40
39
 
41
- Install optional dependencies (pycairo will be installed as dependency of orthogram) with:
42
- ```bash
43
- pip install orthogram
44
- pip install control
45
- ```
46
-
47
40
  ## Contributing to SPECULA
48
41
  To contribute to SPECULA, follow these steps:
49
42
 
@@ -55,3 +48,22 @@ To contribute to SPECULA, follow these steps:
55
48
  6. Create the pull request.
56
49
 
57
50
  We require tests for all new features to ensure the stability of the project.
51
+
52
+ ## Citation
53
+
54
+ If you use SPECULA in your research, please cite:
55
+
56
+ ```bibtex
57
+ @article{specula2026,
58
+ author = {Fabio Rossi and Alfio Puglisi and Guido Agapito},
59
+ title = {{Introducing a new generation adaptive optics simulation framework: from PASSATA to SPECULA}},
60
+ volume = {12},
61
+ journal = {Journal of Astronomical Telescopes, Instruments, and Systems},
62
+ number = {1},
63
+ publisher = {SPIE},
64
+ pages = {019001},
65
+ year = {2026},
66
+ doi = {10.1117/1.JATIS.12.1.019001},
67
+ URL = {https://doi.org/10.1117/1.JATIS.12.1.019001}
68
+ }
69
+ ```
@@ -184,6 +184,15 @@ Source
184
184
  :show-inheritance:
185
185
 
186
186
 
187
+ Ssr Filter Data
188
+ ---------------
189
+
190
+ .. automodule:: specula.data_objects.ssr_filter_data
191
+ :members:
192
+ :undoc-members:
193
+ :show-inheritance:
194
+
195
+
187
196
  Subap Data
188
197
  ----------
189
198
 
@@ -13,6 +13,15 @@ Elt M1 Ifunc Calculator
13
13
  :show-inheritance:
14
14
 
15
15
 
16
+ Calc Geometry
17
+ -------------
18
+
19
+ .. automodule:: specula.lib.calc_geometry
20
+ :members:
21
+ :undoc-members:
22
+ :show-inheritance:
23
+
24
+
16
25
  Calc Noise Cov Elong
17
26
  --------------------
18
27
 
@@ -94,6 +103,15 @@ Flatten
94
103
  :show-inheritance:
95
104
 
96
105
 
106
+ Fsoc Lib
107
+ --------
108
+
109
+ .. automodule:: specula.lib.fsoc_lib
110
+ :members:
111
+ :undoc-members:
112
+ :show-inheritance:
113
+
114
+
97
115
  Interp2D
98
116
  --------
99
117
 
@@ -130,6 +148,15 @@ Mask
130
148
  :show-inheritance:
131
149
 
132
150
 
151
+ Mmse Reconstructor
152
+ ------------------
153
+
154
+ .. automodule:: specula.lib.mmse_reconstructor
155
+ :members:
156
+ :undoc-members:
157
+ :show-inheritance:
158
+
159
+
133
160
  Modal Base Generator
134
161
  --------------------
135
162
 
@@ -4,6 +4,24 @@ Processing Objects API
4
4
  Processing objects for simulating AO system components.
5
5
 
6
6
 
7
+ Abstract Coronagraph
8
+ --------------------
9
+
10
+ .. automodule:: specula.processing_objects.abstract_coronagraph
11
+ :members:
12
+ :undoc-members:
13
+ :show-inheritance:
14
+
15
+
16
+ Apodizer Coronagraph
17
+ --------------------
18
+
19
+ .. automodule:: specula.processing_objects.apodizer_coronagraph
20
+ :members:
21
+ :undoc-members:
22
+ :show-inheritance:
23
+
24
+
7
25
  Atmo Evolution
8
26
  --------------
9
27
 
@@ -13,6 +31,15 @@ Atmo Evolution
13
31
  :show-inheritance:
14
32
 
15
33
 
34
+ Atmo Evolution Up Down
35
+ ----------------------
36
+
37
+ .. automodule:: specula.processing_objects.atmo_evolution_up_down
38
+ :members:
39
+ :undoc-members:
40
+ :show-inheritance:
41
+
42
+
16
43
  Atmo Infinite Evolution
17
44
  -----------------------
18
45
 
@@ -22,6 +49,15 @@ Atmo Infinite Evolution
22
49
  :show-inheritance:
23
50
 
24
51
 
52
+ Atmo Infinite Evolution Up Down
53
+ -------------------------------
54
+
55
+ .. automodule:: specula.processing_objects.atmo_infinite_evolution_up_down
56
+ :members:
57
+ :undoc-members:
58
+ :show-inheritance:
59
+
60
+
25
61
  Atmo Propagation
26
62
  ----------------
27
63
 
@@ -67,6 +103,15 @@ Base Operation
67
103
  :show-inheritance:
68
104
 
69
105
 
106
+ Base Slicer
107
+ -----------
108
+
109
+ .. automodule:: specula.processing_objects.base_slicer
110
+ :members:
111
+ :undoc-members:
112
+ :show-inheritance:
113
+
114
+
70
115
  Ccd
71
116
  ---
72
117
 
@@ -85,6 +130,15 @@ Data Buffer
85
130
  :show-inheritance:
86
131
 
87
132
 
133
+ Data Print
134
+ ----------
135
+
136
+ .. automodule:: specula.processing_objects.data_print
137
+ :members:
138
+ :undoc-members:
139
+ :show-inheritance:
140
+
141
+
88
142
  Data Source
89
143
  -----------
90
144
 
@@ -157,6 +211,24 @@ Electric Field Combinator
157
211
  :show-inheritance:
158
212
 
159
213
 
214
+ Electric Field Reflection
215
+ -------------------------
216
+
217
+ .. automodule:: specula.processing_objects.electric_field_reflection
218
+ :members:
219
+ :undoc-members:
220
+ :show-inheritance:
221
+
222
+
223
+ Ext Source Pyramid
224
+ ------------------
225
+
226
+ .. automodule:: specula.processing_objects.ext_source_pyramid
227
+ :members:
228
+ :undoc-members:
229
+ :show-inheritance:
230
+
231
+
160
232
  Extended Source
161
233
  ---------------
162
234
 
@@ -166,6 +238,24 @@ Extended Source
166
238
  :show-inheritance:
167
239
 
168
240
 
241
+ Focal Plane Filter
242
+ ------------------
243
+
244
+ .. automodule:: specula.processing_objects.focal_plane_filter
245
+ :members:
246
+ :undoc-members:
247
+ :show-inheritance:
248
+
249
+
250
+ Four Quadrant Coronagraph
251
+ -------------------------
252
+
253
+ .. automodule:: specula.processing_objects.four_quadrant_coronagraph
254
+ :members:
255
+ :undoc-members:
256
+ :show-inheritance:
257
+
258
+
169
259
  Gain Optimizer
170
260
  --------------
171
261
 
@@ -229,6 +319,15 @@ Low Pass Filter
229
319
  :show-inheritance:
230
320
 
231
321
 
322
+ Lyot Coronagraph
323
+ ----------------
324
+
325
+ .. automodule:: specula.processing_objects.lyot_coronagraph
326
+ :members:
327
+ :undoc-members:
328
+ :show-inheritance:
329
+
330
+
232
331
  Mirror Commands Combinator
233
332
  --------------------------
234
333
 
@@ -301,6 +400,15 @@ Multi Rec Calibrator
301
400
  :show-inheritance:
302
401
 
303
402
 
403
+ Mvm
404
+ ---
405
+
406
+ .. automodule:: specula.processing_objects.mvm
407
+ :members:
408
+ :undoc-members:
409
+ :show-inheritance:
410
+
411
+
304
412
  Optical Gain Estimator
305
413
  ----------------------
306
414
 
@@ -328,6 +436,15 @@ Poly Chrom Sh
328
436
  :show-inheritance:
329
437
 
330
438
 
439
+ Poly Chrom Wfs
440
+ --------------
441
+
442
+ .. automodule:: specula.processing_objects.poly_chrom_wfs
443
+ :members:
444
+ :undoc-members:
445
+ :show-inheritance:
446
+
447
+
331
448
  Poly Crom Pyramid
332
449
  -----------------
333
450
 
@@ -337,6 +454,15 @@ Poly Crom Pyramid
337
454
  :show-inheritance:
338
455
 
339
456
 
457
+ Power Loss
458
+ ----------
459
+
460
+ .. automodule:: specula.processing_objects.power_loss
461
+ :members:
462
+ :undoc-members:
463
+ :show-inheritance:
464
+
465
+
340
466
  Psf
341
467
  ---
342
468
 
@@ -454,6 +580,24 @@ Sn Calibrator
454
580
  :show-inheritance:
455
581
 
456
582
 
583
+ Spot Monitor
584
+ ------------
585
+
586
+ .. automodule:: specula.processing_objects.spot_monitor
587
+ :members:
588
+ :undoc-members:
589
+ :show-inheritance:
590
+
591
+
592
+ Ssr Filter
593
+ ----------
594
+
595
+ .. automodule:: specula.processing_objects.ssr_filter
596
+ :members:
597
+ :undoc-members:
598
+ :show-inheritance:
599
+
600
+
457
601
  Time History Generator
458
602
  ----------------------
459
603
 
@@ -472,6 +616,15 @@ Vibration Generator
472
616
  :show-inheritance:
473
617
 
474
618
 
619
+ Vortex Coronagraph
620
+ ------------------
621
+
622
+ .. automodule:: specula.processing_objects.vortex_coronagraph
623
+ :members:
624
+ :undoc-members:
625
+ :show-inheritance:
626
+
627
+
475
628
  Wave Generator
476
629
  --------------
477
630
 
@@ -10,12 +10,24 @@ import os
10
10
  import sys
11
11
  import re
12
12
  sys.path.insert(0, os.path.abspath('..'))
13
- from specula.__version__ import __version__
14
13
 
15
14
  project = 'SPECULA'
16
15
  copyright = '2025, Fabio Rossi, Alfio Puglisi, Guido Agapito'
17
16
  author = 'Fabio Rossi, Alfio Puglisi, Guido Agapito'
18
17
 
18
+ # Read version from _version.py (generated by setuptools_scm)
19
+ try:
20
+ from specula._version import version as __version__
21
+ except ImportError:
22
+ # fallback: read from pyproject.toml if _version.py is missing (e.g. on RTD)
23
+ try:
24
+ import tomllib
25
+ except ImportError:
26
+ import toml as tomllib
27
+ with open(os.path.join(os.path.dirname(__file__), '..', 'pyproject.toml'), 'rb') as f:
28
+ pyproject = tomllib.load(f)
29
+ __version__ = pyproject['project']['version']
30
+
19
31
  # -- General configuration ---------------------------------------------------
20
32
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
21
33
 
@@ -21,6 +21,7 @@ Getting Started
21
21
 
22
22
  Installation <installation>
23
23
  Simulation basics <simulation_basics>
24
+ Simulation parameters <simulation_parameters>
24
25
  Running simulations <running_simulations>
25
26
  Diagrams <simul_diagrams>
26
27
  Calibration manager <calibration_manager>
@@ -35,6 +36,7 @@ Tutorials
35
36
  Deformable Mirror actuator step response tutorial <tutorials/step_response_tutorial>
36
37
  Field Analyser (deferred computation of PSF, modal analysis and phase cube) tutorial <tutorials/field_analyser_tutorial>
37
38
  Pyramid WFS calibration in partial correction regime tutorial <tutorials/pwfs_calib_pc_tutorial>
39
+ Generators for vibrations and time histories tutorial <tutorials/generators_tutorial>
38
40
 
39
41
  Developer Guide
40
42
  ---------------
@@ -47,8 +47,19 @@ If you have a CUDA-compatible GPU and want to benefit from GPU acceleration, ins
47
47
  **Without GPU:**
48
48
  SPECULA will automatically fall back to CPU computation using NumPy. Performance will be slower but all functionality remains available.
49
49
 
50
- Step 3: Clone SPECULA Repository
51
- --------------------------------
50
+ Step 3: Install SPECULA
51
+ -----------------------
52
+
53
+ You can install SPECULA in two ways:
54
+
55
+ **A) Install from PyPI (recommended for most users):**
56
+
57
+ .. code-block:: bash
58
+
59
+ # Install SPECULA from PyPI
60
+ pip install specula
61
+
62
+ **B) Install from source (for development or latest features):**
52
63
 
53
64
  Clone the SPECULA repository from GitHub:
54
65
 
@@ -56,24 +67,16 @@ Clone the SPECULA repository from GitHub:
56
67
 
57
68
  # Clone the repository
58
69
  git clone https://github.com/ArcetriAdaptiveOptics/SPECULA.git
59
-
70
+
60
71
  # Navigate to the directory
61
72
  cd SPECULA
62
73
 
63
- **Alternative: Download ZIP**
64
- If you don't have Git installed, you can download the repository as a ZIP file from the GitHub page and extract it.
65
-
66
- Step 4: Install SPECULA
67
- -----------------------
68
-
69
- Install SPECULA and its dependencies:
74
+ Then install in development mode:
70
75
 
71
76
  .. code-block:: bash
72
77
 
73
- # Install in development mode (recommended)
74
78
  pip install -e .
75
79
 
76
-
77
80
  This installs SPECULA in "editable" mode, allowing you to modify the code and see changes immediately.
78
81
 
79
82
  **Required Dependencies:**
@@ -86,7 +89,6 @@ All required dependencies will be installed automatically, including:
86
89
  * **flask**: Web framework for display server
87
90
  * **flask-socketio**: Real-time web communication
88
91
  * **python-socketio**: WebSocket client support
89
- * **scikit-image**: Image processing
90
92
 
91
93
  Optional Libraries
92
94
  ^^^^^^^^^^^^^^^^^^
@@ -104,8 +106,14 @@ To install these libraries, first install pkg-config and cairo with conda:
104
106
  # Install dependencies for optional diagram tools
105
107
  conda install -c conda-forge pkg-config cairo
106
108
 
109
+ To ensure that the correct version of pycairo is installed, use conda:
110
+
111
+ .. code-block:: bash
112
+
113
+ # Install pycairo version 1.21.0
114
+ conda install -c conda-forge pycairo=1.21.0
115
+
107
116
  and then install orthogram with pip.
108
- pycairo will be installed as an orthogram dependency.
109
117
 
110
118
  .. code-block:: bash
111
119
 
@@ -6,3 +6,4 @@ sphinx_rtd_theme
6
6
  pydata_sphinx_theme
7
7
  myst-parser
8
8
  lxml_html_clean
9
+ toml