kevin218 / Eureka

Eureka! is a data reduction and analysis pipeline intended for time-series observations with JWST.
https://eurekadocs.readthedocs.io/
MIT License
60 stars 47 forks source link

Comprehensive Unit Testing #140

Open jbrande opened 2 years ago

jbrande commented 2 years ago

I've got minimum viable testing functionality up in my branch. Currently we do NIRCam S3-S5 and NIRSpec S2-S5. The S5 tests are just set to "fit" the "lightcurve" with least-squares and a bare transit model.

I need to test:

Other goals:

Keeping this open indefinitely until I get all this done.

taylorbell57 commented 2 years ago

I can start helping more with writing testing code - I've been slacking off in that category. We should look into pytest-cov and/or Coverage.py to assess our testing coverage and understand where we should be increasing our efforts. My understanding is that pytest-cov is the only one that handles multi-threaded code, so it's potentially best if use that one unless it is too hard to work with

taylorbell57 commented 2 years ago

So pytest-cov ended up being super easy. Just pip install pytest-cov and then just use pytest --cov=.. instead of pytest which then gives the following summary afterwards:

---------- coverage: platform darwin, python 3.9.7-final-0 -----------
Name                                                                                                Stmts   Miss  Cover
-----------------------------------------------------------------------------------------------------------------------
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/__init__.py                       2      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/ramp_fitting.py                 235    203    14%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/s1_process.py                    91     77    15%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S2_calibrations/__init__.py                              1      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S2_calibrations/s2_calibrate.py                        135     23    83%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/__init__.py                           13      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/background.py                        228    146    36%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/bright2flux.py                        82     18    78%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/hst_scan.py                          505    505     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/julday.py                             10      8    20%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/miri.py                               53     42    21%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/nircam.py                             37      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/niriss.py                            273    242    11%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/niriss_profiles.py                    25     16    36%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/nirspec.py                            36      4    89%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/optspex.py                           259    180    31%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/plots_s3.py                           97      7    93%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/s3_reduce.py                         228     38    83%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/sigrej.py                             58     24    59%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/source_pos.py                         44     12    73%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/wfc3.py                              277    277     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/wfc3_1reduce.py                      394    394     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/__init__.py                      3      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/drift.py                        44     35    20%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/plots_s4.py                     74     30    59%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/s4_genLC.py                    180     36    80%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/wfc3_2genLC.py                 157    157     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/__init__.py                       11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/fitters.py                       499    372    25%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/lightcurve.py                     88     21    76%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/likelihood.py                     86     26    70%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/limb_darkening_fit.py            206    164    20%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/modelgrid.py                     267    237    11%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/BatmanModels.py            82     40    51%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/ExpRampModel.py            35      4    89%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/Model.py                  145     32    78%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/PolynomialModel.py         38      4    89%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/SinusoidPhaseCurve.py      77     64    17%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/__init__.py                 5      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/parameters.py                     75     14    81%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/plots_s5.py                      164     66    60%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/s5_fit.py                        223     64    71%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/simulations.py                    45      8    82%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/utils.py                         269    207    23%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/__init__.py                            2      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/plots_s6.py                           49     45     8%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/s6_spectra.py                        250    231     8%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/__init__.py                                             11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/__init__.py                                         25      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/astropytable.py                                     58     13    78%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/centroid.py                                         33     27    18%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/clipping.py                                         51     40    22%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/correlated_noise.py                                 27     23    15%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/demc.py                                            601    589     2%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/disk.py                                             12     10    17%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/gaussian.py                                        175    163     7%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/gelmanrubin.py                                      22     19    14%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/hiloerr.py                                          37     35     5%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/integrate.py                                        11     10     9%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/julday.py                                           10     10     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/logedit.py                                          22      4    82%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/manageevent.py                                      47     26    45%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/medstddev.py                                        45     41     9%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/modelsPOET.py                                      623    567     9%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/UnitTest.py                               293    293     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/__init__.py                                22     22     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/setup.py                                   19     19     0%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/nasc.py                                            147    139     5%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/orbit.py                                           297    263    11%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/plots.py                                           571    550     4%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/readECF.py                                         109     49    55%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/smooth.py                                           33     17    48%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/smoothing.py                                        67     61     9%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/sort_nicely.py                                      11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/splinterp.py                                         5      3    40%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/suntimecorr.py                                      47     41    13%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/time2phase2.py                                       9      7    22%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/timer.py                                            34     27    21%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/univ.py                                             18     14    22%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/utc_tt.py                                          126    111    12%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/util.py                                             84      8    90%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/version.py                                               1      0   100%
__init__.py                                                                                             3      0   100%
test_general.py                                                                                       100      0   100%
test_lightcurve_fitting.py                                                                             91      0   100%
-----------------------------------------------------------------------------------------------------------------------
TOTAL                                                                                               10054   7274    28%
jbrande commented 2 years ago

