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.
- {rubin_sim-2.2.3/rubin_sim.egg-info → rubin_sim-2.2.4}/PKG-INFO +1 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/batch/run_prenight_sims.sh +5 -2
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/coord_stackers.py +37 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/date_stackers.py +48 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/opsim_utils.py +1 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/stellar_mags.py +1 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/prenight.py +43 -13
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/sim_archive.py +94 -10
- {rubin_sim-2.2.3 → rubin_sim-2.2.4/rubin_sim.egg-info}/PKG-INFO +1 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stackers.py +51 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_prenight.py +2 -1
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_sim_archive.py +3 -3
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.git_archival.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.gitattributes +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/build_container.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/build_docs.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/cache.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/rebase_checker.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/ruff.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.github/workflows/test_and_build.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.gitignore +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/.pre-commit-config.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/Dockerfile +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/LICENSE +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/README.md +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/README_dev.md +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/batch/compile_prenight_metadata_cache.sh +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/container_environment.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/.gitignore +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/Makefile +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/archive.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/conf.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/data-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/data-download.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/documenteer.toml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/index.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/installation.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/introduction.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-batches.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-db.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-maf-contrib.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-maps.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-metricbundles.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-metrics.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-plots.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-run-comparison.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-slicers.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-stackers.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api-utils.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/maf.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/metric_list.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/moving-objects-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/moving-objects.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/phot-utils-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/phot-utils.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/satellite-constellations-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/satellite-constellations.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/selfcal-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/selfcal.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/sim-archive-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/skybrightness-api.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/skybrightness.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/docs/user-guide.rst +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/example_deployment.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/optional-requirements.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/pyproject.toml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/requirements.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/data/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/data/rs_download_data.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/altaz_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/col_map_dict.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/common.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/ddf_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/filterchange_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/glance_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/hourglass_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/info_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/metadata_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/moving_objects_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/openshutter_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/radar_limited.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/science_radar_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/skycoverage.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/slew_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/srd_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/time_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/time_sci_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/batches/visitdepth_batch.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/add_run.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/results_db.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/db/tracking_db.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/ddf_dir.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/generate_ss.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/glance_dir.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/calculate_lsst_field_visibility_astropy.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/depth_limited_num_gal_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/example_new_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/filter_pair_t_gaps_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/grb_transient_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/gw170817_det_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/intervals_between_obs_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/kne_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lss_obs_strategy/constants_for_pipeline.py +0 -0
- {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
- {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
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lv_dwarfs/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/lv_dwarfs/lv_dwarfs_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/microlensing_metric.py +0 -0
- {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
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_star_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/periodic_star_modulation_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/presto_color_kne_pop_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/selfcal_uniformity_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_count_mass_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_count_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/abs_mag.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/coords.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/readme.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/spec_type.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/starcount.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/starcount_bymass.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/star_counts/stellardensity.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/static_probes_fom_summary_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/tdes_pop_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/transient_ascii_sed_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/triplet_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/var_depth_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/xrb_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_contrib/young_stellar_objects_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maf_night_report.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/make_fbs_tracking_db.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/base_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/create_gaia_density_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/dust_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/dust_map_3d.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/ebv_3d_hp.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/ebv_hp.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/gal_coords_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/galactic_plane_priority_maps.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/stellar_density_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/maps/trilegal_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metadata_dir.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/metric_bundle.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/metric_bundle_group.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metric_bundles/mo_metric_bundle.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/agn_time_lag_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/agnstructure.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/area_summary_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/base_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/brown_dwarf_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/cadence_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/calibration_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/chip_vendor_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/color_slope_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/coverage_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/crowding_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/cumulative_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/dcr_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/exgal_m5.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/fft_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/galactic_plane_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/galplane_time_sampling_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/hourglass_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/incremental_template_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/kuiper_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/mo_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/mo_summary_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/night_pointing_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/optimal_m5_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/pair_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/periodic_detect_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/phase_gap_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/qso_number_counts_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/scaling_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/schedview_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/season_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/simple_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sky_sat_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_cadence_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_n_sn_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_sl_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/sn_snr_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/snr_weight.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/star_density.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/string_count_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/summary_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/surfb_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/technical_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/tgaps.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/transient_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/use_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/vector_metrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/visit_groups_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/metrics/weak_lensing_systematics_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/hg_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/hourglass_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/mo_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/nd_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/neo_distance_plotter.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/night_pointing_plotter.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/oned_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/perceptual_rainbow.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/plot_handler.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/skyproj_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/spatial_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/special_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/two_d_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/plots/xyplotter.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/archive.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/gather_summaries.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/microlensing_compare.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/radar_plot.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_comparison/summary_plots.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_calc.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_fractions.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_moving_join.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/run_selfcal_metric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/scimaf_dir.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/show_maf.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/base_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/base_spatial_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_sdss_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/healpix_subset_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/hourglass_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/mo_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/movie_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/nd_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/one_d_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/time_interval_slicers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/uni_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/slicers/user_points_slicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/base_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/general_stackers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/get_col_info.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/label_stackers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/m5_optimal_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/mo_phase.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/mo_stackers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/n_follow_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/neo_dist_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/sdss_stackers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/sn_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/stackers/teff_stacker.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/astrometry_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/generate_fov_map.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/get_date_version.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/maf_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/output_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/sn_n_sn_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/utils/sn_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/favicon.ico +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/maf_run_results.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/maf_tracking.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/sorttable.js +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/allmetricresults.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/configs.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/macros.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/master.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/metricselect.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/multicolor.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/results.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/runselect.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/maf/web/templates/stats.html +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/base_obs.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/cheby_fits.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/cheby_values.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/chebyshev_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/direct_obs.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/make_lsst_obs.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/ooephemerides.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/orbits.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/pre_generate.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/moving_objects/utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/bandpass.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/photometric_parameters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/physical_parameters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/predicted_zeropoints.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/sed.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/sed_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/signaltonoise.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/phot_utils/spectral_resampling.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/basis_function.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/model_observatory.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/satellite_constellations/sat_utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/generate_catalog.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/offsets.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/solver.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/selfcal/star_tools.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/sim_archive/make_snapshot.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/__init__.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/allsky_db.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/data/ESO_Spectra/eso_tools.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/data/solarSpec/package.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/generate_hdf5.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/interp_components.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/sky_model.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/twilight_func.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim/skybrightness/utils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/SOURCES.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/dependency_links.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/entry_points.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/requires.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/rubin_sim.egg-info/top_level.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/setup.cfg +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/setup.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/showmaf-deploy.yaml +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/test-requirements.txt +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/data/test_data.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/data/test_ddf_grid.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_3x2fom.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_archive.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_basemetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_batchcommon.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_batches.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_cadencemetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_calibrationmetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_color_slopes.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_gathersummaries.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_healpixslicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_healpixsubsetslicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_hgplotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_hourglassmetric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_io.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_json.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_maps.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_metricbundle.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_mometrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_movieslicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_ndslicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_neodistanceplotter.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_onedslicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_opsimutils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_plotters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_resultsdb.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_schedviewmetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_simplemetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_snmetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_snmetrics_nsn.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stellarmags.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_stringcount.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_summary_plots.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_summarymetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_technicalmetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_templatemetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_timeintervalslicers.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_trackingdb.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_unislicer.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_vectormetrics.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/maf/test_visitgroupsmetric.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_camera.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyfits.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyshevutils.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_chebyvalues.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_ephemerides.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/moving_objects/test_orbits.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_approximatebandpasses.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_photometricparameters.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_photometry.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_predicted_zeropoints.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_read_bandpasses.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_sed.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/phot_utils/test_snr.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/satellite_constellations/test_satellites.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/sim_archive/test_make_snapshot.py +0 -0
- {rubin_sim-2.2.3 → rubin_sim-2.2.4}/tests/skybrightness/test_skymodel.py +0 -0
|
@@ -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
|
|
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
|
|
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.
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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
|
-
|
|
383
|
-
|
|
384
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1142
|
+
return result
|
|
1065
1143
|
|
|
1066
1144
|
|
|
1067
|
-
def fetch_obsloctap_visits(
|
|
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,
|