rubin-sim 2.2.3__tar.gz → 2.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. {rubin_sim-2.2.3/rubin_sim.egg-info → rubin_sim-2.2.4}/PKG-INFO +1 -1
  2. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/batch/run_prenight_sims.sh +5 -2
  3. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/coord_stackers.py +37 -1
  4. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/date_stackers.py +48 -0
  5. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/opsim_utils.py +1 -1
  6. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/stellar_mags.py +1 -1
  7. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/prenight.py +43 -13
  8. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/sim_archive.py +94 -10
  9. {rubin_sim-2.2.3 → rubin_sim-2.2.4/rubin_sim.egg-info}/PKG-INFO +1 -1
  10. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stackers.py +51 -0
  11. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_prenight.py +2 -1
  12. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_sim_archive.py +3 -3
  13. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.git_archival.txt +0 -0
  14. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.gitattributes +0 -0
  15. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/build_container.yaml +0 -0
  16. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/build_docs.yaml +0 -0
  17. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/cache.yaml +0 -0
  18. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/rebase_checker.yaml +0 -0
  19. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/ruff.yaml +0 -0
  20. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/test_and_build.yaml +0 -0
  21. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.gitignore +0 -0
  22. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.pre-commit-config.yaml +0 -0
  23. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/Dockerfile +0 -0
  24. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/LICENSE +0 -0
  25. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/README.md +0 -0
  26. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/README_dev.md +0 -0
  27. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/batch/compile_prenight_metadata_cache.sh +0 -0
  28. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/container_environment.yaml +0 -0
  29. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/.gitignore +0 -0
  30. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/Makefile +0 -0
  31. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/api.rst +0 -0
  32. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/archive.rst +0 -0
  33. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/conf.py +0 -0
  34. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/data-api.rst +0 -0
  35. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/data-download.rst +0 -0
  36. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/documenteer.toml +0 -0
  37. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/index.rst +0 -0
  38. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/installation.rst +0 -0
  39. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/introduction.rst +0 -0
  40. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-batches.rst +0 -0
  41. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-db.rst +0 -0
  42. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-maf-contrib.rst +0 -0
  43. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-maps.rst +0 -0
  44. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-metricbundles.rst +0 -0
  45. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-metrics.rst +0 -0
  46. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-plots.rst +0 -0
  47. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-run-comparison.rst +0 -0
  48. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-slicers.rst +0 -0
  49. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-stackers.rst +0 -0
  50. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-utils.rst +0 -0
  51. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api.rst +0 -0
  52. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf.rst +0 -0
  53. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/metric_list.py +0 -0
  54. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/moving-objects-api.rst +0 -0
  55. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/moving-objects.rst +0 -0
  56. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/phot-utils-api.rst +0 -0
  57. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/phot-utils.rst +0 -0
  58. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/satellite-constellations-api.rst +0 -0
  59. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/satellite-constellations.rst +0 -0
  60. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/selfcal-api.rst +0 -0
  61. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/selfcal.rst +0 -0
  62. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/sim-archive-api.rst +0 -0
  63. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/skybrightness-api.rst +0 -0
  64. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/skybrightness.rst +0 -0
  65. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/user-guide.rst +0 -0
  66. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/example_deployment.yaml +0 -0
  67. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/optional-requirements.txt +0 -0
  68. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/pyproject.toml +0 -0
  69. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/requirements.txt +0 -0
  70. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/__init__.py +0 -0
  71. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/data/__init__.py +0 -0
  72. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/data/rs_download_data.py +0 -0
  73. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/__init__.py +0 -0
  74. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/__init__.py +0 -0
  75. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/altaz_batch.py +0 -0
  76. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/col_map_dict.py +0 -0
  77. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/common.py +0 -0
  78. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/ddf_batch.py +0 -0
  79. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/filterchange_batch.py +0 -0
  80. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/glance_batch.py +0 -0
  81. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/hourglass_batch.py +0 -0
  82. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/info_batch.py +0 -0
  83. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/metadata_batch.py +0 -0
  84. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/moving_objects_batch.py +0 -0
  85. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/openshutter_batch.py +0 -0
  86. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/radar_limited.py +0 -0
  87. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/science_radar_batch.py +0 -0
  88. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/skycoverage.py +0 -0
  89. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/slew_batch.py +0 -0
  90. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/srd_batch.py +0 -0
  91. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/time_batch.py +0 -0
  92. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/time_sci_batch.py +0 -0
  93. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/visitdepth_batch.py +0 -0
  94. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/__init__.py +0 -0
  95. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/add_run.py +0 -0
  96. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/results_db.py +0 -0
  97. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/tracking_db.py +0 -0
  98. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/ddf_dir.py +0 -0
  99. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/generate_ss.py +0 -0
  100. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/glance_dir.py +0 -0
  101. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/__init__.py +0 -0
  102. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/calculate_lsst_field_visibility_astropy.py +0 -0
  103. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/depth_limited_num_gal_metric.py +0 -0
  104. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/example_new_metrics.py +0 -0
  105. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/filter_pair_t_gaps_metric.py +0 -0
  106. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/grb_transient_metric.py +0 -0
  107. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/gw170817_det_metric.py +0 -0
  108. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/intervals_between_obs_metric.py +0 -0
  109. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/kne_metrics.py +0 -0
  110. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_metrics.py +0 -0
  111. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/__init__.py +0 -0
  112. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/constants_for_pipeline.py +0 -0
  113. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_metric_extended.py +0 -0
  114. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/galaxy_counts_with_pixel_calibration.py +0 -0
  115. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lv_dwarfs/__init__.py +0 -0
  116. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lv_dwarfs/lv_dwarfs_metrics.py +0 -0
  117. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/microlensing_metric.py +0 -0
  118. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/num_obs_in_survey_time_overlap_metric.py +0 -0
  119. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_metric.py +0 -0
  120. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_star_metric.py +0 -0
  121. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_star_modulation_metric.py +0 -0
  122. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/presto_color_kne_pop_metric.py +0 -0
  123. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/selfcal_uniformity_metric.py +0 -0
  124. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_count_mass_metric.py +0 -0
  125. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_count_metric.py +0 -0
  126. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/__init__.py +0 -0
  127. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/abs_mag.py +0 -0
  128. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/coords.py +0 -0
  129. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/readme.txt +0 -0
  130. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/spec_type.py +0 -0
  131. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/starcount.py +0 -0
  132. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/starcount_bymass.py +0 -0
  133. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/stellardensity.py +0 -0
  134. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/static_probes_fom_summary_metric.py +0 -0
  135. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/tdes_pop_metric.py +0 -0
  136. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/transient_ascii_sed_metric.py +0 -0
  137. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/triplet_metric.py +0 -0
  138. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/var_depth_metric.py +0 -0
  139. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/xrb_metrics.py +0 -0
  140. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/young_stellar_objects_metric.py +0 -0
  141. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_night_report.py +0 -0
  142. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/make_fbs_tracking_db.py +0 -0
  143. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/__init__.py +0 -0
  144. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/base_map.py +0 -0
  145. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/create_gaia_density_map.py +0 -0
  146. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/dust_map.py +0 -0
  147. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/dust_map_3d.py +0 -0
  148. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/ebv_3d_hp.py +0 -0
  149. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/ebv_hp.py +0 -0
  150. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/gal_coords_map.py +0 -0
  151. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/galactic_plane_priority_maps.py +0 -0
  152. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/stellar_density_map.py +0 -0
  153. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/trilegal_map.py +0 -0
  154. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metadata_dir.py +0 -0
  155. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/__init__.py +0 -0
  156. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/metric_bundle.py +0 -0
  157. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/metric_bundle_group.py +0 -0
  158. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/mo_metric_bundle.py +0 -0
  159. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/__init__.py +0 -0
  160. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/agn_time_lag_metric.py +0 -0
  161. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/agnstructure.py +0 -0
  162. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/area_summary_metrics.py +0 -0
  163. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/base_metric.py +0 -0
  164. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/brown_dwarf_metric.py +0 -0
  165. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/cadence_metrics.py +0 -0
  166. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/calibration_metrics.py +0 -0
  167. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/chip_vendor_metric.py +0 -0
  168. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/color_slope_metrics.py +0 -0
  169. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/coverage_metric.py +0 -0
  170. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/crowding_metric.py +0 -0
  171. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/cumulative_metric.py +0 -0
  172. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/dcr_metric.py +0 -0
  173. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/exgal_m5.py +0 -0
  174. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/fft_metric.py +0 -0
  175. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/galactic_plane_metrics.py +0 -0
  176. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/galplane_time_sampling_metrics.py +0 -0
  177. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/hourglass_metric.py +0 -0
  178. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/incremental_template_metric.py +0 -0
  179. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/kuiper_metrics.py +0 -0
  180. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/mo_metrics.py +0 -0
  181. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/mo_summary_metrics.py +0 -0
  182. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/night_pointing_metric.py +0 -0
  183. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/optimal_m5_metric.py +0 -0
  184. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/pair_metric.py +0 -0
  185. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/periodic_detect_metric.py +0 -0
  186. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/phase_gap_metric.py +0 -0
  187. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/qso_number_counts_metric.py +0 -0
  188. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/scaling_metrics.py +0 -0
  189. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/schedview_metrics.py +0 -0
  190. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/season_metrics.py +0 -0
  191. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/simple_metrics.py +0 -0
  192. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sky_sat_metric.py +0 -0
  193. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_cadence_metric.py +0 -0
  194. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_n_sn_metric.py +0 -0
  195. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_sl_metric.py +0 -0
  196. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_snr_metric.py +0 -0
  197. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/snr_weight.py +0 -0
  198. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/star_density.py +0 -0
  199. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/string_count_metric.py +0 -0
  200. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/summary_metrics.py +0 -0
  201. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/surfb_metric.py +0 -0
  202. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/technical_metrics.py +0 -0
  203. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/tgaps.py +0 -0
  204. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/transient_metrics.py +0 -0
  205. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/use_metrics.py +0 -0
  206. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/vector_metrics.py +0 -0
  207. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/visit_groups_metric.py +0 -0
  208. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/weak_lensing_systematics_metric.py +0 -0
  209. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/__init__.py +0 -0
  210. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/hg_plotters.py +0 -0
  211. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/hourglass_plotters.py +0 -0
  212. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/mo_plotters.py +0 -0
  213. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/nd_plotters.py +0 -0
  214. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/neo_distance_plotter.py +0 -0
  215. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/night_pointing_plotter.py +0 -0
  216. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/oned_plotters.py +0 -0
  217. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/perceptual_rainbow.py +0 -0
  218. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/plot_handler.py +0 -0
  219. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/skyproj_plotters.py +0 -0
  220. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/spatial_plotters.py +0 -0
  221. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/special_plotters.py +0 -0
  222. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/two_d_plotters.py +0 -0
  223. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/xyplotter.py +0 -0
  224. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/__init__.py +0 -0
  225. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/archive.py +0 -0
  226. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/gather_summaries.py +0 -0
  227. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/microlensing_compare.py +0 -0
  228. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/radar_plot.py +0 -0
  229. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/summary_plots.py +0 -0
  230. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_calc.py +0 -0
  231. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_fractions.py +0 -0
  232. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_join.py +0 -0
  233. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_selfcal_metric.py +0 -0
  234. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/scimaf_dir.py +0 -0
  235. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/show_maf.py +0 -0
  236. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/__init__.py +0 -0
  237. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/base_slicer.py +0 -0
  238. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/base_spatial_slicer.py +0 -0
  239. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_sdss_slicer.py +0 -0
  240. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_slicer.py +0 -0
  241. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_subset_slicer.py +0 -0
  242. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/hourglass_slicer.py +0 -0
  243. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/mo_slicer.py +0 -0
  244. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/movie_slicer.py +0 -0
  245. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/nd_slicer.py +0 -0
  246. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/one_d_slicer.py +0 -0
  247. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/time_interval_slicers.py +0 -0
  248. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/uni_slicer.py +0 -0
  249. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/user_points_slicer.py +0 -0
  250. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/__init__.py +0 -0
  251. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/base_stacker.py +0 -0
  252. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/general_stackers.py +0 -0
  253. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/get_col_info.py +0 -0
  254. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/label_stackers.py +0 -0
  255. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/m5_optimal_stacker.py +0 -0
  256. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/mo_phase.py +0 -0
  257. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/mo_stackers.py +0 -0
  258. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/n_follow_stacker.py +0 -0
  259. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/neo_dist_stacker.py +0 -0
  260. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/sdss_stackers.py +0 -0
  261. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/sn_stacker.py +0 -0
  262. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/teff_stacker.py +0 -0
  263. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/__init__.py +0 -0
  264. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/astrometry_utils.py +0 -0
  265. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/generate_fov_map.py +0 -0
  266. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/get_date_version.py +0 -0
  267. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/maf_utils.py +0 -0
  268. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/output_utils.py +0 -0
  269. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/sn_n_sn_utils.py +0 -0
  270. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/sn_utils.py +0 -0
  271. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/__init__.py +0 -0
  272. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/favicon.ico +0 -0
  273. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/maf_run_results.py +0 -0
  274. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/maf_tracking.py +0 -0
  275. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/sorttable.js +0 -0
  276. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/allmetricresults.html +0 -0
  277. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/configs.html +0 -0
  278. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/macros.html +0 -0
  279. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/master.html +0 -0
  280. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/metricselect.html +0 -0
  281. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/multicolor.html +0 -0
  282. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/results.html +0 -0
  283. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/runselect.html +0 -0
  284. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/stats.html +0 -0
  285. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/__init__.py +0 -0
  286. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/base_obs.py +0 -0
  287. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/cheby_fits.py +0 -0
  288. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/cheby_values.py +0 -0
  289. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/chebyshev_utils.py +0 -0
  290. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/direct_obs.py +0 -0
  291. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/make_lsst_obs.py +0 -0
  292. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/ooephemerides.py +0 -0
  293. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/orbits.py +0 -0
  294. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/pre_generate.py +0 -0
  295. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/utils.py +0 -0
  296. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/__init__.py +0 -0
  297. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/bandpass.py +0 -0
  298. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/photometric_parameters.py +0 -0
  299. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/physical_parameters.py +0 -0
  300. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/predicted_zeropoints.py +0 -0
  301. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/sed.py +0 -0
  302. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/sed_utils.py +0 -0
  303. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/signaltonoise.py +0 -0
  304. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/spectral_resampling.py +0 -0
  305. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/__init__.py +0 -0
  306. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/basis_function.py +0 -0
  307. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/model_observatory.py +0 -0
  308. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/sat_utils.py +0 -0
  309. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/__init__.py +0 -0
  310. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/generate_catalog.py +0 -0
  311. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/offsets.py +0 -0
  312. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/solver.py +0 -0
  313. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/star_tools.py +0 -0
  314. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/__init__.py +0 -0
  315. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/make_snapshot.py +0 -0
  316. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/__init__.py +0 -0
  317. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/allsky_db.py +0 -0
  318. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/data/ESO_Spectra/eso_tools.py +0 -0
  319. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/data/solarSpec/package.py +0 -0
  320. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/generate_hdf5.py +0 -0
  321. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/interp_components.py +0 -0
  322. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/sky_model.py +0 -0
  323. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/twilight_func.py +0 -0
  324. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/utils.py +0 -0
  325. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/SOURCES.txt +0 -0
  326. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/dependency_links.txt +0 -0
  327. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/entry_points.txt +0 -0
  328. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/requires.txt +0 -0
  329. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/top_level.txt +0 -0
  330. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/setup.cfg +0 -0
  331. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/setup.py +0 -0
  332. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/showmaf-deploy.yaml +0 -0
  333. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/test-requirements.txt +0 -0
  334. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/data/test_data.py +0 -0
  335. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/data/test_ddf_grid.py +0 -0
  336. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_3x2fom.py +0 -0
  337. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_archive.py +0 -0
  338. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_basemetrics.py +0 -0
  339. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_batchcommon.py +0 -0
  340. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_batches.py +0 -0
  341. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_cadencemetrics.py +0 -0
  342. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_calibrationmetrics.py +0 -0
  343. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_color_slopes.py +0 -0
  344. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_gathersummaries.py +0 -0
  345. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_healpixslicer.py +0 -0
  346. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_healpixsubsetslicer.py +0 -0
  347. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_hgplotters.py +0 -0
  348. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_hourglassmetric.py +0 -0
  349. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_io.py +0 -0
  350. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_json.py +0 -0
  351. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_maps.py +0 -0
  352. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_metricbundle.py +0 -0
  353. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_mometrics.py +0 -0
  354. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_movieslicer.py +0 -0
  355. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_ndslicer.py +0 -0
  356. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_neodistanceplotter.py +0 -0
  357. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_onedslicer.py +0 -0
  358. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_opsimutils.py +0 -0
  359. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_plotters.py +0 -0
  360. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_resultsdb.py +0 -0
  361. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_schedviewmetrics.py +0 -0
  362. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_simplemetrics.py +0 -0
  363. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_snmetrics.py +0 -0
  364. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_snmetrics_nsn.py +0 -0
  365. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stellarmags.py +0 -0
  366. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stringcount.py +0 -0
  367. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_summary_plots.py +0 -0
  368. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_summarymetrics.py +0 -0
  369. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_technicalmetrics.py +0 -0
  370. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_templatemetrics.py +0 -0
  371. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_timeintervalslicers.py +0 -0
  372. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_trackingdb.py +0 -0
  373. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_unislicer.py +0 -0
  374. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_vectormetrics.py +0 -0
  375. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_visitgroupsmetric.py +0 -0
  376. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_camera.py +0 -0
  377. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyfits.py +0 -0
  378. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyshevutils.py +0 -0
  379. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyvalues.py +0 -0
  380. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_ephemerides.py +0 -0
  381. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_orbits.py +0 -0
  382. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_approximatebandpasses.py +0 -0
  383. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_photometricparameters.py +0 -0
  384. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_photometry.py +0 -0
  385. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_predicted_zeropoints.py +0 -0
  386. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_read_bandpasses.py +0 -0
  387. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_sed.py +0 -0
  388. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_snr.py +0 -0
  389. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/satellite_constellations/test_satellites.py +0 -0
  390. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_make_snapshot.py +0 -0
  391. {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/skybrightness/test_skymodel.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rubin-sim
3
- Version: 2.2.3
3
+ Version: 2.2.4
4
4
  Summary: Scheduler, survey strategy analysis, and other simulation tools for Rubin Observatory.
5
5
  License: GPL
6
6
  Project-URL: documentation, https://rubin-sim.lsst.io
@@ -29,6 +29,7 @@ conda activate /sdf/data/rubin/shared/scheduler/envs/prenight
29
29
 
30
30
  set -o xtrace
31
31
 
32
+ export TELESCOPE=$1
32
33
  export AWS_PROFILE=prenight
33
34
  WORK_DIR=$(date '+/sdf/data/rubin/shared/scheduler/prenight/work/run_prenight_sims/%Y-%m-%dT%H%M%S' --utc)
34
35
  echo "Working in $WORK_DIR"
@@ -55,16 +56,18 @@ TS_FBS_UTILS_TAG=$(curl -s https://api.github.com/repos/lsst-ts/ts_fbs_utils/tag
55
56
  pip install --no-deps --target=${PACKAGE_DIR} git+https://github.com/lsst-ts/ts_fbs_utils.git@${TS_FBS_UTILS_TAG}
56
57
 
57
58
  # Get the scheduler configuration script
58
- SCHEDULER_CONFIG_SCRIPT=$(scheduler_config_at_time latiss)
59
+ SCHEDULER_CONFIG_SCRIPT=$(scheduler_config_at_time ${TELESCOPE})
59
60
 
60
61
  # Get the path to prenight_sim as provided by the current environment,
61
62
  # so we do not accidentally run one from the adjusted PATH below.
62
63
  PRENIGHT_SIM=$(which prenight_sim)
63
64
 
65
+ export SIM_ARCHIVE_LOG_FILE=${WORK_DIR}/sim_archive_log.txt
66
+ export PRENIGHT_LOG_FILE=${WORK_DIR}/prenight_log.txt
64
67
  export PYTHONPATH=${PACKAGE_DIR}:${PYTHONPATH}
65
68
  export PATH=${PACKAGE_DIR}/bin:${PATH}
66
69
  printenv > env.out
67
70
  date --iso=s
68
- time ${PRENIGHT_SIM} --scheduler auxtel.pickle.xz --opsim None --repo=${TS_CONFIG_OCS_REPO} --script ${SCHEDULER_CONFIG_SCRIPT} --config_version ${TS_CONFIG_OCS_VERSION}
71
+ time ${PRENIGHT_SIM} --scheduler ${TELESCOPE}.pickle.xz --opsim None --repo=${TS_CONFIG_OCS_REPO} --script ${SCHEDULER_CONFIG_SCRIPT} --config_version ${TS_CONFIG_OCS_VERSION} --telescope ${TELESCOPE} 2>&1 > ${WORK_DIR}/prenight_sim.out
69
72
  date --iso=s
70
73
  echo "******* END of run_prenight_sims.sh *********"
@@ -1,5 +1,6 @@
1
- __all__ = ("ra_dec2_alt_az", "GalacticStacker", "EclipticStacker")
1
+ __all__ = ("ra_dec2_alt_az", "GalacticStacker", "EclipticStacker", "HealpixStacker")
2
2
 
3
+ import healpy as hp
3
4
  import numpy as np
4
5
  from astropy import units as u
5
6
  from astropy.coordinates import SkyCoord, get_sun
@@ -186,3 +187,38 @@ class EclipticStacker(BaseStacker):
186
187
  sim_data["eclipLon"] = np.degrees(sim_data["eclipLon"])
187
188
  sim_data["eclipLat"] = np.degrees(sim_data["eclipLat"])
188
189
  return sim_data
190
+
191
+
192
+ class HealpixStacker(BaseStacker):
193
+ """Add healpix id
194
+
195
+ Parameters
196
+ ----------
197
+ ra_col : str, optional
198
+ Name of the RA column. Default fieldRA.
199
+ dec_col : str, optional
200
+ Name of the Dec column. Default fieldDec.
201
+ nside : int
202
+ nside healpix to use. Default to 128.
203
+ """
204
+
205
+ cols_added = ["ring_healpix", "nest_healpix"]
206
+
207
+ def __init__(self, ra_col: str = "fieldRA", dec_col: str = "fieldDec", nside: int = 128):
208
+ self.cols_req = [ra_col, dec_col]
209
+ self.ra_col = ra_col
210
+ self.dec_col = dec_col
211
+ self.nside = nside
212
+ self.units = [f"healpix (ring, nside={nside})", f"healpix (nest, nside={nside})"]
213
+
214
+ def _run(self, sim_data, cols_present=False):
215
+ if cols_present:
216
+ # Column already present in data;
217
+ # assume it is correct and does not need recalculating.
218
+ return sim_data
219
+
220
+ ra = sim_data[self.ra_col]
221
+ decl = sim_data[self.dec_col]
222
+ sim_data["ring_healpix"] = hp.ang2pix(self.nside, ra, decl, nest=False, lonlat=True)
223
+ sim_data["nest_healpix"] = hp.ang2pix(self.nside, ra, decl, nest=True, lonlat=True)
224
+ return sim_data
@@ -1,11 +1,13 @@
1
1
  __all__ = (
2
2
  "ObservationStartDatetime64Stacker",
3
+ "ObservationStartTimestampStacker",
3
4
  "DayObsStacker",
4
5
  "DayObsMJDStacker",
5
6
  "DayObsISOStacker",
6
7
  )
7
8
 
8
9
  import numpy as np
10
+ import pandas as pd
9
11
  from astropy.time import Time
10
12
 
11
13
  from .base_stacker import BaseStacker
@@ -36,6 +38,52 @@ class ObservationStartDatetime64Stacker(BaseStacker):
36
38
  return sim_data
37
39
 
38
40
 
41
+ class ObservationStartTimestampStacker(BaseStacker):
42
+ """Add the observation start time as a pandas.Timestamp."""
43
+
44
+ cols_added = ["start_timestamp"]
45
+
46
+ def __init__(
47
+ self,
48
+ mjd_col="observationStartMJD",
49
+ ):
50
+ self.mjd_col = mjd_col
51
+ self.cols_req = [self.mjd_col]
52
+ self.units = [None]
53
+ self.cols_added_dtypes = ["O"]
54
+
55
+ def run(self, sim_data, override=False):
56
+ # Override the run from the base class, not _run,
57
+ # because the implementation
58
+ # of _add_stackers_cols in run in the base closs
59
+ # clobbers the type for the new column,
60
+ # which we really need.
61
+
62
+ visits = sim_data if isinstance(sim_data, pd.DataFrame) else pd.DataFrame(sim_data)
63
+
64
+ if "start_timestamp" in visits.columns and not override:
65
+ return sim_data
66
+
67
+ if len(visits[self.mjd_col]) > 0:
68
+ visits["start_timestamp"] = pd.to_datetime(
69
+ visits[self.mjd_col] + 2400000.5, origin="julian", unit="D", utc=True
70
+ )
71
+ else:
72
+ # If we are passed an empty series, be sure to return add an empty
73
+ # series of the correct type back.
74
+ # This is handy if the result is being passed to bokeh
75
+ # for plotting.
76
+ visits["start_timestamp"] = pd.to_datetime(2460000.5, origin="julian", unit="D", utc=True)
77
+
78
+ match sim_data:
79
+ case pd.DataFrame():
80
+ return visits
81
+ case dict():
82
+ return visits.to_dict()
83
+ case _:
84
+ return visits.to_records(index=False)
85
+
86
+
39
87
  def _compute_day_obs_mjd(mjd):
40
88
  day_obs_mjd = np.floor(mjd - 0.5).astype("int")
41
89
  return day_obs_mjd
@@ -72,7 +72,7 @@ def get_sim_data(
72
72
  elif "summary" in tables[0]:
73
73
  table_name = "summary"
74
74
  else:
75
- ValueError("Could not guess table_name, set with table_name or full_sql_query kwargs")
75
+ raise ValueError("Could not guess table_name, set with table_name or full_sql_query kwargs")
76
76
  elif (table_name is None) & (full_sql_query is None):
77
77
  # If someone passes in a connection object with an old table_name
78
78
  # things will fail
@@ -81,7 +81,7 @@ def stellar_mags(stellar_type, rmag=19.0):
81
81
  if not hasattr(stellar_mags, "data"):
82
82
  names = ["stellar_type", "Model Name", "u-g", "g-r", "r-i", "i-z", "z-y"]
83
83
  types = [("U", 20), ("U", 35), float, float, float, float, float]
84
- data = np._core.records.fromrecords(
84
+ data = np.rec.fromrecords(
85
85
  [
86
86
  (
87
87
  "O",
@@ -15,6 +15,7 @@ import lzma
15
15
  import os
16
16
  import pickle
17
17
  import typing
18
+ import warnings
18
19
  from datetime import datetime
19
20
  from functools import partial
20
21
  from tempfile import TemporaryFile
@@ -45,7 +46,7 @@ try:
45
46
  except ModuleNotFoundError:
46
47
  get_baseline = partial(warn, "Cannot find default baseline because rubin_sim is not installed.")
47
48
 
48
- DEFAULT_ARCHIVE_URI = "s3://rubin-scheduler-prenight/opsim/"
49
+ DEFAULT_ARCHIVE_URI = "s3://rubin:rubin-scheduler-prenight/opsim/"
49
50
 
50
51
 
51
52
  def _run_sim(
@@ -343,6 +344,32 @@ def prenight_sim_cli(cli_args: list = []) -> None:
343
344
  )
344
345
  parser.add_argument("--scheduler", type=str, default=None, help="pickle file of the scheduler to run.")
345
346
  parser.add_argument("--config_version", type=str, default=None, help="Version of ts_config_ocs used.")
347
+ parser.add_argument("--telescope", type=str, default=None, help="Telescope scheduled.")
348
+
349
+ # Configure logging
350
+ stream_handler = logging.StreamHandler()
351
+ stream_handler.setLevel(logging.INFO)
352
+ log_handlers = [stream_handler]
353
+
354
+ log_file = os.environ.get("PRENIGHT_LOG_FILE", None)
355
+ if log_file is not None:
356
+ file_handler = logging.FileHandler(log_file, mode="w")
357
+ file_handler.setLevel(logging.DEBUG)
358
+ log_handlers.append(file_handler)
359
+
360
+ logging.basicConfig(
361
+ level=logging.DEBUG,
362
+ format="%(asctime)s: %(message)s",
363
+ datefmt="%Y-%m-%dT%H:%M:%S%z",
364
+ handlers=[stream_handler, file_handler],
365
+ )
366
+
367
+ # FIXME
368
+ warnings.filterwarnings(
369
+ "ignore",
370
+ category=UserWarning,
371
+ message="IntRounded being used with a potentially too-small scale factor.",
372
+ )
346
373
 
347
374
  # Only pass a default if we have an opsim
348
375
  baseline = get_baseline()
@@ -362,6 +389,7 @@ def prenight_sim_cli(cli_args: list = []) -> None:
362
389
  opsim_db = None if args.opsim in ("", "None") else args.opsim
363
390
 
364
391
  scheduler_file = args.scheduler
392
+ opsim_metadata = {"telescope": args.telescope}
365
393
  if args.repo is not None:
366
394
  if os.path.exists(scheduler_file):
367
395
  raise ValueError(f"File {scheduler_file} already exists!")
@@ -369,24 +397,26 @@ def prenight_sim_cli(cli_args: list = []) -> None:
369
397
  if args.config_version is not None:
370
398
  scheduler: CoreScheduler = get_scheduler_instance_from_path(args.script)
371
399
  save_scheduler(scheduler, scheduler_file)
372
- opsim_metadata = {
373
- "opsim_config_repository": args.repo,
374
- "opsim_config_script": args.script,
375
- "opsim_config_version": args.config_version,
376
- }
400
+ opsim_metadata.update(
401
+ {
402
+ "opsim_config_repository": args.repo,
403
+ "opsim_config_script": args.script,
404
+ "opsim_config_version": args.config_version,
405
+ }
406
+ )
377
407
  elif args.branch is not None:
378
408
  scheduler: CoreScheduler = get_scheduler(args.repo, args.script, args.branch)
379
409
  save_scheduler(scheduler, scheduler_file)
380
410
 
381
- opsim_metadata = {
382
- "opsim_config_repository": args.repo,
383
- "opsim_config_script": args.script,
384
- "opsim_config_branch": args.branch,
385
- }
411
+ opsim_metadata.update(
412
+ {
413
+ "opsim_config_repository": args.repo,
414
+ "opsim_config_script": args.script,
415
+ "opsim_config_branch": args.branch,
416
+ }
417
+ )
386
418
  else:
387
419
  raise ValueError("Either the branch or the version of ts_ocs_config must be specified")
388
- else:
389
- opsim_metadata = None
390
420
 
391
421
  run_prenights(
392
422
  day_obs_mjd,
@@ -6,7 +6,14 @@ __all__ = [
6
6
  "check_opsim_archive_resource",
7
7
  "read_archived_sim_metadata",
8
8
  "make_sim_archive_cli",
9
+ "compile_sim_metadata",
10
+ "read_sim_metadata_from_hdf",
11
+ "verify_compiled_sim_metadata",
9
12
  "drive_sim",
13
+ "compile_sim_archive_metadata_cli",
14
+ "find_latest_prenight_sim_for_nights",
15
+ "fetch_latest_prenight_sim_for_nights",
16
+ "fetch_obsloctap_visits",
10
17
  ]
11
18
 
12
19
  import argparse
@@ -243,7 +250,7 @@ def make_sim_archive_dir(
243
250
  return data_path
244
251
 
245
252
 
246
- def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin-scheduler-prenight/opsim/"):
253
+ def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin:rubin-scheduler-prenight/opsim/"):
247
254
  """Transfer the contents of an archive directory to an resource.
248
255
 
249
256
  Parameters
@@ -253,7 +260,7 @@ def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin-scheduler-pre
253
260
  transferred.
254
261
  archive_base_uri : `str`, optional
255
262
  The base URI where the archive files will be transferred to.
256
- Default is "s3://rubin-scheduler-prenight/opsim/".
263
+ Default is "s3://rubin:rubin-scheduler-prenight/opsim/".
257
264
 
258
265
  Returns
259
266
  -------
@@ -261,14 +268,17 @@ def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin-scheduler-pre
261
268
  The destination resource.
262
269
  """
263
270
 
271
+ LOGGER.debug(f"Beginning copy of {archive_dir} to {archive_base_uri}.")
264
272
  metadata_fname = Path(archive_dir).joinpath("sim_metadata.yaml")
265
273
  with open(metadata_fname, "r") as metadata_io:
266
274
  sim_metadata = yaml.safe_load(metadata_io)
275
+ LOGGER.debug(f"Completed read of {archive_dir}.")
267
276
 
268
277
  insert_date = datetime.datetime.utcnow().date().isoformat()
269
278
  insert_date_rpath = ResourcePath(archive_base_uri).join(insert_date, forceDirectory=True)
270
279
  if not insert_date_rpath.exists():
271
280
  insert_date_rpath.mkdir()
281
+ LOGGER.debug(f"Created {insert_date_rpath}.")
272
282
 
273
283
  # Number the sims in the insert date dir by
274
284
  # looing for all the interger directories, and choosing the next one.
@@ -285,6 +295,7 @@ def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin-scheduler-pre
285
295
  new_id = max(found_ids) + 1 if len(found_ids) > 0 else 1
286
296
  resource_rpath = insert_date_rpath.join(f"{new_id}", forceDirectory=True)
287
297
  resource_rpath.mkdir()
298
+ LOGGER.debug(f"Created {resource_rpath}.")
288
299
 
289
300
  # Include the metadata file itself.
290
301
  sim_metadata["files"]["metadata"] = {"name": "sim_metadata.yaml"}
@@ -293,6 +304,7 @@ def transfer_archive_dir(archive_dir, archive_base_uri="s3://rubin-scheduler-pre
293
304
  source_fname = Path(archive_dir).joinpath(file_info["name"])
294
305
  with open(source_fname, "rb") as source_io:
295
306
  content = source_io.read()
307
+ LOGGER.debug(f"Read {source_fname}.")
296
308
 
297
309
  destination_rpath = resource_rpath.join(file_info["name"])
298
310
  destination_rpath.write(content)
@@ -315,17 +327,24 @@ def check_opsim_archive_resource(archive_uri):
315
327
  validity: `dict`
316
328
  A dictionary of files checked, and their validity.
317
329
  """
330
+ LOGGER.debug(f"Starting to check file hashes in opsim sim archive {archive_uri}.")
318
331
  metadata_path = ResourcePath(archive_uri).join("sim_metadata.yaml")
319
332
  with metadata_path.open(mode="r") as metadata_io:
320
333
  sim_metadata = yaml.safe_load(metadata_io)
334
+ LOGGER.debug(f"Read sim metadata from {metadata_path}.)")
321
335
 
322
336
  results = {}
323
337
 
324
338
  for file_info in sim_metadata["files"].values():
325
339
  resource_path = ResourcePath(archive_uri).join(file_info["name"])
340
+ LOGGER.info(f"Reading {resource_path}.")
326
341
  content = resource_path.read()
327
342
 
328
343
  results[file_info["name"]] = file_info["md5"] == hashlib.md5(content).hexdigest()
344
+ if results[file_info["name"]]:
345
+ LOGGER.debug(f"{resource_path} checked and found to match recorded md5.")
346
+ else:
347
+ LOGGER.debug(f"{resource_path} has an md5 that differs from the recorded md5!")
329
348
 
330
349
  return results
331
350
 
@@ -386,11 +405,15 @@ def read_archived_sim_metadata(
386
405
  """
387
406
  latest_mjd = int(Time.now().mjd if latest is None else Time(latest).mjd)
388
407
  earliest_mjd = int(latest_mjd - (num_nights - 1))
408
+ LOGGER.debug(
409
+ f"Looking for simulation metadata with MJD between {earliest_mjd} and {latest_mjd} in {base_uri}."
410
+ )
389
411
 
390
412
  compilation = {}
391
413
  compiled_uris_by_date = {}
392
414
  max_compiled_date = "1900-01-01"
393
415
  if compilation_resource is not None:
416
+ LOGGER.debug(f"Reading metadata cache {compilation_resource}.")
394
417
  try:
395
418
  compilation.update(read_sim_metadata_from_hdf(compilation_resource))
396
419
  for uri in compilation:
@@ -399,6 +422,7 @@ def read_archived_sim_metadata(
399
422
  compiled_uris_by_date[iso_date] = []
400
423
  compiled_uris_by_date[iso_date].append(uri)
401
424
  max_compiled_date = max(max_compiled_date, iso_date)
425
+ LOGGER.debug(f"Maximum simulation execution date in metadata cache: {max_compiled_date}")
402
426
  except FileNotFoundError:
403
427
  LOGGER.warning(f"No metadata cache {compilation_resource}, not using cache.")
404
428
  pass
@@ -418,17 +442,25 @@ def read_archived_sim_metadata(
418
442
  ):
419
443
  for found_file in found_files:
420
444
  found_resource = ResourcePath(base_dir).join(found_file)
445
+ LOGGER.debug(f"Found {found_resource}")
421
446
  sim_uri = str(found_resource.dirname())
422
447
  if sim_uri in compilation:
448
+ LOGGER.debug(f"Not reading {found_resource}, already in the read compliation.")
423
449
  these_metadata = compilation[sim_uri]
424
450
  else:
451
+ LOGGER.debug(f"Reading {found_resource} (absent from compilation).")
425
452
  these_metadata = yaml.safe_load(found_resource.read().decode("utf-8"))
426
453
  these_metadata["label"] = _build_archived_sim_label(
427
454
  base_uri, found_resource, these_metadata
428
455
  )
456
+ LOGGER.debug(f"Read successfully: {found_resource}")
429
457
  if iso_date < max_compiled_date:
430
- print(f"Simulation at {sim_uri} expected but not found in compilation.")
458
+ LOGGER.error(
459
+ f"Simulation at {sim_uri} expected but not found in compilation."
460
+ )
431
461
  all_metadata[sim_uri] = these_metadata
462
+ else:
463
+ LOGGER.debug(f"No simulations found with generation date of {iso_date}")
432
464
  else:
433
465
  if iso_date in compiled_uris_by_date:
434
466
  for sim_uri in compiled_uris_by_date[iso_date]:
@@ -438,7 +470,18 @@ def read_archived_sim_metadata(
438
470
  if iso_date in compiled_uris_by_date:
439
471
  for sim_uri in compiled_uris_by_date[iso_date]:
440
472
  if sim_uri not in all_metadata:
441
- print(f"Simulation at {sim_uri} in compiled metadata but not archive.")
473
+ message = f"Simulation at {sim_uri} in compiled metadata but not archive."
474
+ print(message)
475
+ LOGGER.error(message)
476
+ else:
477
+ LOGGER.debug(
478
+ f"Date {iso_date} not expected to be in the metadata compilation, not checking for it."
479
+ )
480
+
481
+ if len(all_metadata) == 0:
482
+ earliest_iso = Time(earliest_mjd, format="mjd").iso[:10]
483
+ latest_iso = Time(latest_mjd, format="mjd").iso[:10]
484
+ LOGGER.info(f"No simulations run between {earliest_iso} through {latest_iso} found in {base_uri}")
442
485
 
443
486
  return all_metadata
444
487
 
@@ -488,7 +531,7 @@ def make_sim_archive_cli(*args):
488
531
  parser.add_argument(
489
532
  "--archive_base_uri",
490
533
  type=str,
491
- default="s3://rubin-scheduler-prenight/opsim/",
534
+ default="s3://rubin:rubin-scheduler-prenight/opsim/",
492
535
  help="Base URI for the archive",
493
536
  )
494
537
  parser.add_argument("--tags", type=str, default=[], nargs="*", help="The tags on the simulation.")
@@ -529,8 +572,10 @@ def make_sim_archive_cli(*args):
529
572
  label=arg_values.label,
530
573
  capture_env=arg_values.current_env,
531
574
  )
575
+ LOGGER.info(f"Created simulation archived directory: {data_path.name}")
532
576
 
533
577
  sim_archive_uri = transfer_archive_dir(data_path.name, arg_values.archive_base_uri)
578
+ LOGGER.info(f"Transferred {data_path} to {sim_archive_uri}")
534
579
 
535
580
  return sim_archive_uri
536
581
 
@@ -558,6 +603,7 @@ def compile_sim_metadata(
558
603
  compilation_fname : `ResourcePath`
559
604
  The resource to which the hdf5 file was written.
560
605
  """
606
+ LOGGER.debug("Starting compile_sim_metadata.")
561
607
 
562
608
  if append:
563
609
  sim_metadata = read_archived_sim_metadata(
@@ -637,6 +683,7 @@ def read_sim_metadata_from_hdf(compilation_resource: str | ResourcePath) -> dict
637
683
 
638
684
  with compilation_resource.as_local() as local_compilation_resource:
639
685
  compilation_fname: str = local_compilation_resource.ospath
686
+ LOGGER.debug(f"{compilation_resource} copied to {compilation_fname}.")
640
687
  sim_df = pd.read_hdf(compilation_fname, "simulations")
641
688
  file_df = pd.read_hdf(compilation_fname, "files")
642
689
  sim_runner_kwargs_df = pd.read_hdf(compilation_fname, "kwargs")
@@ -868,6 +915,7 @@ def drive_sim(
868
915
  in_files["notebook"] = notebook
869
916
 
870
917
  with TemporaryDirectory() as local_data_dir:
918
+ LOGGER.debug(f"Using temporary directory {local_data_dir}.")
871
919
  # We want to store the state of the scheduler at the start of
872
920
  # the sim, so we need to save it now before we run the simulation.
873
921
  scheduler_path = Path(local_data_dir).joinpath("scheduler.pickle.xz")
@@ -875,7 +923,9 @@ def drive_sim(
875
923
  pickle.dump(scheduler, pio)
876
924
  in_files["scheduler"] = scheduler_path.as_posix()
877
925
 
926
+ LOGGER.debug("About to call sim_runner.")
878
927
  sim_results = sim_runner(observatory, scheduler, **kwargs)
928
+ LOGGER.debug("sim_runner complete.")
879
929
 
880
930
  observations = sim_results[2]
881
931
  reward_df = sim_results[3] if scheduler.keep_rewards else None
@@ -924,6 +974,14 @@ def compile_sim_archive_metadata_cli(*args):
924
974
  + "but add new simulations with dates after the last current entry.",
925
975
  )
926
976
 
977
+ log_file = os.environ.get("SIM_ARCHIVE_LOG_FILE", None)
978
+ if log_file is not None:
979
+ logging.basicConfig(
980
+ filename=log_file, format="%(asctime)s: %(message)s", datefmt="%Y-%m-%dT%H:%M:%S%z"
981
+ )
982
+ else:
983
+ logging.basicConfig(level=logging.INFO)
984
+
927
985
  arg_values = parser.parse_args() if len(args) == 0 else parser.parse_args(args)
928
986
  archive_uri = arg_values.archive_base_uri
929
987
  compilation_uri = arg_values.compilation_uri
@@ -940,6 +998,7 @@ def find_latest_prenight_sim_for_nights(
940
998
  first_day_obs: str | None = None,
941
999
  last_day_obs: str | None = None,
942
1000
  tags: tuple[str] = ("ideal", "nominal"),
1001
+ telescope: str = "simonyi",
943
1002
  max_simulation_age: int = 2,
944
1003
  archive_uri: str = "s3://rubin:rubin-scheduler-prenight/opsim/",
945
1004
  compilation_uri: str = "s3://rubin:rubin-scheduler-prenight/opsim/compiled_metadata_cache.h5",
@@ -957,6 +1016,9 @@ def find_latest_prenight_sim_for_nights(
957
1016
  tags : `tuple[str]`
958
1017
  A tuple of tags to filter simulations by.
959
1018
  Defaults to ``('ideal', 'nominal')``.
1019
+ telescope : `str`
1020
+ The telescope to search for (simonyi or auxtel).
1021
+ Defaults to simonyi.
960
1022
  max_simulation_age : `int`
961
1023
  The maximum age of simulations to consider, in days.
962
1024
  Simulations older than ``max_simulation_age`` will not be considered.
@@ -983,6 +1045,7 @@ def find_latest_prenight_sim_for_nights(
983
1045
  sim_metadata = read_archived_sim_metadata(
984
1046
  archive_uri, num_nights=max_simulation_age, compilation_resource=compilation_uri
985
1047
  )
1048
+ LOGGER.debug(f"Total simulations it the last {max_simulation_age} days: {len(sim_metadata)}.")
986
1049
 
987
1050
  best_sim = None
988
1051
  for uri, sim in sim_metadata.items():
@@ -994,6 +1057,8 @@ def find_latest_prenight_sim_for_nights(
994
1057
  continue
995
1058
  if sim["simulated_dates"]["last"] < last_day_obs:
996
1059
  continue
1060
+ if "telescope" in sim and sim["telescope"].lower() != telescope.lower():
1061
+ continue
997
1062
  if not set(tags).issubset(sim["tags"]):
998
1063
  continue
999
1064
  if best_sim is not None:
@@ -1010,6 +1075,9 @@ def find_latest_prenight_sim_for_nights(
1010
1075
  .join(f"{best_sim['date_index']}", forceDirectory=True)
1011
1076
  .join(best_sim["files"]["observations"]["name"])
1012
1077
  )
1078
+ LOGGER.info(f"Most recent simulation meeting requested criteria is {best_sim['uri']}.")
1079
+ else:
1080
+ LOGGER.debug("No simulations met the requested criteria.")
1013
1081
 
1014
1082
  return best_sim
1015
1083
 
@@ -1018,11 +1086,12 @@ def fetch_latest_prenight_sim_for_nights(
1018
1086
  first_day_obs: str | None = None,
1019
1087
  last_day_obs: str | None = None,
1020
1088
  tags: tuple[str] = ("ideal", "nominal"),
1089
+ telescope: str = "simonyi",
1021
1090
  max_simulation_age: int = 2,
1022
1091
  archive_uri: str = "s3://rubin:rubin-scheduler-prenight/opsim/",
1023
1092
  compilation_uri: str = "s3://rubin:rubin-scheduler-prenight/opsim/compiled_metadata_cache.h5",
1024
1093
  **kwargs,
1025
- ) -> pd.DataFrame:
1094
+ ) -> pd.DataFrame | None:
1026
1095
  """Fetches visit parameters from the latest archived pre-night simulation
1027
1096
  with requested tags for a specified day of observing.
1028
1097
 
@@ -1037,6 +1106,9 @@ def fetch_latest_prenight_sim_for_nights(
1037
1106
  tags : `tuple[str]`
1038
1107
  A tuple of tags to filter simulations by.
1039
1108
  Defaults to ``('ideal', 'nominal')``.
1109
+ telescope : `str`
1110
+ The telescope to get sims for, "simonyi" or "auxtel".
1111
+ Defaults to "simonyi".
1040
1112
  max_simulation_age : `int`
1041
1113
  The maximum age of simulations to consider, in days. Simulations older
1042
1114
  than ``max_simulation_age`` will not be considered. Defaults to 2.
@@ -1057,14 +1129,22 @@ def fetch_latest_prenight_sim_for_nights(
1057
1129
  """
1058
1130
 
1059
1131
  sim_metadata = find_latest_prenight_sim_for_nights(
1060
- first_day_obs, last_day_obs, tags, max_simulation_age, archive_uri, compilation_uri
1132
+ first_day_obs, last_day_obs, tags, telescope, max_simulation_age, archive_uri, compilation_uri
1061
1133
  )
1062
- visits = get_sim_data(sim_metadata["opsim_rp"], **kwargs)
1134
+ if sim_metadata is None:
1135
+ LOGGER.info("No simulations meet requested criteria.")
1136
+ result = None
1137
+ else:
1138
+ visits = get_sim_data(sim_metadata["opsim_rp"], **kwargs)
1139
+ LOGGER.debug(f"Loaded {len(visits)} from {sim_metadata['opsim_rp']}")
1140
+ result = pd.DataFrame(visits)
1063
1141
 
1064
- return visits
1142
+ return result
1065
1143
 
1066
1144
 
1067
- def fetch_obsloctap_visits(day_obs: str | None = None, nights: int = 2) -> pd.DataFrame:
1145
+ def fetch_obsloctap_visits(
1146
+ day_obs: str | None = None, nights: int = 2, telescope: str = "simonyi"
1147
+ ) -> pd.DataFrame:
1068
1148
  """Return visits from latest nominal prenight briefing simulation.
1069
1149
 
1070
1150
  Parameters
@@ -1075,6 +1155,9 @@ def fetch_obsloctap_visits(day_obs: str | None = None, nights: int = 2) -> pd.Da
1075
1155
  nights : `int`
1076
1156
  The number of nights of observations to return.
1077
1157
  Defaults to 2.
1158
+ telescope : `str`
1159
+ The telescope to get visits for: "simonyi" or "auxtel".
1160
+ Defaults to "simonyi".
1078
1161
 
1079
1162
  Returns
1080
1163
  -------
@@ -1114,6 +1197,7 @@ def fetch_obsloctap_visits(day_obs: str | None = None, nights: int = 2) -> pd.Da
1114
1197
  first_day_obs,
1115
1198
  last_day_obs,
1116
1199
  tags=("ideal", "nominal"),
1200
+ telescope=telescope,
1117
1201
  max_simulation_age=max_simulation_age,
1118
1202
  sqlconstraint=sqlconstraint,
1119
1203
  dbcols=dbcols,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rubin-sim
3
- Version: 2.2.3
3
+ Version: 2.2.4
4
4
  Summary: Scheduler, survey strategy analysis, and other simulation tools for Rubin Observatory.
5
5
  License: GPL
6
6
  Project-URL: documentation, https://rubin-sim.lsst.io