Sounds good. 28% is actually better than I thought we'd be doing right now! I was mistaken about the coverage fraction needed for a JOSS paper (https://joss.readthedocs.io/en/latest/review_criteria.html, we actually don't need any specific coverage fraction, just that we have some functionality testing available), but it's still useful to have this info and I'll work on increasing this.

taylorbell57 commented 2 years ago

pytest --cov=.. --cov-report="term-missing" gives an even more useful summary:

---------- coverage: platform darwin, python 3.9.7-final-0 -----------
Name                                                                                                Stmts   Miss  Cover   Missing
---------------------------------------------------------------------------------------------------------------------------------
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/__init__.py                       2      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/ramp_fitting.py                 235    203    14%   56-152, 176-179, 198-205, 232-237, 294-407, 440-476, 506-566, 615-627, 644-659, 676-693
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S1_detector_processing/s1_process.py                    91     77    15%   16, 41-113, 132-179
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S2_calibrations/__init__.py                              1      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S2_calibrations/s2_calibrate.py                        135     23    83%   92, 98, 110, 114-120, 131-132, 209, 264, 307-322
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/__init__.py                           13      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/background.py                        228    146    36%   50, 55-60, 76, 82-92, 99-107, 149-150, 165-167, 170, 182, 186-191, 195, 211, 225-231, 234-235, 280-386, 420-432, 455-490
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/bright2flux.py                        82     18    78%   30-33, 79, 122-125, 187-193, 220-221, 224, 235-237
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/hst_scan.py                          505    505     0%   1-1251
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/julday.py                             10      8    20%   49-62
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/miri.py                               53     42    21%   39-92, 108-118, 137, 145
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/nircam.py                             37      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/niriss.py                            273    242    11%   58-94, 119-134, 155-175, 203-284, 312-410, 432-450, 468-476, 494-496, 525-548, 568-572, 596-641, 662-691
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/niriss_profiles.py                    25     16    36%   37-40, 56-66, 82-92, 109-116, 133-140
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/nirspec.py                            36      4    89%   48-51
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/optspex.py                           259    171    34%   29-76, 124-130, 148, 216-256, 284-329, 353-416, 478-488, 503-512, 520-528, 547, 550
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/plots_s3.py                           97      7    93%   39, 79, 111, 164-165, 173, 212
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/s3_reduce.py                         228     38    83%   112, 118, 167-168, 177, 182-188, 196, 202, 205, 218, 241-244, 258, 265-266, 295, 315, 330-334, 338, 373, 382, 390-401, 409
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/sigrej.py                             58     24    59%   124-125, 128, 152, 177, 181-198, 201, 205, 207, 209, 211, 215
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/source_pos.py                         44     12    73%   31, 37, 80, 112-127
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S3_data_reduction/wfc3.py                              277    277     0%   3-501
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/__init__.py                      3      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/drift.py                        44     35    20%   37-38, 72-114
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/plots_s4.py                     74     30    59%   38, 52-60, 103, 124-134, 152-159
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S4_generate_lightcurves/s4_genLC.py                    180     36    80%   78, 84-85, 128-129, 131, 133-134, 136, 148-150, 160-165, 170-183, 207-208, 243, 247-248, 256, 260, 277
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/__init__.py                       11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/fitters.py                       499    372    25%   59, 70-71, 75-76, 78-79, 94-96, 98-102, 141-147, 196-197, 236-377, 380-435, 438-519, 556-685, 720-787, 853-858, 893-913, 916-934, 938, 943-944, 948-953, 957
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/lightcurve.py                     88     21    76%   67-68, 75, 86, 88, 92, 137-138, 141, 143, 146-151, 182, 184-185, 213, 219-221
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/likelihood.py                     86     26    70%   39-41, 43-48, 87, 91, 134, 139, 142, 145, 175-186, 280
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/limb_darkening_fit.py            206    164    20%   61-62, 66-67, 72, 76-79, 83-84, 88-89, 93-94, 98-99, 104, 108-113, 118-119, 152-170, 196-205, 242-368, 381-411, 424-506
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/modelgrid.py                     267    237    11%   82-214, 225-249, 278-356, 382-430, 438-515, 542-598, 605-615, 621-626, 638-642
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/BatmanModels.py            82     40    51%   5-6, 28, 44, 68-69, 73, 76-83, 98-113, 118-150
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/ExpRampModel.py            35      4    89%   54-56, 62
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/Model.py                  145     32    78%   32, 56, 79, 93-106, 132, 136, 161-162, 170, 174, 179-180, 187, 209, 233, 257, 272, 278-280, 288, 291-293, 302, 304
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/PolynomialModel.py         38      4    89%   55-57, 68
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/SinusoidPhaseCurve.py      77     64    17%   4-5, 16-42, 47, 51-55, 58-63, 68-122
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/models/__init__.py                 5      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/parameters.py                     75     14    81%   34-38, 69, 110-112, 117-118, 130, 157, 185
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/plots_s5.py                      164     66    60%   40, 52, 59-63, 89, 121, 130-131, 156, 187-196, 235-281, 309, 322, 325-327, 343
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/s5_fit.py                        223     64    71%   61, 69-70, 76, 116, 120, 129-143, 181-185, 193-194, 196-208, 210-211, 213-214, 226-230, 232-236, 238-242, 253, 263-265, 267-268, 282, 286, 294, 298, 316
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/simulations.py                    45      8    82%   10-11, 84-88, 93
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S5_lightcurve_fitting/utils.py                         269    207    23%   46-65, 80-145, 166, 169-179, 210-220, 236-244, 265-289, 309-322, 357-380, 401-419, 442-525, 545-567, 621-653, 680, 692-697
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/__init__.py                            2      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/plots_s6.py                           49     45     8%   9-70
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/S6_planet_spectra/s6_spectra.py                        250    231     8%   22, 48-255, 258-305, 311-337, 342-366, 370-395
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/__init__.py                                             11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/__init__.py                                         25      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/astropytable.py                                     58     13    78%   39-40, 77-78, 117-118, 140-148
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/centroid.py                                         33     27    18%   71-90, 135-176
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/clipping.py                                         51     40    22%   46-67, 94-99, 106-109, 137-164
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/correlated_noise.py                                 27     23    15%   13-35, 43-47
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/demc.py                                            601    589     2%   17-51, 58-80, 118-280, 289-342, 350-351, 391-658, 702-1001
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/disk.py                                             12     10    17%   84-101
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/gaussian.py                                        175    163     7%   182-213, 280-319, 325-347, 556-618, 672-697, 705-741, 767-789, 793-801
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/gelmanrubin.py                                      22     19    14%   30-53, 117-125
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/hiloerr.py                                          37     35     5%   74-90, 95-118
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/integrate.py                                        11     10     9%   35-48
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/julday.py                                           10     10     0%   7-69
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/logedit.py                                          22      4    82%   90-91, 123-124
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/manageevent.py                                      47     26    45%   91-100, 104-106, 152-160, 195-204
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/medstddev.py                                        45     41     9%   90-118, 144-159, 214-237
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/modelsPOET.py                                      623    567     9%   34-61, 88-105, 141-174, 214-280, 319-367, 392-395, 420-442, 465, 490-494, 518-524, 549-553, 578-583, 608-615, 640-648, 672-680, 705-709, 733-737, 761-769, 794-802, 828-835, 865-870, 894-898, 923-938, 966-982, 1012-1029, 1059-1079, 1105-1112, 1137-1146, 1171-1194, 1222-1230, 1260-1302, 1332-1344, 1367-1370, 1397-1400, 1429-1438, 1469-1493, 1537-1551, 1586-1614, 1675-1707, 1768-1800, 1826-1836, 1858-1869, 1893-1900, 1924-1936, 1965-1981, 2006-2010, 2050-2054, 2086-2095, 2102-2112, 2124-2130, 2137-2166, 2170-2180
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/UnitTest.py                               293    293     0%   4-561
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/__init__.py                                22     22     0%   1-33
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/models_c/setup.py                                   19     19     0%   1-33
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/nasc.py                                            147    139     5%   16-53, 65-122, 128-159, 166-217, 223-256
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/orbit.py                                           297    263    11%   67-74, 80-125, 141-166, 180-191, 194-205, 214-219, 231-236, 254-260, 270-277, 287-290, 293-296, 299-317, 335-354, 379-398, 406-413, 422-438, 457-466, 479-487, 497-500, 511-527, 530-531, 539-555, 567-568, 575-581, 584, 588-592
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/plots.py                                           571    550     4%   7-33, 106-128, 132-180, 183-264, 268-307, 311-350, 354-424, 428-472, 476-500, 504-530, 534-596, 601-656, 660-720, 724-744, 748-768
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/readECF.py                                         109     49    55%   104-113, 144, 158-211, 220-224
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/smooth.py                                           33     17    48%   36-64, 72-73
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/smoothing.py                                        67     61     9%   38-71, 74-79, 85-104, 107-129
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/sort_nicely.py                                      11      0   100%
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/splinterp.py                                         5      3    40%   46-48
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/suntimecorr.py                                      47     41    13%   59-73, 227-291
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/time2phase2.py                                       9      7    22%   42-48
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/timer.py                                            34     27    21%   22-27, 66-72, 87-97, 104-110
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/univ.py                                             18     14    22%   17-52
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/utc_tt.py                                          126    111    12%   18-50, 79-81, 86-93, 101-110, 114-122, 125-127, 130-132, 296-388, 427-429
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/lib/util.py                                             84      9    89%   20, 50-52, 71-74, 98, 111
/Users/tjbell1/Research/JWST/ERS/Eureka/eureka/version.py                                               1      0   100%
__init__.py                                                                                             3      0   100%
test_general.py                                                                                       100      0   100%
test_lightcurve_fitting.py                                                                             91      0   100%
---------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                                                                9503   6715    29%
taylorbell57 commented 2 years ago

