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.
- {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/publish.yml +6 -11
- specula-1.0.1/.github/workflows/pythonpackage.yml +68 -0
- {specula-1.0.0a10 → specula-1.0.1}/.readthedocs.yaml +2 -1
- {specula-1.0.0a10 → specula-1.0.1}/PKG-INFO +23 -12
- {specula-1.0.0a10 → specula-1.0.1}/README.md +22 -10
- {specula-1.0.0a10 → specula-1.0.1}/docs/api/data_objects.rst +9 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/api/lib.rst +27 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/api/processing_objects.rst +153 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/conf.py +13 -1
- {specula-1.0.0a10 → specula-1.0.1}/docs/index.rst +2 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/installation.rst +22 -14
- {specula-1.0.0a10 → specula-1.0.1}/docs/requirements.txt +1 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/simulation_basics.rst +68 -9
- specula-1.0.1/docs/simulation_parameters.rst +178 -0
- specula-1.0.1/docs/tutorials/field_analyser_tutorial.rst +386 -0
- specula-1.0.1/docs/tutorials/generators_tutorial.rst +104 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/scao_basic_tutorial.rst +16 -1
- {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/scao_tutorial.rst +18 -4
- {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/step_response_tutorial.rst +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/requirements.txt +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/__init__.py +3 -2
- {specula-1.0.0a10 → specula-1.0.1}/specula/_version.py +3 -3
- {specula-1.0.0a10 → specula-1.0.1}/specula/base_value.py +1 -4
- {specula-1.0.0a10 → specula-1.0.1}/specula/calib_manager.py +5 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/electric_field.py +2 -2
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/iir_filter_data.py +9 -6
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/intensity.py +1 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/layer.py +2 -2
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/m2c.py +10 -5
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pixels.py +1 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pupilstop.py +1 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/slopes.py +1 -1
- specula-1.0.1/specula/data_objects/ssr_filter_data.py +442 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/base_display.py +17 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/plot_display.py +37 -3
- specula-1.0.1/specula/lib/calc_geometry.py +97 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_noise_cov_elong.py +65 -43
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_zonal_ifunc.py +56 -28
- specula-1.0.1/specula/lib/extrapolation_2d.py +371 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/interp2d.py +19 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/mmse_reconstructor.py +12 -7
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/modal_base_generator.py +18 -15
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/utils.py +81 -6
- specula-1.0.1/specula/processing_objects/abstract_coronagraph.py +199 -0
- specula-1.0.1/specula/processing_objects/apodizer_coronagraph.py +232 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_evolution.py +103 -25
- specula-1.0.1/specula/processing_objects/atmo_evolution_up_down.py +160 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_infinite_evolution.py +40 -2
- specula-1.0.1/specula/processing_objects/atmo_infinite_evolution_up_down.py +265 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_propagation.py +157 -66
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/atmo_random_phase.py +25 -0
- specula-1.0.1/specula/processing_objects/base_filter.py +134 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_slicer.py +16 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/ccd.py +67 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_source.py +10 -7
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_store.py +49 -20
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/dm.py +46 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/electric_field_reflection.py +1 -1
- specula-1.0.1/specula/processing_objects/ext_source_pyramid.py +467 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/extended_source.py +62 -23
- specula-1.0.1/specula/processing_objects/focal_plane_filter.py +38 -0
- specula-1.0.1/specula/processing_objects/four_quadrant_coronagraph.py +56 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/ideal_derivative_sensor.py +20 -35
- specula-1.0.1/specula/processing_objects/iir_filter.py +96 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/im_calibrator.py +1 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/integrator.py +8 -7
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/low_pass_filter.py +2 -4
- specula-1.0.1/specula/processing_objects/lyot_coronagraph.py +67 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modalrec.py +15 -5
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modalrec_implicit_polc.py +24 -26
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modulated_pyramid.py +166 -182
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/psf.py +24 -1
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/psf_coronagraph.py +18 -6
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/pyr_pupdata_calibrator.py +2 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh.py +21 -114
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh_slopec.py +7 -2
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/slopec.py +14 -6
- specula-1.0.1/specula/processing_objects/ssr_filter.py +81 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/vibration_generator.py +10 -5
- specula-1.0.1/specula/processing_objects/vortex_coronagraph.py +73 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/zernike_sensor.py +5 -40
- specula-1.0.1/specula/scripts/specula_main.py +46 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/PKG-INFO +23 -12
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/SOURCES.txt +22 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/requires.txt +0 -1
- specula-1.0.1/test/test_app_coronagraph.py +177 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_evolution.py +0 -1
- specula-1.0.1/test/test_atmo_evolution_up_down.py +390 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_infinite_evolution.py +0 -1
- specula-1.0.1/test/test_atmo_infinite_evolution_up_down.py +589 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_random_phase.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_data_obj.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_operation.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_processing_obj.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_slicer.py +43 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_time_obj.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_base_value.py +0 -3
- {specula-1.0.0a10 → specula-1.0.1}/test/test_calib_manager.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_ccd.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_connections.py +0 -2
- specula-1.0.1/test/test_cov_elong.py +265 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_data_objects.py +3 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_data_source.py +111 -5
- {specula-1.0.0a10 → specula-1.0.1}/test/test_data_store.py +91 -6
- {specula-1.0.0a10 → specula-1.0.1}/test/test_diagram.py +3 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_display.py +154 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_display_server.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_distributed_sh.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_dm.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof_slopec.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_electric_field.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_elt_m1_ifunc.py +0 -1
- specula-1.0.1/test/test_ext_source_pyr.py +924 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_extended_source.py +2 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_extrapolation_2d.py +15 -15
- specula-1.0.1/test/test_filter_equivalence.py +329 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_focal_plane_filter.py +9 -8
- specula-1.0.1/test/test_four_quadrant_coronagraph.py +347 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_fsoc_lib.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_generators.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_ifunc.py +104 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_ifunc_inv.py +4 -0
- specula-1.0.1/test/test_iircontrol.py +306 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_iirfilter.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_import_class.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_intensity.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_intmat.py +0 -3
- {specula-1.0.0a10 → specula-1.0.1}/test/test_laser_launch_telescope.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_layer.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_lenslet.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_loop_control.py +0 -1
- specula-1.0.1/test/test_lyot_coronagraph.py +284 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_m2c.py +4 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_pushpull_signal.py +4 -0
- specula-1.0.1/test/test_modalrec.py +616 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_mvm.py +0 -1
- specula-1.0.1/test/test_physical_propagation.py +167 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pixels.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_process_utils.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pupdata.py +3 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pupilstop.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr.py +290 -35
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_slopec.py +0 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_recmat.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_slopec.py +51 -1
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_subap_calibrator.py +3 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_simul.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_simul_params.py +4 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_slopes.py +1 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_source.py +0 -2
- specula-1.0.1/test/test_ssrcontrol.py +427 -0
- specula-1.0.1/test/test_ssrfilter.py +426 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_subapdata.py +3 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_time_history.py +0 -2
- {specula-1.0.0a10 → specula-1.0.1}/test/test_utils.py +0 -2
- specula-1.0.1/test/test_vortex_coronagraph.py +255 -0
- specula-1.0.0a10/.github/workflows/pythonpackage.yml +0 -58
- specula-1.0.0a10/docs/tutorials/field_analyser_tutorial.rst +0 -169
- specula-1.0.0a10/specula/lib/extrapolation_2d.py +0 -172
- specula-1.0.0a10/specula/processing_objects/ext_source_pyramid.py +0 -169
- specula-1.0.0a10/specula/processing_objects/focal_plane_filter.py +0 -263
- specula-1.0.0a10/specula/processing_objects/iir_filter.py +0 -197
- specula-1.0.0a10/specula/scripts/specula_main.py +0 -31
- specula-1.0.0a10/test/test_cov_elong.py +0 -109
- specula-1.0.0a10/test/test_ext_source_pyr.py +0 -278
- specula-1.0.0a10/test/test_iircontrol.py +0 -144
- specula-1.0.0a10/test/test_modalrec.py +0 -156
- specula-1.0.0a10/test/test_physical_propagation.py +0 -65
- {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackageW.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackage_full.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/.github/workflows/pythonpackage_fullW.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/.gitignore +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/LICENSE +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ANDES/params_andes.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ANDES/params_andes_1kHz.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_ngs_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_ngs_subaps.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_rec_lgs.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_rec_lo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/calib_eris_subaps.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/eris_lgsonly.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris_ngs.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/ERIS/params_eris_ngs_ut4pupil.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_im.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_scao_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_small_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_small_rec_override.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/calib_morfeo_subaps.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/override_morfeo_focus_ref_2gpus.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/override_morfeo_no_focus_no_ref_2gpus.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_focus_ref.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_full.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_ltao.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_ltao_plots.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_no_focus_no_ref.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_no_na_no_focus_no_ref.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_scao_plots.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/MORFEO/params_morfeo_small.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/ov_add_display.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/params_pyr_soul.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/SOUL/params_pyr_soul_basic.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptANDES +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptERIS +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpi +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpiDistributed4 +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptMorfeoMpiSpread +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptSOULCPU +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptSOULGPU +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/jobScripts/jobScriptScao +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_ANDES_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_ERIS_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo_ds4.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_MORFEO_leonardo_spread.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_SOUL_CPU_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_SOUL_GPU_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/leonardo/overrides/ov_scao_leonardo.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/extract_filenames.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/gandalf.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/gandalf_mpi.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_petals_ol.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_random_phase.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/params_atmo_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/params_control_lpf.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/other/params_test_comb.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/im/scao_recmat.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/pupils/scao_pup.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/rec/scao_recmat.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib/SCAO/slopenulls/scao_sn.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_atmo_random_phase_pupdata.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_ltao_sh_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_pyr_pupdata.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_pyr_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_scao_pupdata.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_scao_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_sh_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/calib_sh_subaps.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_elt.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_elt_plots.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_plots.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_pyr.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_pyr_extended.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_sh.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/params_scao_sh_plots.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/runAll.sh +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/config/scao/sncalib.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/Makefile +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_control_lpf.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_scao_sh.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/diagrams/params_scao_sh_colors.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/DM_shapes.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/SR.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/modal_plot.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/_static/tutorial/singular_values.png +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/api/base_classes.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/base_classes.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/calibration_manager.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/data_objects.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/development.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/make.bat +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/processing_objects.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/readme.txt +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/running_simulations.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/scripts/generate_api_docs.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/simul_diagrams.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/docs/tutorials/pwfs_calib_pc_tutorial.rst +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/pyproject.toml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/setup.cfg +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/base_data_obj.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/base_processing_obj.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/base_time_obj.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/connections.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data/EltM1SegmMap1015pix38570mm.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/__init__.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/convolution_kernel.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/gaussian_convolution_kernel.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/ifunc.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/ifunc_inv.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/infinite_phase_screen.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/intmat.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/laser_launch_telescope.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/lenslet.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/pupdata.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/recmat.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/simul_params.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/source.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/subap_data.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/data_objects/time_history.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/__init__.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/data_plotter.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/double_phase_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/modes_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/phase_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/pixels_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/plot_vector_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/psf_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/pupil_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/display/slopec_display.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/field_analyser.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/ELT_M1_ifunc_calculator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/__init__.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_phasescreen.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_psf.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/calc_spatialfrequency.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_petal_ifunc.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/compute_zern_ifunc.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/flatten.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/fsoc_lib.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/make_mask.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/make_xy.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/mask.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/modal_pushpull_signal.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/n_phot.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/phasescreen_manager.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/platescale_coeff.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/process_utils.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/rebin.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/toccd.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/lib/zernike_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/loop_control.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/__init__.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/avc.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/base_operation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_buffer.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/data_print.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/demodulator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/display_server.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/distributed_sh.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/double_roof_slopec.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/electric_field_combinator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/gain_optimizer.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/linear_combination.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/mirror_commands_combinator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modal_analysis.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/modulated_double_roof.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/multi_im_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/multi_rec_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/mvm.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/optical_gain_estimator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/phase_flattening.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_chrom_sh.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_chrom_wfs.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/poly_crom_pyramid.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/power_loss.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/push_pull_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/pyr_slopec.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/random_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/rec_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/schedule_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sh_subap_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/sn_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/spot_monitor.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/time_history_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/wave_generator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/processing_objects/windowed_integration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/parse_classes.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/templates/specula_display.html +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/templates/specula_frontend.html +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/scripts/web_frontend.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/simul.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula/template_processing_obj.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/dependency_links.txt +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/entry_points.txt +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/specula.egg-info/top_level.txt +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/README.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/__init__.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/bench_fft.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/bench_fft_numpy.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/calib/pupilstop/EELT480pp0.0803m_obs0.283_spider2023.fits +0 -0
- {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
- {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
- {specula-1.0.0a10 → specula-1.0.1}/test/data/PASSATA_pupilstop_64pix.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/atmo_s0.8asec_L010m_D8m_100modes_rms.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/cov_sh_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/diff_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/input_phase.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/lgs_map_sh_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/mask.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/phase.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_phase.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_crop_intensity.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_crop_slopes.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_intensity.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_phase.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/ref_test_morfeo_slopes.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/res_sr_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_im_20modes_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_pupdata_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_dr_rec_20modes_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_im_n8_th0.5_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_pupdata_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_rec_n8_th0.5_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_sn_n8_th0.5_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/scao_subaps_n8_th0.5_ref.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/data/timehistory_test.fits +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_atmo_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_demodulator_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_elt_pfs_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_field_analyser_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_gain_optimizer.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_low_pass_filter_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_optical_gain_estimator_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_platescale_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_pyr_ol_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test_pupdata.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_dr_test_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_pyr_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_pyr_test_pupdata.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_rec.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_sn.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_scao_sh_test_subap.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_timehistory_test.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/params_trigger_zero.yml +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/specula_testlib.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_propagation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_atmo_simulation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_calc_psf.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_compute_ifs_covmat.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_compute_zonal_ifunc.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_convolution_kernel.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_data_buffer.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_data_print.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_demodulator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_double_roof_calibration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_field_analyser.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_gain_optimizer.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_ideal_derivative_sensor.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_im_rec_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_infinite_phase_screen.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_init.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_interp2d.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_linear_combination.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_local_mean_rebin.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_low_pass_filter_simulation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_make_mask.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_make_xy.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_mask.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_mmse_reconstructor.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_analysis_simulation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_modal_basis.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_multi_im_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_multi_rec_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_optical_gain_estimator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_phase_flattening.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_platescale.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_poly_chrom_pyramid.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_poly_chrom_sh.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_power_loss.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_psf.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_calibration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_pyr_simulation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_rec_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_calibration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_simulation.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sh_slopec_morfeo.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_sn_calibrator.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_spot_monitor.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_timehistory_integration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_to_xp.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_toccd.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_trigger_zero.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_windowed_integration.py +0 -0
- {specula-1.0.0a10 → specula-1.0.1}/test/test_zernike.py +0 -0
- {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')
|
|
37
|
-
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specula
|
|
3
|
-
Version: 1.0.
|
|
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
|
-
- **
|
|
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
|
-
- **
|
|
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
|
-
- **
|
|
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
|
-
- **
|
|
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:
|
|
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
|
-
|
|
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
|
|