Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .travis/test-lisa.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ fi
MonteCarloMarginalizeCode/Code/test/test_lisa_synthetic_demo.py \
MonteCarloMarginalizeCode/Code/test/test_lisa_fairdraw_weights.py \
MonteCarloMarginalizeCode/Code/test/test_lisa_l0_rescue.py \
MonteCarloMarginalizeCode/Code/test/test_lisa_sampler_plumbing.py \
MonteCarloMarginalizeCode/Code/test/test_lisa_av_state.py \
MonteCarloMarginalizeCode/Code/test/test_lisa_driver_drift.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,17 @@ def compute_gap():
main = collect(MAIN)
lisa = collect(LISA)
gap, extras = [], []
# A FUNC is satisfied by its BARE name as well as its qualified one. The main driver has
# ONE analyze_event and nests helpers inside it; this driver has TWO (analyze_event_LISA
# and analyze_event), so a helper ported here must be hoisted to module level or else
# duplicated -- and duplicating is the failure mode this audit exists to prevent. Without
# this, every correctly-hoisted port would sit in the gap forever as a false positive,
# which is how a gate gets trained out of people.
_lisa_bare = {n.rsplit(".", 1)[-1] for n in lisa["FUNC"]}
for cat in ("FUNC", "OPTION", "CONST", "ATTR"):
for name in sorted(set(main[cat]) - set(lisa[cat])):
if cat == "FUNC" and name.rsplit(".", 1)[-1] in _lisa_bare:
continue
gap.append({"category": cat, "name": name,
"key": "%s:%s" % (cat, name), "main_line": main[cat][name]})
for name in sorted(set(lisa[cat]) - set(main[cat])):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,6 @@
"decision": "PORT",
"reason": "Diagnostics for the replica triggers."
},
"FUNC:analyze_event._reject_if_collapsed": {
"decision": "PORT",
"reason": "Implementation of --reject-collapsed-live-volume."
},
"FUNC:dLofz": {
"decision": "PHYSICS",
"reason": "Cosmology helpers behind --d-prior-redshift. Same question: the interpolation range has to be re-chosen for MBHB redshifts."
Expand Down Expand Up @@ -311,68 +307,16 @@
},
"OPTION:--nf-flow-load": {
"decision": "PORT",
"reason": "Normalizing-flow persistence. Neither driver lists an NF method in ok_lnL_methods (identical lists), so NF is reached only as a portfolio member -- equally available to LISA. Low priority, but not LISA-specific in any way."
"reason": "Normalizing-flow persistence is detector-agnostic, but the LISA portfolio factory currently constructs only AV, GMM, and adaptive_cartesian_gpu members. Port the NF member construction and route load/save to that member before exposing these flags; hooks on the portfolio aggregate are a silent no-op because it has no flow API."
},
"OPTION:--nf-flow-save": {
"decision": "PORT",
"reason": "Normalizing-flow persistence. Neither driver lists an NF method in ok_lnL_methods (identical lists), so NF is reached only as a portfolio member -- equally available to LISA. Low priority, but not LISA-specific in any way."
},
"OPTION:--portfolio-adaptive-alloc": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-alloc-exponent": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-freeze-wt": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-grace-iters": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-probe-period": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-quality-signal": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-revive-period": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-varaha-can-freeze": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-varaha-max-frac": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-varaha-min-frac": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-varaha-never-freeze": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
},
"OPTION:--portfolio-weight-clip": {
"decision": "PORT",
"reason": "mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts --sampler-portfolio-args (an eval-able dict), so these are reachable today via that escape hatch; porting them as first-class flags is pipeline parity, which is what the pipe actually passes. Low risk, no physics."
"reason": "Normalizing-flow persistence is detector-agnostic, but the LISA portfolio factory currently constructs only AV, GMM, and adaptive_cartesian_gpu members. Port the NF member construction and route load/save to that member before exposing these flags; hooks on the portfolio aggregate are a silent no-op because it has no flow API."
},
"OPTION:--random-event": {
"decision": "PORT",
"reason": "Pick a random event from the input file. Detector-agnostic; flagged dangerous in its own help text for oversampling reasons that apply equally to LISA."
},
"OPTION:--reject-collapsed-live-volume": {
"decision": "PORT",
"reason": "AV live-volume collapse rejection. AV is wired in the LISA driver identically."
},
"OPTION:--rotation-n-harmonics": {
"decision": "NA",
"reason": "Sidereal time-dependence of an EARTH-BASED antenna pattern F(t). The LISA constellation's motion is already carried by the LISA response itself (factored_likelihood_LISA + the h5/TDI frames), so this correction is both unnecessary and wrong there -- it would apply Earth rotation to a heliocentric detector."
Expand All @@ -385,18 +329,6 @@
"decision": "NA",
"reason": "Sidereal time-dependence of an EARTH-BASED antenna pattern F(t). The LISA constellation's motion is already carried by the LISA response itself (factored_likelihood_LISA + the h5/TDI frames), so this correction is both unnecessary and wrong there -- it would apply Earth rotation to a heliocentric detector."
},
"OPTION:--sampler-anisotropic-bins": {
"decision": "PORT",
"reason": "AV per-axis bin counts during contraction. AV is wired in LISA, and the argument for it is if anything stronger there: the LISA extrinsic axes are no more isotropic than the ground-based ones, and a sky pair that localizes tightly while distance stays broad is the exact case this exists for."
},
"OPTION:--sampler-load-state": {
"decision": "PORT",
"reason": "AV live-volume state serialization. AV is wired in LISA; the state is the sampler's own internal grid, so it carries no LIGO-specific convention."
},
"OPTION:--sampler-save-state": {
"decision": "PORT",
"reason": "AV live-volume state serialization. AV is wired in LISA; the state is the sampler's own internal grid, so it carries no LIGO-specific convention."
},
"OPTION:--sampler-sequential-warmstart": {
"decision": "PORT",
"reason": "Warm-start each intrinsic point from the previous one's cloud. Applies whenever --n-events-to-analyze>1, which LISA supports. Its snapshot/restore prerequisites (Finding 5) already landed with the L0 rescue, so this is now capture + the event-loop wiring only."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,23 +112,28 @@
"with that pass rather than with the sequential warm start it is named for."),

