diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed31d85f6..6f3894bea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,14 +18,15 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 - with: - python-version: "3.14" - - name: Run pre-commit - run: | - pip install pre-commit - pre-commit run --files src/**/*.py + - uses: actions/checkout@main + - uses: actions/setup-python@main + with: + python-version: "3.14" + cache: pip + - name: Run pre-commit + run: | + pip install pre-commit + pre-commit run --files $(git ls-files "*.py") no_object_checks: needs: pre-commit @@ -33,30 +34,73 @@ jobs: strategy: fail-fast: false matrix: - python-version: - - "3.11" - - "3.12" - - "3.13" - - "3.14" + python-version: ["3.11", "3.12", "3.13", "3.14"] group: [1, 2, 3] steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@main - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@main with: python-version: ${{ matrix.python-version }} cache: pip + - name: Install dependencies run: | python -m pip install --upgrade pip pip install --editable . --group dev - - name: Test with pytest + + - name: Test with pytest + coverage + if: matrix.python-version == '3.14' run: | - coverage run --source src -m pytest tests/pre_3_10 --splits 3 --group ${{ matrix.group }} - coverage xml - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v6 + coverage run --source src --parallel-mode -m pytest tests/pre_3_10 --splits 3 --group ${{ matrix.group }} + + - name: Test with pytest + if: matrix.python-version != '3.14' + run: pytest tests/pre_3_10 --splits 3 --group ${{ matrix.group }} + + # upload each coverage shard file for combining later + - name: Upload coverage shard + if: matrix.python-version == '3.14' + uses: actions/upload-artifact@main + with: + name: coverage-no-objects-group-${{ matrix.group }} + path: .coverage.* + include-hidden-files: true + + # combine the three shards before uploading to codecov + coverage_no_objects: + needs: no_object_checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + + - uses: actions/setup-python@main + with: + python-version: "3.14" + cache: pip + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install --editable . --group dev + + - name: Download coverage shards + uses: actions/download-artifact@main + with: + pattern: coverage-no-objects-group-* + merge-multiple: true + + - name: Combine and export coverage + run: | + coverage combine + coverage xml + + - name: Upload to Codecov + uses: codecov/codecov-action@main + with: + flags: no_objects # distinguishes this suite in the Codecov UI + token: ${{ secrets.CODECOV_TOKEN }} objects_check: needs: pre-commit @@ -67,19 +111,31 @@ jobs: python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@main - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@main with: python-version: ${{ matrix.python-version }} cache: pip + - name: Install dependencies run: | python -m pip install --upgrade pip pip install --editable . --group dev - - name: Test with pytest + + - name: Test with pytest + coverage + if: matrix.python-version == '3.14' run: | coverage run --source=src/vip_hci/objects/ -m pytest tests/post_3_10 coverage xml - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v6 + + - name: Test with pytest + if: matrix.python-version != '3.14' + run: pytest tests/post_3_10 + + - name: Upload to Codecov + if: matrix.python-version == '3.14' + uses: codecov/codecov-action@main + with: + flags: objects + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.test_durations b/.test_durations index 4d1581d6f..f846beb46 100644 --- a/.test_durations +++ b/.test_durations @@ -1,396 +1,200 @@ { - "tests/pre_3_10/test_conf.py::test_check_array": 0.0009448270002394565, - "tests/pre_3_10/test_conf.py::test_check_enough_memory": 0.001534232000267366, - "tests/pre_3_10/test_dataset.py::test_saveable_dataset": 0.026163340000493918, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-1br-2]": 0.002074555000035616, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-2]": 0.002946827000414487, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-[1,2]]": 0.003803053999945405, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-1br-2]": 0.002419510999970953, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-2]": 0.0031940179997036466, - "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-[1,2]]": 0.005085348999273265, - "tests/pre_3_10/test_fm_fakecomp.py::test_normalize_psf_shapes": 0.13249760600047011, - "tests/pre_3_10/test_fm_fakedisk.py::test_cube_inject_fakedisk[3D]": 0.007264263001161453, - "tests/pre_3_10/test_fm_fakedisk.py::test_cube_inject_trace[3D]": 0.003873825999107794, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[median_sub-firstguess-None-False-sum-False-None]": 17.36409372700291, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca-firstguess-3-True-None-False-None]": 4805.008413951999, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annular-firstguess-3-False-stddev-False-None]": 276.1521137669988, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-3-False-stddev-False-gb]": 3189.4055685210005, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-3-True-None-True-ac]": 13.455389487999128, - "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-nested_negfc_sampling-3-False-sum-False-None]": 391.0898957319987, - "tests/pre_3_10/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-False-sum]": 104.96475922899845, - "tests/pre_3_10/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-True-None]": 107.45344228199974, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.4]": 0.1610931730010634, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.9]": 0.15798255700065056, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0]": 0.15326452199951746, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.2]": 0.09817494099843316, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.4]": 0.09790049499861198, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.9]": 0.09735819299930881, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[55]": 0.0018734090008365456, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[60]": 0.0017114679976657499, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[65]": 0.0011796740000136197, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[10]": 0.07189100700270501, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[20]": 0.07324782299838262, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[60]": 0.07598692000101437, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[0]": 0.35001708200070425, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[30]": 0.35262140599843406, - "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[60]": 0.3456563069994445, - "tests/pre_3_10/test_metrics_completeness.py::test_completeness_curve": 95.78075984799943, - "tests/pre_3_10/test_metrics_completeness.py::test_completeness_map": 512.084328797002, - "tests/pre_3_10/test_metrics_contrcurve.py::test_contrast_curve": 31.345007147001525, - "tests/pre_3_10/test_metrics_detection.py::test_detection_dog": 0.06214700199961953, - "tests/pre_3_10/test_metrics_detection.py::test_detection_log": 3.536986305998653, - "tests/pre_3_10/test_metrics_detection.py::test_detection_lpeaks": 0.12510709000162024, - "tests/pre_3_10/test_metrics_detection.py::test_detection_snrmap": 1.3919314830018266, - "tests/pre_3_10/test_metrics_snr.py::test_frame_report": 0.040421667999908095, - "tests/pre_3_10/test_metrics_snr.py::test_snrmap_fast": 1.0066158919998998, - "tests/pre_3_10/test_metrics_snr.py::test_snrmap_masked": 10.020044711998707, - "tests/pre_3_10/test_metrics_snr.py::test_snrmap_sss": 13.025515498999084, - "tests/pre_3_10/test_metrics_stim.py::test_normstimmap": 2.6724075249985617, - "tests/pre_3_10/test_metrics_stim.py::test_stimmap": 2.82266785200045, - "tests/pre_3_10/test_pca_svd.py::test_svd_recons": 0.001310138999542687, - "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[fast_paco-None]": 290.063934429003, - "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[fast_paco_parallel-None]": 282.0075367540012, - "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[full_paco-None]": 344.7504089419999, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf-snrmap_fast]": 19.862909896002748, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf_annular_ardi-snrmap_fast]": 121.84820888100148, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf_annular_rdi-snrmap_fast]": 306.5563052380003, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca-snrmap_fast]": 6.398729093001748, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_annular_ardi-snrmap_fast]": 11.65438401099891, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_annular_rdi-snrmap_fast]": 6.808081585000764, - "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_mask-snrmap_fast]": 4.607050608998179, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[medsub-None]": 6.45876743000008, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[medsub_annular-None]": 0.016447748997961753, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_annular-None]": 0.003346259998579626, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_double-snrmap_fast]": 19.243675446999987, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_double_left_eigv-snrmap_fast]": 19.254295025999454, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_single-snrmap_fast]": 18.890561857999273, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_single_left_eigv-snrmap_fast]": 20.894869393998306, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[xloci-snrmap_fast]": 149.57750667099754, - "tests/pre_3_10/test_pipeline_sdi.py::test_algos[xloci_double-snrmap_fast]": 127.04142911000235, - "tests/pre_3_10/test_preproc_badframes.py::test_badfr_corr": 0.01414775899866072, - "tests/pre_3_10/test_preproc_badframes.py::test_badfr_ellip": 0.0977754420000565, - "tests/pre_3_10/test_preproc_badframes.py::test_badfr_pxstat": 0.03702596400034963, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ann": 1.1866403499971057, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_clump": 3.427470025002549, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ifs1": 34.93476781699974, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ifs2": 46.02538736400129, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_iso": 0.5979241429995454, - "tests/pre_3_10/test_preproc_badpix.py::test_badpix_iso2": 0.16118322300098953, - "tests/pre_3_10/test_preproc_cosmetics.py::test_nan_corr": 0.13528850199872977, - "tests/pre_3_10/test_preproc_recentering.py::test_2d": 3.343562165999174, - "tests/pre_3_10/test_preproc_recentering.py::test_approx_star": 0.007635833999302122, - "tests/pre_3_10/test_preproc_recentering.py::test_dft": 1.1555467760008469, - "tests/pre_3_10/test_preproc_recentering.py::test_dft_image": 0.28606584800036217, - "tests/pre_3_10/test_preproc_recentering.py::test_radon": 272.0342629879997, - "tests/pre_3_10/test_preproc_recentering.py::test_satspots": 0.33523571399928187, - "tests/pre_3_10/test_preproc_recentering.py::test_satspots_image": 1.477167074001045, - "tests/pre_3_10/test_preproc_recentering.py::test_speckle_recentering": 43.3803175990015, - "tests/pre_3_10/test_preproc_rescaling.py::test_check_scal_vector": 0.0023853809980209917, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[ndimage]": 0.09154982800100697, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[opencv]": 0.018606757999805268, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[vip-fft]": 0.03635872999984713, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[ndimage-bicubic]": 26.69963105699935, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[opencv-lanczos4]": 1.6224648269999307, - "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[vip-fft-None]": 26.8797359830005, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[10-0-truth2]": 0.0024708590008231113, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[10-5-truth3]": 0.002311648999238969, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[15-5-truth4]": 0.002333243002794916, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[20-0-truth5]": 0.00235974899987923, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[20-5-truth6]": 0.002299080999364378, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[6-0-truth0]": 0.0028941090022271965, - "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[6-5-truth1]": 0.0023149749995354796, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-False]": 0.021702632000597077, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-True]": 0.0484420989996579, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[opencv-False]": 0.0024607270024716854, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[opencv-True]": 0.01040640999963216, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-False]": 0.007047534998491756, - "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-True]": 0.008221808999223867, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[opencv-lanczos4-edge-interp+noise]": 5.661295323998274, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[skimage-bicubic-symmetric-interp+noise]": 6.528927044999364, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[skimage-biquintic-wrap-noise]": 4.134889907998513, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-constant-None]": 11.366637096001796, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-reflect-noise]": 11.34774130400001, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[opencv-lanczos4-edge-interp-True]": 0.8408915409982001, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[skimage-biquintic-reflect-interp-True]": 0.9548094319998199, - "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[vip-fft-None-reflect-interp-True]": 2.8095160129978467, - "tests/pre_3_10/test_preproc_rotation.py::test_define_annuli": 0.0015279170002031606, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[0-None-0-0-10-truth0]": 0.0019067350003751926, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[1-None-0-0-10-truth1]": 0.0015988260020094458, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[2-None-0-0-10-truth2]": 0.002223619001597399, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-2-0-0-10-truth5]": 0.002260377001221059, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-0-0-10-truth3]": 0.001400012999511091, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-0-1-3-truth6]": 0.0018798790024447953, - "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-1-0-10-truth4]": 0.0018679070017242339, - "tests/pre_3_10/test_var_filters.py::test_fft_ifft": 0.001822432002882124, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-fourier-butter]": 0.0024502610012859805, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-gauss-subt]": 0.011576506998608238, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-hann]": 0.0033006289977492997, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-laplacian-conv]": 0.005050226998719154, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-laplacian]": 0.030853374000798794, - "tests/pre_3_10/test_var_filters.py::test_highpass[cube-median-subt]": 0.0025729600001795916, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-fourier-butter]": 0.00167807399884623, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-gauss-subt]": 0.00338047699915478, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-hann]": 0.0019868239996867487, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-laplacian-conv]": 0.001754527000230155, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-laplacian]": 0.0010262700016028248, - "tests/pre_3_10/test_var_filters.py::test_highpass[frame-median-subt]": 0.0019242449998273514, - "tests/pre_3_10/test_var_filters.py::test_iuwt": 0.006769059002181166, - "tests/pre_3_10/test_var_filters.py::test_lowpass[cube-gauss]": 0.00802666899835458, - "tests/pre_3_10/test_var_filters.py::test_lowpass[cube-median]": 0.002670714000487351, - "tests/pre_3_10/test_var_filters.py::test_lowpass[frame-gauss]": 0.0051250699998490745, - "tests/pre_3_10/test_var_filters.py::test_lowpass[frame-median]": 0.0025299549979536096, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf6]": 0.01987549899786245, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf7]": 0.01865028199972585, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf6]": 0.02218952500152227, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf7]": 0.017652140999416588, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf6]": 0.027119262002088362, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf7]": 0.013662445997397299, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf6]": 0.0172825150002609, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf7]": 0.016195119000258273, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf6]": 0.021606002002954483, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf7]": 0.013886079001167673, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf6]": 0.03164963899871509, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf7]": 0.02396839800167072, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf6]": 0.008963004001998343, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf7]": 0.007484834000933915, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf6]": 0.012648497002373915, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf7]": 0.011188931999640772, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf6]": 0.014308929998151143, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf7]": 0.00974052800120262, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf6]": 0.012497965997681604, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf7]": 0.01399728700198466, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf6]": 0.01309957199919154, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf7]": 0.01285285800076963, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf6]": 0.014039486999536166, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf7]": 0.012562383999465965, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf6]": 0.048031668997282395, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf7]": 0.08193094499984, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf6]": 0.06174955700225837, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf7]": 0.06107741899904795, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf6]": 0.06176479699934134, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf7]": 0.06785372000194911, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf6]": 0.07068675200025609, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf7]": 0.061865867999586044, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf6]": 0.06286695699964184, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf7]": 0.062397568000960746, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf6]": 0.061898528001620434, - "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf7]": 0.06676266099930217, - "tests/pre_3_10/test_var_shapes.py::test_dist": 0.000929418998566689, - "tests/pre_3_10/test_var_shapes.py::test_frame_center": 0.0011740280024241656, - "tests/pre_3_10/test_var_shapes.py::test_get_annulus_segments": 0.010767210000267369, - "tests/pre_3_10/test_var_shapes.py::test_get_circle": 0.0018772719995467924, - "tests/pre_3_10/test_var_shapes.py::test_get_ell_annulus": 0.014397106000615167, - "tests/pre_3_10/test_var_shapes.py::test_get_ellipse": 0.0014451360002567526, - "tests/pre_3_10/test_var_shapes.py::test_get_square": 0.002706588000364718, - "tests/pre_3_10/test_var_shapes.py::test_mask_circle": 0.0022330100000544917, - "tests/pre_3_10/test_var_shapes.py::test_mask_roi": 0.015965314998538815, - "tests/pre_3_10/test_var_shapes.py::test_matrix_scaling": 0.012037608998070937, - "tests/pre_3_10/test_var_shapes.py::test_reshape_matrix": 0.0017275110021728324, - "tests/test_conf.py::test_check_array": 0.0005478590028360486, - "tests/test_conf.py::test_check_enough_memory": 0.001337704001343809, - "tests/test_dataset.py::test_saveable_dataset": 0.04254682899772888, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[3D-1br-2]": 0.0019624939959612675, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-2]": 0.002057845995295793, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-[1,2]]": 0.003309196006739512, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[4D-1br-2]": 0.002606368994747754, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-2]": 0.003344596996612381, - "tests/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-[1,2]]": 0.004689979003160261, - "tests/test_fm_fakecomp.py::test_normalize_psf_shapes": 0.1765680020034779, - "tests/test_fm_fakedisk.py::test_cube_inject_fakedisk[3D]": 0.006020644003001507, - "tests/test_fm_fakedisk.py::test_cube_inject_trace[3D]": 0.0027449599947431125, - "tests/test_fm_negfc_3d.py::test_algos[median_sub-firstguess-None-False-sum-False-None]": 16.383845476004353, - "tests/test_fm_negfc_3d.py::test_algos[pca-firstguess-3-True-None-False-None]": 3587.698236803997, - "tests/test_fm_negfc_3d.py::test_algos[pca_annular-firstguess-3-False-stddev-False-None]": 212.4349538000024, - "tests/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-3-False-stddev-False-gb]": 2799.9476269130028, - "tests/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-3-True-None-True-ac]": 13.827688016004686, - "tests/test_fm_negfc_3d.py::test_algos[pca_annulus-nested_negfc_sampling-3-False-sum-False-None]": 369.1831499519976, - "tests/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-False-sum]": 102.12395562999882, - "tests/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-True-None]": 123.20503347999329, - "tests/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.4]": 0.1556456670004991, - "tests/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.9]": 0.15991124999709427, - "tests/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0]": 0.15977310499874875, - "tests/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.2]": 0.11473830499016913, - "tests/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.4]": 0.12311313099780818, - "tests/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.9]": 0.12366574900079286, - "tests/test_fm_scatteredlightdisk.py::test_dust_distribution[55]": 0.0020541309932013974, - "tests/test_fm_scatteredlightdisk.py::test_dust_distribution[60]": 0.0016885739969438873, - "tests/test_fm_scatteredlightdisk.py::test_dust_distribution[65]": 0.0016695769954822026, - "tests/test_fm_scatteredlightdisk.py::test_homemade_phase_function[10]": 0.07266926599550061, - "tests/test_fm_scatteredlightdisk.py::test_homemade_phase_function[20]": 0.10624967400508467, - "tests/test_fm_scatteredlightdisk.py::test_homemade_phase_function[60]": 0.08437122399482178, - "tests/test_fm_scatteredlightdisk.py::test_scattered_light_disk[0]": 0.4203019850101555, - "tests/test_fm_scatteredlightdisk.py::test_scattered_light_disk[30]": 0.3771646600071108, - "tests/test_fm_scatteredlightdisk.py::test_scattered_light_disk[60]": 0.3469981180023751, - "tests/test_metrics_completeness.py::test_completeness_curve": 99.09845302100439, - "tests/test_metrics_completeness.py::test_completeness_map": 531.5476681250075, - "tests/test_metrics_contrcurve.py::test_contrast_curve": 35.27067286500096, - "tests/test_metrics_detection.py::test_detection_dog": 0.0625114779904834, - "tests/test_metrics_detection.py::test_detection_log": 3.158268997001869, - "tests/test_metrics_detection.py::test_detection_lpeaks": 0.11615097100002458, - "tests/test_metrics_detection.py::test_detection_snrmap": 1.5615908250038046, - "tests/test_metrics_snr.py::test_frame_report": 0.046925796996220015, - "tests/test_metrics_snr.py::test_snrmap_fast": 1.094369842998276, - "tests/test_metrics_snr.py::test_snrmap_masked": 13.740910022002936, - "tests/test_metrics_snr.py::test_snrmap_sss": 12.804493720002938, - "tests/test_metrics_stim.py::test_normstimmap": 3.316021702004946, - "tests/test_metrics_stim.py::test_stimmap": 3.2968005210059346, - "tests/test_objects_postproc.py::test_postproc_object": 0.0011846479974337853, - "tests/test_objects_ppandromeda.py::test_andromeda_object": 54.21797408400744, - "tests/test_objects_ppfmmf.py::test_fmmf_object": 742.3913186659993, - "tests/test_objects_ppframediff.py::test_frame_diff_object": 105.27625574999547, - "tests/test_objects_ppllsg.py::test_llsg_object": 21.339113878995704, - "tests/test_objects_pploci.py::test_loci_object": 21.46833068500564, - "tests/test_objects_ppmediansub.py::test_median_object": 25.99911278100626, - "tests/test_objects_ppnmf.py::test_nmf_object": 34.866835852000804, - "tests/test_objects_ppresult.py::test_results_object": 0.001038175993016921, - "tests/test_pca_svd.py::test_svd_recons": 0.0012604270013980567, - "tests/test_pipeline_adi.py::test_algos[nmf_drot-snrmap_fast]": 9.4103381659952, - "tests/test_pipeline_adi.py::test_algos[pca-snrmap_fast]": 4.165871563011024, - "tests/test_pipeline_adi.py::test_algos[pca_annular-snrmap_fast]": 15.61298867300502, - "tests/test_pipeline_adi.py::test_algos[pca_annular_auto-snrmap_fast]": 11.790516012006265, - "tests/test_pipeline_adi.py::test_algos[pca_annular_left_eigv-snrmap_fast]": 4.521124949998921, - "tests/test_pipeline_adi.py::test_algos[pca_cevr-snrmap_fast]": 4.187706750009966, - "tests/test_pipeline_adi.py::test_algos[pca_drot-snrmap_fast]": 5.395761407999089, - "tests/test_pipeline_adi.py::test_algos[pca_grid-snrmap_fast]": 7.735841492001782, - "tests/test_pipeline_adi.py::test_algos[pca_incremental-snrmap_fast]": 4.279849206002837, - "tests/test_pipeline_adi.py::test_algos[pca_left_eigv-snrmap_fast]": 4.16403818300023, - "tests/test_pipeline_adi.py::test_algos[pca_linalg-snrmap_fast]": 4.193861560997902, - "tests/test_pipeline_adi_paco.py::test_algos[fast_paco-None]": 242.91810687399993, - "tests/test_pipeline_adi_paco.py::test_algos[fast_paco_parallel-None]": 242.17992068199965, - "tests/test_pipeline_adi_paco.py::test_algos[full_paco-None]": 303.46074085200235, - "tests/test_pipeline_rdi.py::test_algos[nmf-snrmap_fast]": 17.098258872996666, - "tests/test_pipeline_rdi.py::test_algos[nmf_annular_ardi-snrmap_fast]": 102.69364638800471, - "tests/test_pipeline_rdi.py::test_algos[nmf_annular_rdi-snrmap_fast]": 232.31257168999582, - "tests/test_pipeline_rdi.py::test_algos[pca-snrmap_fast]": 3.7163461000018287, - "tests/test_pipeline_rdi.py::test_algos[pca_annular_ardi-snrmap_fast]": 9.541529852001986, - "tests/test_pipeline_rdi.py::test_algos[pca_annular_rdi-snrmap_fast]": 6.193175578009686, - "tests/test_pipeline_rdi.py::test_algos[pca_mask-snrmap_fast]": 3.685963436997554, - "tests/test_pipeline_sdi.py::test_algos[medsub-None]": 11.741573842002254, - "tests/test_pipeline_sdi.py::test_algos[medsub_annular-None]": 13.089316864003194, - "tests/test_pipeline_sdi.py::test_algos[pca_annular-None]": 26.291766481001105, - "tests/test_pipeline_sdi.py::test_algos[pca_double-snrmap_fast]": 11.357771385002707, - "tests/test_pipeline_sdi.py::test_algos[pca_double_left_eigv-snrmap_fast]": 11.26195947299857, - "tests/test_pipeline_sdi.py::test_algos[pca_single-snrmap_fast]": 10.364334184996551, - "tests/test_pipeline_sdi.py::test_algos[pca_single_left_eigv-snrmap_fast]": 10.095548779005185, - "tests/test_pipeline_sdi.py::test_algos[xloci-snrmap_fast]": 53.46486196200567, - "tests/test_pipeline_sdi.py::test_algos[xloci_double-snrmap_fast]": 53.3047390080028, - "tests/test_preproc_badframes.py::test_badfr_corr": 0.005794941003841814, - "tests/test_preproc_badframes.py::test_badfr_ellip": 0.0453075499899569, - "tests/test_preproc_badframes.py::test_badfr_pxstat": 0.0327247909954167, - "tests/test_preproc_badpix.py::test_badpix_ann": 0.4284383200065349, - "tests/test_preproc_badpix.py::test_badpix_clump": 1.2504187700033071, - "tests/test_preproc_badpix.py::test_badpix_ifs1": 13.924355082002876, - "tests/test_preproc_badpix.py::test_badpix_ifs2": 18.672839683000348, - "tests/test_preproc_badpix.py::test_badpix_iso": 0.24014935499144485, - "tests/test_preproc_badpix.py::test_badpix_iso2": 0.0617066789927776, - "tests/test_preproc_cosmetics.py::test_nan_corr": 0.08099389699782478, - "tests/test_preproc_recentering.py::test_2d": 1.4268684349954128, - "tests/test_preproc_recentering.py::test_approx_star": 0.005706543008273002, - "tests/test_preproc_recentering.py::test_dft": 0.5853288110010908, - "tests/test_preproc_recentering.py::test_dft_image": 0.16169565200834768, - "tests/test_preproc_recentering.py::test_radon": 167.31670553000004, - "tests/test_preproc_recentering.py::test_satspots": 0.24388082399673294, - "tests/test_preproc_recentering.py::test_satspots_image": 0.8743187450018013, - "tests/test_preproc_recentering.py::test_speckle_recentering": 26.783435072997236, - "tests/test_preproc_rescaling.py::test_check_scal_vector": 0.0009582340062479489, - "tests/test_preproc_rescaling.py::test_cube_px_resampling[ndimage]": 0.0634812200005399, - "tests/test_preproc_rescaling.py::test_cube_px_resampling[opencv]": 0.021141450000868645, - "tests/test_preproc_rescaling.py::test_cube_px_resampling[vip-fft]": 0.019049342998187058, - "tests/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[ndimage-bicubic]": 15.95914224799344, - "tests/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[opencv-lanczos4]": 0.874212262002402, - "tests/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[vip-fft-None]": 20.87911807301134, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[10-0-truth2]": 0.0011841349987662397, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[10-5-truth3]": 0.0012779639946529642, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[15-5-truth4]": 0.0014520119948429056, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[20-0-truth5]": 0.0018484270040062256, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[20-5-truth6]": 0.002061452003545128, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[6-0-truth0]": 0.001290357999096159, - "tests/test_preproc_rescaling.py::test_find_indices_sdi[6-5-truth1]": 0.0011638179930741899, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-False]": 0.018266796992975287, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-True]": 0.03101640300883446, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[opencv-False]": 0.0019384729966986924, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[opencv-True]": 0.006017215993779246, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-False]": 0.007700041998759843, - "tests/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-True]": 0.005511285002285149, - "tests/test_preproc_rotation.py::test_cube_derotate[opencv-lanczos4-edge-interp+noise]": 2.4062009349945583, - "tests/test_preproc_rotation.py::test_cube_derotate[skimage-bicubic-symmetric-interp+noise]": 2.7344462069959263, - "tests/test_preproc_rotation.py::test_cube_derotate[skimage-biquintic-wrap-noise]": 1.7738579840006423, - "tests/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-constant-None]": 5.441721644005156, - "tests/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-reflect-noise]": 5.716663314997277, - "tests/test_preproc_rotation.py::test_cube_derotate_mask[opencv-lanczos4-edge-interp-True]": 0.44092079999973066, - "tests/test_preproc_rotation.py::test_cube_derotate_mask[skimage-biquintic-reflect-interp-True]": 0.5505677740002284, - "tests/test_preproc_rotation.py::test_cube_derotate_mask[vip-fft-None-reflect-interp-True]": 1.4792789889979758, - "tests/test_preproc_rotation.py::test_define_annuli": 0.0013405370118562132, - "tests/test_preproc_rotation.py::test_find_indices_adi[0-None-0-0-10-truth0]": 0.0011423100077081472, - "tests/test_preproc_rotation.py::test_find_indices_adi[1-None-0-0-10-truth1]": 0.0010351290038670413, - "tests/test_preproc_rotation.py::test_find_indices_adi[2-None-0-0-10-truth2]": 0.0010601619942463003, - "tests/test_preproc_rotation.py::test_find_indices_adi[3-2-0-0-10-truth5]": 0.0013291589930304326, - "tests/test_preproc_rotation.py::test_find_indices_adi[3-None-0-0-10-truth3]": 0.0010317980049876496, - "tests/test_preproc_rotation.py::test_find_indices_adi[3-None-0-1-3-truth6]": 0.0011210160082555376, - "tests/test_preproc_rotation.py::test_find_indices_adi[3-None-1-0-10-truth4]": 0.0010161519967368804, - "tests/test_var_filters.py::test_fft_ifft": 0.0010948019989882596, - "tests/test_var_filters.py::test_highpass[cube-fourier-butter]": 0.0021522760071093217, - "tests/test_var_filters.py::test_highpass[cube-gauss-subt]": 0.0075769790055346675, - "tests/test_var_filters.py::test_highpass[cube-hann]": 0.002234758998383768, - "tests/test_var_filters.py::test_highpass[cube-laplacian-conv]": 0.008959107006376144, - "tests/test_var_filters.py::test_highpass[cube-laplacian]": 0.029357079998590052, - "tests/test_var_filters.py::test_highpass[cube-median-subt]": 0.00232824900012929, - "tests/test_var_filters.py::test_highpass[frame-fourier-butter]": 0.0012330499885138124, - "tests/test_var_filters.py::test_highpass[frame-gauss-subt]": 0.0017412099987268448, - "tests/test_var_filters.py::test_highpass[frame-hann]": 0.0009258799982490018, - "tests/test_var_filters.py::test_highpass[frame-laplacian-conv]": 0.0012621140049304813, - "tests/test_var_filters.py::test_highpass[frame-laplacian]": 0.000809661993116606, - "tests/test_var_filters.py::test_highpass[frame-median-subt]": 0.0008186620034393854, - "tests/test_var_filters.py::test_iuwt": 0.004064169996127021, - "tests/test_var_filters.py::test_lowpass[cube-gauss]": 0.004810051003005356, - "tests/test_var_filters.py::test_lowpass[cube-median]": 0.00119194999570027, - "tests/test_var_filters.py::test_lowpass[frame-gauss]": 0.002132204004738014, - "tests/test_var_filters.py::test_lowpass[frame-median]": 0.0011039849996450357, - "tests/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf6]": 0.007831325994629879, - "tests/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf7]": 0.006384360000083689, - "tests/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf6]": 0.007710279998718761, - "tests/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf7]": 0.006154783011879772, - "tests/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf6]": 0.00789045400597388, - "tests/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf7]": 0.007565096006146632, - "tests/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf6]": 0.007736548002867494, - "tests/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf7]": 0.005873041009181179, - "tests/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf6]": 0.0076618019957095385, - "tests/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf7]": 0.0061790910112904385, - "tests/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf6]": 0.008160787998349406, - "tests/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf7]": 0.006069276001653634, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf6]": 0.006600872999115381, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf7]": 0.005831123002280947, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf6]": 0.008288365992484614, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf7]": 0.005504130007466301, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf6]": 0.005952182997134514, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf7]": 0.006279708999500144, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf6]": 0.006304445996647701, - "tests/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf7]": 0.004886921000434086, - "tests/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf6]": 0.006035107995558064, - "tests/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf7]": 0.005402671995398123, - "tests/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf6]": 0.00579042399476748, - "tests/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf7]": 0.005141334993822966, - "tests/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf6]": 0.026320231998397503, - "tests/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf7]": 0.027820140996482223, - "tests/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf6]": 0.027684132001013495, - "tests/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf7]": 0.026915121998172253, - "tests/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf6]": 0.026110866012459155, - "tests/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf7]": 0.03130369899736252, - "tests/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf6]": 0.026363526994828135, - "tests/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf7]": 0.027649744995869696, - "tests/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf6]": 0.02570093200483825, - "tests/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf7]": 0.028811388001486193, - "tests/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf6]": 0.02661410600558156, - "tests/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf7]": 0.02641527100058738, - "tests/test_var_shapes.py::test_dist": 0.0005892289991606958, - "tests/test_var_shapes.py::test_frame_center": 0.0005890960019314662, - "tests/test_var_shapes.py::test_get_annulus_segments": 0.003340544004458934, - "tests/test_var_shapes.py::test_get_circle": 0.0010919449996436015, - "tests/test_var_shapes.py::test_get_ell_annulus": 0.019859416999679524, - "tests/test_var_shapes.py::test_get_ellipse": 0.000799705994722899, - "tests/test_var_shapes.py::test_get_square": 0.0014999640043242835, - "tests/test_var_shapes.py::test_mask_circle": 0.0010904510054388084, - "tests/test_var_shapes.py::test_mask_roi": 0.0086178280034801, - "tests/test_var_shapes.py::test_matrix_scaling": 0.0033938330016098917, - "tests/test_var_shapes.py::test_reshape_matrix": 0.0010575870037428103 + "tests/post_3_10/test_objects_postproc.py::test_postproc_object": 2.0509964999982913, + "tests/post_3_10/test_objects_ppandromeda.py::test_andromeda_object": 9.62878541700411, + "tests/post_3_10/test_objects_ppfmmf.py::test_fmmf_object": 32.18720016599764, + "tests/post_3_10/test_objects_ppframediff.py::test_frame_diff_object": 30.086815750000824, + "tests/post_3_10/test_objects_ppllsg.py::test_llsg_object": 5.753615583002102, + "tests/post_3_10/test_objects_pploci.py::test_loci_object": 2.7581275420052407, + "tests/post_3_10/test_objects_ppmediansub.py::test_median_object": 6.693621167003585, + "tests/post_3_10/test_objects_ppnmf.py::test_nmf_object": 7.79962895800054, + "tests/post_3_10/test_objects_pppca.py::test_pca_object": 40.16436366700145, + "tests/post_3_10/test_objects_ppresult.py::test_results_object": 0.00039837400254327804, + "tests/pre_3_10/test_conf.py::test_check_array": 0.00017366600150126033, + "tests/pre_3_10/test_conf.py::test_check_enough_memory": 0.0004427499989105854, + "tests/pre_3_10/test_dataset.py::test_saveable_dataset": 0.006177500003104797, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-1br-2]": 0.0006153319991426542, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-2]": 0.0005725000009988435, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[3D-2br-[1,2]]": 0.0007491249998565763, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-1br-2]": 0.0005642089963657781, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-2]": 0.0007135419982660096, + "tests/pre_3_10/test_fm_fakecomp.py::test_cube_inject_companions[4D-2br-[1,2]]": 0.0010886250020121224, + "tests/pre_3_10/test_fm_fakecomp.py::test_normalize_psf_shapes": 0.022057582002162235, + "tests/pre_3_10/test_fm_fakedisk.py::test_cube_inject_fakedisk[3D]": 0.0022025409998605028, + "tests/pre_3_10/test_fm_fakedisk.py::test_cube_inject_trace[3D]": 0.0009282090031774715, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[median_sub-firstguess-None-False-sum-False-None]": 1180.0255779590007, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca-firstguess-5-True-None-False-None]": 9.084609501001978, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annular-firstguess-3-False-stddev-False-None]": 44.140883373998804, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-2-False-stddev-False-gb]": 823.8422017080047, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-mcmc_negfc_sampling-4-True-None-True-ac]": 4.74077987399869, + "tests/pre_3_10/test_fm_negfc_3d.py::test_algos[pca_annulus-nested_negfc_sampling-4-False-sum-False-None]": 91.81130950100123, + "tests/pre_3_10/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-False-sum]": 19.38758774999951, + "tests/pre_3_10/test_fm_negfc_4d.py::test_algos[pca_annulus-firstguess-4-True-None]": 22.510612000001856, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.4]": 0.0362288760006777, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0.9]": 0.03611187400019844, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_HG_phase_function_and_print[0]": 0.034325082997384015, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.2]": 0.02444712500073365, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.4]": 0.02441779199943994, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_double_HG_phase_function[0.9]": 0.024773874996753875, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[55]": 0.0002901250081777107, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[60]": 0.00021783399643027224, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_dust_distribution[65]": 0.00019841599714709446, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[10]": 0.018142166998586617, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[20]": 0.01873650000197813, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_homemade_phase_function[60]": 0.01825766599722556, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[0]": 0.07397612500062678, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[30]": 0.07399058300143224, + "tests/pre_3_10/test_fm_scatteredlightdisk.py::test_scattered_light_disk[60]": 0.07323854099740856, + "tests/pre_3_10/test_metrics_completeness.py::test_completeness_curve": 15.554314832999808, + "tests/pre_3_10/test_metrics_completeness.py::test_completeness_map": 84.55571812400376, + "tests/pre_3_10/test_metrics_contrcurve.py::test_contrast_curve": 10.202315874998021, + "tests/pre_3_10/test_metrics_detection.py::test_detection_dog": 0.010473917001945665, + "tests/pre_3_10/test_metrics_detection.py::test_detection_log": 0.9831294580071699, + "tests/pre_3_10/test_metrics_detection.py::test_detection_lpeaks": 0.023437084000761388, + "tests/pre_3_10/test_metrics_detection.py::test_detection_snrmap": 0.2117280420025054, + "tests/pre_3_10/test_metrics_snr.py::test_frame_report": 2.364625251000689, + "tests/pre_3_10/test_metrics_snr.py::test_snrmap_fast": 3.3186488750034187, + "tests/pre_3_10/test_metrics_snr.py::test_snrmap_masked": 4.346358917002362, + "tests/pre_3_10/test_metrics_snr.py::test_snrmap_sss": 5.037375374995463, + "tests/pre_3_10/test_metrics_stim.py::test_normstimmap": 0.9498009169947181, + "tests/pre_3_10/test_metrics_stim.py::test_normstimmap_two": 1.906245415997546, + "tests/pre_3_10/test_metrics_stim.py::test_stimmap": 0.9790422080004646, + "tests/pre_3_10/test_pca_svd.py::test_svd_recons": 0.0005411249949247576, + "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[fast_paco-None]": 23.160429791998467, + "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[fast_paco_parallel-None]": 23.286662668000645, + "tests/pre_3_10/test_pipeline_adi_paco.py::test_algos[full_paco-None]": 32.13220791599815, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf-snrmap_fast]": 1.145020708994707, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf_annular_ardi-snrmap_fast]": 8.00952949999919, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[nmf_annular_rdi-snrmap_fast]": 20.440225250997173, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca-snrmap_fast]": 2.828014291004365, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_annular_ardi-snrmap_fast]": 1.1406087499999558, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_annular_rdi-snrmap_fast]": 0.8454787500013481, + "tests/pre_3_10/test_pipeline_rdi.py::test_algos[pca_mask-snrmap_fast]": 0.7619143740012078, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[medsub-None]": 6.891117500999826, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[medsub_annular-None]": 4.127185290999478, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_annular-None]": 6.814698709004006, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_double-snrmap_fast]": 2.6741197500014096, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_double_left_eigv-snrmap_fast]": 2.640933667003992, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_single-snrmap_fast]": 2.684935500001302, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[pca_single_left_eigv-snrmap_fast]": 2.663134333997732, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[xloci-snrmap_fast]": 14.593148583000584, + "tests/pre_3_10/test_pipeline_sdi.py::test_algos[xloci_double-snrmap_fast]": 7.1982469579998, + "tests/pre_3_10/test_preproc_badframes.py::test_badfr_corr": 0.2977718330002972, + "tests/pre_3_10/test_preproc_badframes.py::test_badfr_ellip": 0.010990040995238815, + "tests/pre_3_10/test_preproc_badframes.py::test_badfr_pxstat": 0.001935541004058905, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ann": 17.29632691599909, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_clump": 5.518727665999904, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ifs1": 11.970335498997883, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_ifs2": 21.14428795799904, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_iso": 2.1080845819997194, + "tests/pre_3_10/test_preproc_badpix.py::test_badpix_iso2": 0.36079004099883605, + "tests/pre_3_10/test_preproc_cosmetics.py::test_nan_corr": 1.0904437499993946, + "tests/pre_3_10/test_preproc_recentering.py::test_2d": 0.31115966599827516, + "tests/pre_3_10/test_preproc_recentering.py::test_approx_star": 0.002175083998736227, + "tests/pre_3_10/test_preproc_recentering.py::test_dft": 0.36107308399732574, + "tests/pre_3_10/test_preproc_recentering.py::test_dft_image": 0.10243766699932166, + "tests/pre_3_10/test_preproc_recentering.py::test_radon": 3.749162291001994, + "tests/pre_3_10/test_preproc_recentering.py::test_satspots": 0.025021625002409564, + "tests/pre_3_10/test_preproc_recentering.py::test_satspots_image": 0.13213591700332472, + "tests/pre_3_10/test_preproc_recentering.py::test_speckle_recentering": 2.7844777929967677, + "tests/pre_3_10/test_preproc_rescaling.py::test_check_scal_vector": 0.00037283300116541795, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[ndimage]": 0.02530408400343731, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[opencv]": 0.0015902080012892839, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_px_resampling[vip-fft]": 0.004953333998855669, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[ndimage-bicubic]": 5.823661415997776, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[opencv-lanczos4]": 0.3166207089961972, + "tests/pre_3_10/test_preproc_rescaling.py::test_cube_rescaling_wavelengths[vip-fft-None]": 6.586108998999407, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[10-0-truth2]": 0.0003480420018604491, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[10-5-truth3]": 0.0003497910001897253, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[15-5-truth4]": 0.00041283300015493296, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[20-0-truth5]": 0.00034291699921595864, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[20-5-truth6]": 0.0003285410020907875, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[6-0-truth0]": 0.0005433749975054525, + "tests/pre_3_10/test_preproc_rescaling.py::test_find_indices_sdi[6-5-truth1]": 0.00037920899922028184, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-False]": 0.007614458998432383, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[ndimage-True]": 0.01491445899955579, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[opencv-False]": 0.000615834000200266, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[opencv-True]": 0.002836666004441213, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-False]": 0.0022203750013432, + "tests/pre_3_10/test_preproc_rescaling.py::test_frame_px_resampling[vip-fft-True]": 0.001970166998944478, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[opencv-lanczos4-edge-interp+noise]": 0.577141624999058, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[skimage-bicubic-symmetric-interp+noise]": 0.6923712089992478, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[skimage-biquintic-wrap-noise]": 0.4302830839988019, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-constant-None]": 1.2019933329938794, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate[vip-fft-None-reflect-noise]": 1.3166242500010412, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[opencv-lanczos4-edge-interp-True]": 0.10779887600438087, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[skimage-biquintic-reflect-interp-True]": 0.13829249999980675, + "tests/pre_3_10/test_preproc_rotation.py::test_cube_derotate_mask[vip-fft-None-reflect-interp-True]": 0.36853250000058324, + "tests/pre_3_10/test_preproc_rotation.py::test_define_annuli": 0.00034383300226181746, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[0-None-0-0-10-truth0]": 0.00041020900243893266, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[1-None-0-0-10-truth1]": 0.0003111239966528956, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[2-None-0-0-10-truth2]": 0.00030833300115773454, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-2-0-0-10-truth5]": 0.0003419169988774229, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-0-0-10-truth3]": 0.0002863750014512334, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-0-1-3-truth6]": 0.0003439169995544944, + "tests/pre_3_10/test_preproc_rotation.py::test_find_indices_adi[3-None-1-0-10-truth4]": 0.00030883399813319556, + "tests/pre_3_10/test_var_filters.py::test_fft_ifft": 0.00022191499738255516, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-fourier-butter]": 0.0006010009965393692, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-gauss-subt]": 0.0013446670018311124, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-hann]": 0.0005333749977580737, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-laplacian-conv]": 0.0009427509976376314, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-laplacian]": 0.0007614580026711337, + "tests/pre_3_10/test_var_filters.py::test_highpass[cube-median-subt]": 0.00048404100016341545, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-fourier-butter]": 0.0002546260002418421, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-gauss-subt]": 0.00038083399704191834, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-hann]": 0.0002619160004542209, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-laplacian-conv]": 0.0003153750039928127, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-laplacian]": 0.00023054200210026465, + "tests/pre_3_10/test_var_filters.py::test_highpass[frame-median-subt]": 0.00022912599888513796, + "tests/pre_3_10/test_var_filters.py::test_iuwt": 0.0012909159959235694, + "tests/pre_3_10/test_var_filters.py::test_lowpass[cube-gauss]": 0.0010617909974826034, + "tests/pre_3_10/test_var_filters.py::test_lowpass[cube-median]": 0.00038308299917844124, + "tests/pre_3_10/test_var_filters.py::test_lowpass[frame-gauss]": 0.0005109999983687885, + "tests/pre_3_10/test_var_filters.py::test_lowpass[frame-median]": 0.0002299999941897113, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf6]": 0.0010198329982813448, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr10-psf7]": 0.000800832003733376, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf6]": 0.000865165999130113, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-4-fr11-psf7]": 0.0007773340003041085, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf6]": 0.0008493330024066381, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr10-psf7]": 0.0007797500038577709, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf6]": 0.0008596250008849893, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-4-6-fr11-psf7]": 0.0007906660030130297, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf6]": 0.0008379589999094605, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr10-psf7]": 0.0007619170028192457, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf6]": 0.0008848750003380701, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[airy-6-5-fr11-psf7]": 0.0008495000001857989, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf6]": 0.00146929200127488, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr10-psf7]": 0.0009627929939597379, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf6]": 0.0011147500044899061, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-4-fr11-psf7]": 0.0009600410048733465, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf6]": 0.0010108330025104806, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr10-psf7]": 0.0009424580021004658, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf6]": 0.0010388760019850451, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-4-6-fr11-psf7]": 0.0009217079968948383, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf6]": 0.0009971239996957593, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr10-psf7]": 0.0009268329959013499, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf6]": 0.0010275419990648516, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[gauss-6-5-fr11-psf7]": 0.0009376659982081037, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf6]": 0.002715708003961481, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr10-psf7]": 0.002566749997640727, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf6]": 0.002805750002153218, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-4-fr11-psf7]": 0.002713583002332598, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf6]": 0.002582417000667192, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr10-psf7]": 0.002524874002119759, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf6]": 0.002638250000018161, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-4-6-fr11-psf7]": 0.002614291002828395, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf6]": 0.0025367490015923977, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr10-psf7]": 0.0025143740022031125, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf6]": 0.0025916660051734652, + "tests/pre_3_10/test_var_fit2d.py::test_fit2d[moff-6-5-fr11-psf7]": 0.0026012489979621023, + "tests/pre_3_10/test_var_shapes.py::test_dist": 0.00014854100299999118, + "tests/pre_3_10/test_var_shapes.py::test_frame_center": 0.0001620840048417449, + "tests/pre_3_10/test_var_shapes.py::test_get_annulus_segments": 0.0009169999975711107, + "tests/pre_3_10/test_var_shapes.py::test_get_circle": 0.00027645799855235964, + "tests/pre_3_10/test_var_shapes.py::test_get_ell_annulus": 0.00019904200235032476, + "tests/pre_3_10/test_var_shapes.py::test_get_ellipse": 0.00019787500423262827, + "tests/pre_3_10/test_var_shapes.py::test_get_square": 0.00035424899760982953, + "tests/pre_3_10/test_var_shapes.py::test_mask_circle": 0.00029487399660865776, + "tests/pre_3_10/test_var_shapes.py::test_mask_roi": 0.0010457510034029838, + "tests/pre_3_10/test_var_shapes.py::test_matrix_scaling": 0.001095624997105915, + "tests/pre_3_10/test_var_shapes.py::test_reshape_matrix": 0.00016995700207189657 } diff --git a/Makefile b/Makefile index 0cee8a47d..6a0f908f9 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ test: pre-commit install-hooks pre-commit install pre-commit run --files src/**/*.py - coverate run -m pytest + coverage run -m pytest coverage xml rm confi_hist.pdf rm confi_hist_gaussfit.pdf diff --git a/helpers/update_docs_rst_from_README.py b/helpers/update_docs_rst_from_README.py index c06fbc1ff..06cf89460 100644 --- a/helpers/update_docs_rst_from_README.py +++ b/helpers/update_docs_rst_from_README.py @@ -6,14 +6,14 @@ with open("../README.rst") as f_r: readme = f_r.readlines() -str_titles = ['TL;DR', +str_titles = ['TL;DR', 'Installation and dependencies', 'Image conventions', 'Contact', 'Attribution', 'THE END'] titles_occ = [0,0,0,1,0,0] -w_titles = ['TLDR', +w_titles = ['TLDR', 'Installation-and-dependencies', 'Image-conventions', 'Contact', @@ -37,6 +37,6 @@ stop_write=True else: continue - - + + print("successfully converted README into documentation rst files.") diff --git a/pyproject.toml b/pyproject.toml index 1690d34c7..d0811fedf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=42", "wheel"] +requires = ["setuptools>=64"] build-backend = "setuptools.build_meta" [project] @@ -26,7 +26,6 @@ classifiers = [ "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering :: Astronomy", ] -urls.Homepage = "https://github.com/vortex-exoplanet/VIP" dependencies = [ "astropy>=5.0.0", "corner>=2.2.1", @@ -45,6 +44,10 @@ dependencies = [ "scikit-learn>=1.0.2", ] +[project.urls] +Homepage = "https://github.com/vortex-exoplanet/VIP" +Issues = "https://github.com/vortex-exoplanet/VIP/issues" + [dependency-groups] dev = [ "coverage>=7.10.0", @@ -67,3 +70,13 @@ dev = [ "sphinx_rtd_theme", "jupyter_sphinx", ] + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.package-data] +"vip_hci" = ["py.typed"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +addopts = "-v --tb=short" diff --git a/src/vip_hci/config/paramenum.py b/src/vip_hci/config/paramenum.py index 049edd198..3953d3aaa 100644 --- a/src/vip_hci/config/paramenum.py +++ b/src/vip_hci/config/paramenum.py @@ -316,13 +316,13 @@ class OptMethod(str, Enum): * ``LSQ`` - * ``ROBUST`` + * ``L1`` """ NO = "no" TOTAL = "total" LSQ = "lsq" - ROBUST = "robust" + L1 = "l1" class VarEstim(str, Enum): diff --git a/src/vip_hci/fm/fakecomp.py b/src/vip_hci/fm/fakecomp.py index 7f8d7cecb..dfee18bbb 100644 --- a/src/vip_hci/fm/fakecomp.py +++ b/src/vip_hci/fm/fakecomp.py @@ -97,7 +97,7 @@ def cube_inject_companions(array, psf_template, angle_list, flevel, rad_dists, Number of CPUs to use for multiprocessing. If None, will be automatically set to half the number of available CPUs. copy_array: bool, optional - Default is True. If False, ``array`` is not copied before injection. This is intended for + Default is True. If False, ``array`` is not copied before injection. This is intended for computing performance when ``array`` can be modified. Returns diff --git a/src/vip_hci/fm/fakedisk.py b/src/vip_hci/fm/fakedisk.py index 250fe09fe..284315faf 100644 --- a/src/vip_hci/fm/fakedisk.py +++ b/src/vip_hci/fm/fakedisk.py @@ -61,6 +61,7 @@ def cube_inject_fakedisk( """ if not fakedisk.ndim == 2: raise TypeError("Fakedisk is not a frame or a 2d array.") + angle_list = np.asarray(angle_list) if not angle_list.ndim == 1: raise TypeError("Input parallactic angle is not a 1d array") diff --git a/src/vip_hci/fm/negfc_fmerit.py b/src/vip_hci/fm/negfc_fmerit.py index 74dfe8aa6..b1d9668a3 100644 --- a/src/vip_hci/fm/negfc_fmerit.py +++ b/src/vip_hci/fm/negfc_fmerit.py @@ -251,7 +251,7 @@ def chisquare( imlib=imlib_sh, interpolation=interpolation, transmission=transmission, - radial_gradient=radial_gradient, + radial_gradient=radial_gradient, verbose=False ) diff --git a/src/vip_hci/greedy/ipca_fullfr.py b/src/vip_hci/greedy/ipca_fullfr.py index 0a7197b52..e2159138e 100644 --- a/src/vip_hci/greedy/ipca_fullfr.py +++ b/src/vip_hci/greedy/ipca_fullfr.py @@ -146,7 +146,7 @@ def ipca(*all_args: List, **all_kwargs: dict): but has no additional options for the extraction of circumstellar signal at each iteration (all signals > 0 are considered). Installation of the GreeDS package is required for this option. - - If 'Christiaens24': Same as 'Juillard23' but not in Torch, and with + - If 'Christiaens24': Same as 'Juillard23' but not in Torch, and with the extra parameters ``thr`` and ``ncomp_step`` available. ncomp : int or tuple/list of 2 or 3 int, optional How many PCs are used as a lower-dimensional subspace to project the @@ -154,12 +154,12 @@ def ipca(*all_args: List, **all_kwargs: dict): - if mode is None: * strategy in {'ADI', 'RDI', 'ARDI'} and no ``mask_rdi`` provided: an int must be provided, ``ncomp`` is the fixed number of PCs to use - + * strategy in {'RADI' , 'RARDI'} and no ``mask_rdi`` is provided: an int or a tuple/list of 2 int is accepted. In the latter case, the first value is used for IPCA-RDI, and the second for IPCA-ADI for the remaining iterations after the former converged. - + * strategy in {'ADI', 'RDI', 'ARDI} and ``mask_rdi`` is provided: an int or a tuple/list of 2 int can be provided. In the latter case, the first value is used for PCA-data imputation at the first @@ -170,12 +170,12 @@ def ipca(*all_args: List, **all_kwargs: dict): the first value is used for PCA-data imputation at the first iteration, the second for IPCA-RDI,and the third for IPCA-ADI for the remaining iterations after the former converged. - + - if mode is not None: ncomp should correspond to the maximum number of principal components to be tested. The first ncomp will be ``ncomp_start`` and the increment will be ``ncomp_step``. - + ncomp_start: int, opt For incremental versions of iterative PCA (i.e. if mode is 'Juillard23' or 'Christiaens24'), this is the number of principal components at the @@ -188,10 +188,10 @@ def ipca(*all_args: List, **all_kwargs: dict): Number of iterations for the iterative PCA. - if mode is None: total number of iterations - + - if mode is 'Juillard23', or 'Christiaens24': iterations per tested ncomp. - + strategy: str {'ADI, 'RDI', 'ARDI', 'RADI', 'RARDI''}, opt Whether to do iterative ADI only ('ADI'), iterative RDI only ('RDI'), iterative ADI and RDI together ('ARDI', i.e. with a combined PCA @@ -201,7 +201,7 @@ def ipca(*all_args: List, **all_kwargs: dict): 'ARDI', 'RADI' and 'RARDI'. thr: float or 'auto', opt Minimum threshold used to identify significant signals in the PCA image - obtained at each iteration, according to ``thr_mode``. + obtained at each iteration, according to ``thr_mode``. thr_mode: str {'STIM', 'abs'}, opt How the threshold is expressed: whether based on the STIM map ('STIM') or expressed as absolute pixel intensity threshold ('abs'). The optimal @@ -615,9 +615,9 @@ def _blurring_3d(array, mask_center_sz, fwhm_sz=2): pca_params['ncomp'] = final_ncomp[0] pca_params['cube'] = cube_tmp pca_params['cube_ref'] = cube_ref_tmp - + res = pca(**pca_params, **rot_options) - + frame = res[0] residuals_cube = res[-2] residuals_cube_ = res[-1] diff --git a/src/vip_hci/invprob/andromeda.py b/src/vip_hci/invprob/andromeda.py index 45898f626..593b94f62 100644 --- a/src/vip_hci/invprob/andromeda.py +++ b/src/vip_hci/invprob/andromeda.py @@ -134,7 +134,7 @@ def andromeda(*all_args: List, **all_kwargs: dict): by ``roa * annuli_width``. ``roa`` is forced to ``1`` when ``opt_method="no"`` is chosen. IDL parameter: ``RATIO_OPT_AREA_INPUT`` - opt_method : {'no', 'total', 'lsq', 'robust'}, optional + opt_method : {'no', 'total', 'lsq', 'l1'}, optional Method used to balance for the flux difference that exists between the two subtracted annuli in an optimal way during ADI. IDL parameter: ``OPT_METHOD_ANG_INPUT`` diff --git a/src/vip_hci/invprob/utils_andro.py b/src/vip_hci/invprob/utils_andro.py index 0802d9321..c9a3131b1 100644 --- a/src/vip_hci/invprob/utils_andro.py +++ b/src/vip_hci/invprob/utils_andro.py @@ -8,6 +8,7 @@ import numpy as np +from astropy.stats import median_absolute_deviation def robust_std(x): @@ -32,8 +33,8 @@ def robust_std(x): based on ``LibAndromeda/robust_stddev.pro`` v1.1 2016/02/16 """ - median_absolute_deviation = np.median(np.abs(x - np.median(x))) - return median_absolute_deviation / 0.6745 + mad = median_absolute_deviation(x) + return mad / 0.6745 def idl_round(x): @@ -84,7 +85,7 @@ def idl_where(array_expression): returns ``[]``, which is more "pythonic". """ - res = np.array([i for i, e in enumerate(array_expression.flatten()) if e]) + res = np.flatnonzero(array_expression) return res @@ -285,7 +286,7 @@ def calc_psf_shift_subpix(psf, precision): """ n = psf.shape[0] - psf_cube = np.zeros((precision+1, precision+1, n, n)) + psf_cube = np.empty((precision+1, precision+1, n, n)) for i_column in range(precision+1): decalx = i_column/precision diff --git a/src/vip_hci/preproc/badpixremoval.py b/src/vip_hci/preproc/badpixremoval.py index 76652a010..acede68d2 100644 --- a/src/vip_hci/preproc/badpixremoval.py +++ b/src/vip_hci/preproc/badpixremoval.py @@ -172,7 +172,7 @@ def frame_fix_badpix_isolated(array, bpm_mask=None, correct_only=False, bpm_mask = bpm_mask.astype('bool') smoothed = median_filter(frame, size, mode='mirror') - frame[np.where(bpm_mask)] = smoothed[np.where(bpm_mask)] + frame[bpm_mask] = smoothed[bpm_mask] array_out = frame count_bp = np.sum(bpm_mask) @@ -1927,12 +1927,9 @@ def _reject_outliers(data, test_value, m=5., stddev=None): stddev = np.std(data) med = np.median(data) - d = data.copy() - d_flat = d.flatten() - for i in range(d_flat.shape[0]): - d_flat[i] = np.abs(data.flatten()[i] - med) + d_flat = np.abs(data.flatten() - med) mdev = np.median(d_flat) - if max(np.max(d), np.abs(test_value-med)) > stddev: + if max(np.max(data), np.abs(test_value-med)) > stddev: test = np.abs((test_value-med)/mdev) if test < m: test_result = 0 diff --git a/src/vip_hci/preproc/cosmetics.py b/src/vip_hci/preproc/cosmetics.py index 65dcf81f7..66e5faa2f 100644 --- a/src/vip_hci/preproc/cosmetics.py +++ b/src/vip_hci/preproc/cosmetics.py @@ -70,6 +70,14 @@ def cube_crop_frames( else: raise TypeError("`Array` is not a cube (3d or 4d numpy.ndarray)") + if temp_fr.shape[0] == size and temp_fr.shape[1] == size: + if verbose: + print("Frame size already matches crop size. No cropping needed.") + if full_output: + ceny, cenx = frame_center(temp_fr) + return array, cenx, ceny + return array + if xy is not None: cenx, ceny = xy else: @@ -130,6 +138,11 @@ def frame_crop(array, size, xy=None, force=False, verbose=True): if array.ndim != 2: raise TypeError("`Array` is not a frame or 2d array") + if array.shape[0] == size and array.shape[1] == size: + if verbose: + print("Frame size already matches crop size. No cropping needed.") + return array + if not xy: ceny, cenx = frame_center(array) else: diff --git a/src/vip_hci/preproc/rescaling.py b/src/vip_hci/preproc/rescaling.py index d338f94f4..4720ffebd 100644 --- a/src/vip_hci/preproc/rescaling.py +++ b/src/vip_hci/preproc/rescaling.py @@ -409,7 +409,7 @@ def cube_rescaling_wavelengths( values are used to pad the end and the end values are used to pad the beginning nproc : int, optional - Number of processes to use for parallel frame rescaling. Default is 1. + Number of processes to use for parallel frame rescaling. Default is 1. Set to None to use half the available CPUs. Returns @@ -1215,10 +1215,3 @@ def scale_fft(array, scale, ori_dim=False): array_resc = scaled return array_resc - - - - - - - diff --git a/src/vip_hci/psfsub/medsub.py b/src/vip_hci/psfsub/medsub.py index 14c939590..4aeedb22c 100644 --- a/src/vip_hci/psfsub/medsub.py +++ b/src/vip_hci/psfsub/medsub.py @@ -572,7 +572,7 @@ def _median_subt_fr_sdi( scal, ann_center, j, fwhm, delta_sep_vec[ann], nframes ) matrix_masked = matrix[indices_left] - ref_psf_opt = bn.nanmedian(matrix_masked, axis=0) + ref_psf_opt = bn.nanmedian(matrix_masked, axis=0) curr_wv = matrix[j] subtracted = curr_wv - ref_psf_opt cube_res[j, yy, xx] = subtracted diff --git a/src/vip_hci/py.typed b/src/vip_hci/py.typed new file mode 100644 index 000000000..e69de29bb