Alright, in the dev/tjb branch I just added some tests for MIRI and WFC3, cleaned up the way in which tests are run (one testing file per instrument), increased coverage by doing slightly different things for each instrument (1 wavelength with lsq, dynesty, and emcee for NIRCam, 2 wavelengths with a shared lsq fit for NIRSpec), and significantly increased coverage by deleting a lot of files in the lib folder which we haven't used at all. We can always add the files back with a git checkout command or by grabbing them from Kevin's POET repo. There were some files which I kept as it seemed to me that we may want to use at least parts of them in the future. Some parts of the code we can pretty easily increase coverage of by adding NIRISS tests and an S1 test. With that, here is the current coverage:

Name                                                        Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------------------------
eureka/S1_detector_processing/__init__.py                       2      0   100%
eureka/S1_detector_processing/ramp_fitting.py                 235    203    14%   92-188, 212-215, 234-241, 268-273, 324-437, 473-509, 541-601, 652-664, 682-697, 715-732
eureka/S1_detector_processing/s1_process.py                    89     75    16%   19, 49-117, 160-207
eureka/S2_calibrations/__init__.py                              1      0   100%
eureka/S2_calibrations/s2_calibrate.py                        133     24    82%   31, 87, 93, 105, 109-115, 126-127, 203, 258, 299-314
eureka/S3_data_reduction/__init__.py                           12      0   100%
eureka/S3_data_reduction/background.py                        228    133    42%   56, 60, 76, 82-92, 149-150, 165-167, 170, 182, 186-191, 195, 211, 225-231, 234-235, 280-386, 420-432, 455-490
eureka/S3_data_reduction/bright2flux.py                        82     17    79%   29-32, 119-122, 184-190, 218-219, 222, 233-235
eureka/S3_data_reduction/hst_scan.py                          505    387    23%   40-79, 168-176, 201-232, 255-256, 262-263, 272-273, 334-336, 433-491, 503-529, 551-569, 615-633, 649-656, 660-671, 706-925, 982-1028, 1054-1102, 1128-1205, 1225-1227, 1233-1251
eureka/S3_data_reduction/miri.py                               56      7    88%   7-9, 72-78
eureka/S3_data_reduction/nircam.py                             36      0   100%
eureka/S3_data_reduction/niriss.py                            272    241    11%   58-92, 117-132, 153-173, 201-282, 310-408, 430-448, 466-474, 492-494, 523-546, 566-570, 594-639, 660-689
eureka/S3_data_reduction/niriss_profiles.py                    25     16    36%   37-40, 56-66, 82-92, 109-116, 133-140
eureka/S3_data_reduction/nirspec.py                            35      4    89%   47-50
eureka/S3_data_reduction/optspex.py                           259    171    34%   29-76, 124-130, 148, 216-256, 284-329, 353-416, 478-488, 503-512, 520-528, 547, 550
eureka/S3_data_reduction/plots_s3.py                           97      7    93%   39, 79, 111, 164-165, 173, 212
eureka/S3_data_reduction/s3_reduce.py                         226     29    87%   47, 106, 112, 161-162, 177, 182, 196, 199, 235-238, 252, 289, 309, 324-328, 394, 402-416, 445
eureka/S3_data_reduction/sigrej.py                             58     24    59%   124-125, 128, 152, 177, 181-198, 201, 205, 207, 209, 211, 215
eureka/S3_data_reduction/source_pos.py                         44     12    73%   31, 37, 80, 112-127
eureka/S3_data_reduction/wfc3.py                              277     38    86%   90, 95, 99-100, 134-146, 198, 205, 236-241, 273, 315-316, 325-327, 333, 346-347, 437-447
eureka/S4_generate_lightcurves/__init__.py                      3      0   100%
eureka/S4_generate_lightcurves/drift.py                        44      0   100%
eureka/S4_generate_lightcurves/plots_s4.py                     74      5    93%   38, 60, 103, 134, 159
eureka/S4_generate_lightcurves/s4_genLC.py                    177     14    92%   38, 74, 80-81, 132, 144-146, 239, 243-244, 252, 256, 276
eureka/S5_lightcurve_fitting/__init__.py                       10      0   100%
eureka/S5_lightcurve_fitting/fitters.py                       493    171    65%   59, 75-76, 78-79, 94-96, 98-102, 138-144, 202, 206, 218-220, 230-231, 275-277, 279-281, 310, 318-326, 348-403, 407-412, 435-437, 454-455, 460-462, 468, 472, 475-484, 525, 550-552, 594-596, 620, 634, 691-750, 816-821, 856-876, 879-897, 914
eureka/S5_lightcurve_fitting/lightcurve.py                     86     12    86%   75, 86, 88, 92, 137-138, 141, 149, 180, 211, 217-219
eureka/S5_lightcurve_fitting/likelihood.py                     92     27    71%   38-40, 45, 51, 90, 94, 137, 142, 145, 148, 178-189, 285, 310-313
eureka/S5_lightcurve_fitting/limb_darkening_fit.py            206    164    20%   61-62, 66-67, 71-72, 77-79, 83-84, 88-89, 93-94, 98-99, 104, 108-113, 118-119, 152-170, 196-205, 242-368, 381-411, 424-506
eureka/S5_lightcurve_fitting/modelgrid.py                     267    237    11%   82-214, 225-249, 278-356, 382-430, 438-515, 542-598, 605-615, 621-626, 638-642
eureka/S5_lightcurve_fitting/models/BatmanModels.py           113     24    79%   5-6, 31, 47, 71-72, 81-82, 111, 128, 132-141, 149, 164-165, 174, 221-223
eureka/S5_lightcurve_fitting/models/ExpRampModel.py            35      3    91%   55-56, 62
eureka/S5_lightcurve_fitting/models/GPModel.py                117    103    12%   22-45, 60-74, 91-111, 124-140, 154-171, 183-198, 202-223, 227-233
eureka/S5_lightcurve_fitting/models/KeplerOrbit.py            220    178    19%   38, 48, 58, 68, 78, 88, 98, 125-152, 156-159, 163-166, 170-187, 197, 210, 223, 236, 250, 266-289, 303-310, 324-331, 347-371, 385, 400-405, 423-443, 456-461, 477-497, 512-515, 526-575
eureka/S5_lightcurve_fitting/models/Model.py                  162     22    86%   33, 58, 81, 96, 134, 138, 163-164, 172, 181-182, 189, 211, 235, 258, 264, 284, 292, 301, 309, 316, 331
eureka/S5_lightcurve_fitting/models/PolynomialModel.py         38      1    97%   68
eureka/S5_lightcurve_fitting/models/SinusoidPhaseCurve.py      77     12    84%   4-5, 26, 40, 69, 94, 102-108, 115
eureka/S5_lightcurve_fitting/models/__init__.py                 6      0   100%
eureka/S5_lightcurve_fitting/plots_s5.py                      210     57    73%   40, 52, 89, 121, 155, 193, 272, 278, 308, 320, 341, 371-424
eureka/S5_lightcurve_fitting/s5_fit.py                        223     21    91%   16, 59, 72, 118, 179-184, 220-221, 245-249, 289, 293, 301, 305, 325
eureka/S5_lightcurve_fitting/simulations.py                    45      8    82%   10-11, 84-88, 93
eureka/S5_lightcurve_fitting/utils.py                         269    207    23%   46-65, 80-145, 166, 169-179, 210-220, 236-244, 265-289, 309-322, 357-380, 401-419, 442-525, 545-567, 621-653, 680, 692-697
eureka/S6_planet_spectra/__init__.py                            2      0   100%
eureka/S6_planet_spectra/plots_s6.py                           49     10    80%   29-35, 44, 49, 68
eureka/S6_planet_spectra/s6_spectra.py                        246     40    84%   20, 55, 106-107, 128, 132, 143, 156, 160, 164, 170-171, 174-191, 209, 230-231, 265, 273, 281, 290, 294, 307, 311-312, 316, 321, 343
eureka/__init__.py                                             18      3    83%   14-16
eureka/lib/__init__.py                                         16      0   100%
eureka/lib/astropytable.py                                     58      8    86%   39-40, 77-78, 117-118, 147-148
eureka/lib/centroid.py                                         33     13    61%   71-90, 136-137, 148-149
eureka/lib/clipping.py                                         51     30    41%   57, 62-65, 94-99, 106-109, 137-164
eureka/lib/disk.py                                             12     10    17%   84-101
eureka/lib/gaussian.py                                        175    114    35%   184-186, 190, 194, 199, 205, 280-319, 325-347, 561, 574-578, 588-591, 600-603, 615-616, 674-675, 677-678, 690, 705-741, 767-789, 793-801
eureka/lib/gelmanrubin.py                                      22     19    14%   30-53, 117-125
eureka/lib/logedit.py                                          22      4    82%   90-91, 123-124
eureka/lib/manageevent.py                                      47     26    45%   91-100, 104-106, 152-160, 195-204
eureka/lib/medstddev.py                                        45     41     9%   90-118, 144-159, 214-237
eureka/lib/plots.py                                           573    552     4%   7-35, 108-130, 134-182, 185-266, 270-309, 313-352, 356-426, 430-474, 478-502, 506-532, 536-598, 603-658, 662-722, 726-746, 750-770
eureka/lib/readECF.py                                          70     13    81%   50, 83-87, 111-117, 221-223
eureka/lib/readEPF.py                                         118     35    70%   43-47, 79, 103-116, 133, 168, 171-172, 204-208, 232-238, 260, 265, 290, 376-378
eureka/lib/smooth.py                                           33     17    48%   36-64, 72-73
eureka/lib/smoothing.py                                        17     14    18%   8-27
eureka/lib/sort_nicely.py                                      11      0   100%
eureka/lib/splinterp.py                                         5      0   100%
eureka/lib/suntimecorr.py                                      47      1    98%   274
eureka/lib/utc_tt.py                                           54     26    52%   20-46, 92
eureka/lib/util.py                                             87      6    93%   83-87, 126, 132-134
eureka/version.py                                               1      0   100%
setup.py                                                       11     11     0%   2-20
tests/__init__.py                                               3      0   100%
tests/test_MIRI.py                                             67      7    90%   12-13, 23-27, 53
tests/test_NIRCam.py                                           50      2    96%   12-13
tests/test_NIRSpec.py                                          58      5    91%   12-13, 22-23, 48
tests/test_WFC3.py                                             22      0   100%
tests/test_general.py                                          30      0   100%
tests/test_lightcurve_fitting.py                              150      6    96%   162-164, 206-208
-----------------------------------------------------------------------------------------
TOTAL                                                        7842   3667    53%

While our test coverage is getting fairly high and we will know whether or not the code will crash for most use cases, we don't do any real testing to see whether we get the expected values (or array shapes, etc.) out of different functions. I'm thinking of tests like the test_b2f function in test_general.py. That is something we should do once we have done the easier task of increasing overall test coverage with end-to-end tests.