# --------------------------------------------------------------- L0 rescue / warm start
(r"^OPTION:--reject-collapsed-live-volume$", "PORT",
"AV live-volume collapse rejection. AV is wired in the LISA driver identically."),
(r"^FUNC:analyze_event\._reject_if_collapsed$", "PORT",
"Implementation of --reject-collapsed-live-volume."),
(r"^OPTION:--reject-collapsed-live-volume$", "PORTED",
"AV live-volume collapse rejection. AV is wired in the LISA driver identically. "
"NOTE the main driver calls its gate TWICE -- first run and replica pool -- and only "
"the first call exists here, because there is no pooling yet; the second MUST be "
"added with --mc-error-replicas or the flag is bypassed for the case pooling creates."),
(r"^FUNC:analyze_event\._reject_if_collapsed$", "PORTED",
"Hoisted to module level rather than nested, because this driver has TWO "
"analyze_event variants. The audit matches FUNC items on the bare name for exactly "
"this reason."),
(r"^OPTION:--sampler-sequential-warmstart$", "PORT",
"Warm-start each intrinsic point from the previous one's cloud. Applies whenever "
"--n-events-to-analyze>1, which LISA supports. Its snapshot/restore prerequisites "
"(Finding 5) already landed with the L0 rescue, so this is now capture + the "
"event-loop wiring only."),
(r"^OPTION:--sampler-sequential-warmstart-cover-frac$", "PORT",
"Coverage floor for the above; meaningless without it, so they travel together."),
(r"^OPTION:--sampler-anisotropic-bins$", "PORT",
(r"^OPTION:--sampler-anisotropic-bins$", "PORTED",
"AV per-axis bin counts during contraction. AV is wired in LISA, and the argument "
"for it is if anything stronger there: the LISA extrinsic axes are no more "
"isotropic than the ground-based ones, and a sky pair that localizes tightly "
"while distance stays broad is the exact case this exists for."),
(r"^OPTION:--sampler-(save|load)-state$", "PORT",
(r"^OPTION:--sampler-(save|load)-state$", "PORTED",
"AV live-volume state serialization. AV is wired in LISA; the state is the "
"sampler's own internal grid, so it carries no LIGO-specific convention."),
(r"^OPTION:--sampler-warmstart-(cover-frac|inflate)$", "PORT",
Expand Down Expand Up @@ -163,17 +168,18 @@
"is the ecliptic pair -- the grouping still makes sense, the docstring does not."),

# ------------------------------------------------------------------ portfolio plumbing
(r"^OPTION:--portfolio-", "PORT",
"mcsamplerPortfolio tuning. LISA wires the portfolio sampler and already accepts "
"--sampler-portfolio-args (an eval-able dict), so these are reachable today via "
"that escape hatch; porting them as first-class flags is pipeline parity, which is "
"what the pipe actually passes. Low risk, no physics."),
(r"^OPTION:--portfolio-", "PORTED",
"mcsamplerPortfolio freeze/allocation policy. Definitions copied verbatim and the "
"_freeze_policy_kwargs assembly is textually identical to the main driver's, so "
"unset options (None) stay out of the dict and the sampler keeps its own defaults. "
"--portfolio-varaha-can-freeze wins over --portfolio-varaha-never-freeze, as there."),

# ------------------------------------------------------------------- NF flow plumbing
(r"^OPTION:--nf-flow-(load|save)$", "PORT",
"Normalizing-flow persistence. Neither driver lists an NF method in "
"ok_lnL_methods (identical lists), so NF is reached only as a portfolio member -- "
"equally available to LISA. Low priority, but not LISA-specific in any way."),
"Normalizing-flow persistence is detector-agnostic, but the LISA portfolio factory "
"currently constructs only AV, GMM, and adaptive_cartesian_gpu members. Port the NF "
"member construction and route load/save to that member before exposing these flags; "
"hooks on the portfolio aggregate are a silent no-op because it has no flow API."),

# --------------------------------------------------------- extrinsic proposal handoff
(r"^OPTION:--extrinsic-proposal-output$", "PORT",
Expand Down
Loading