geoprior.models.subsidence.debugs#
Debug helpers for GeoPriorSubsNet.
Keep all verbosity + shape/unit printing here so _geoprior_subnet.py stays clean.
All functions are safe to call inside tf.function: they use tf.print and TensorFlow assertions. - Compare in-memory vs loaded inference model on the same batch. - Report prediction diffs + weight name/shape diffs + key attribute digests.
Functions
|
|
|
Debug non-finite checks for call() internal tensors. |
|
Print non-finite diagnostics inside call(). |
|
|
|
Assert finite, return x (small helper). |
|
|
|
|
|
|
|
Debug dt conversion and t-grid sanity. |
|
Print dt consistency checks in time_units and seconds. |
|
Print RMS diagnostics for spatial head gradients and Darcy-like flux terms K*∂h/∂x, K*∂h/∂y (raw coord units). |
|
Print GW residual diagnostics before/after applying sec_u scaling. |
|
Print batch MAE for y vs yhat. |
|
Return True if verbose is strictly above level. |
|
Print max-abs diagnostics for the divergence terms, before and optionally after normalization/chain-rule correction. |
|
Run fn() only at optimizer.iterations == 0. |
|
Select a quantile slice if y is (B,H,Q,1)/(B,H,Q). |
|
Print min/max/mean (graph-safe). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Print raw residual stats + scaling factors. |
|
|
|
|
|
Print Q source term block. |
|
|
|
|
|
|
|
Debug block for residuals + scaling stats. |
|
|
|
Debug-print loss scalars (only those provided). |
|
|
|
|
|
Run a compact reload debug on one batch and return a dict report. |
|
Stable digest of model.scaling_kwargs to verify the same config survived reload. |
|
Compare weights between two models using stable keys. |
- geoprior.models.subsidence.debugs.weight_diff_report(m1, m2, *, top=30, include_ok=False, include_extra=False)[source]#
Compare weights between two models using stable keys.
- Each row is:
(max_abs_diff or inf, tag, weight_id, shape_info)
- Where tag in:
{“OK”, “MISSING”, “SHAPE”, “EXTRA”}
Notes
Uses w.path when available (best).
Otherwise uses name + occurrence index.
Set top<=0 to return all rows.
- geoprior.models.subsidence.debugs.model_scaling_digest(model)[source]#
Stable digest of model.scaling_kwargs to verify the same config survived reload.
- geoprior.models.subsidence.debugs.debug_model_reload(mem_model, load_model, dataset, *, pred_key='subs_pred', also_check=None, top_weights=30, atol=1e-06, rtol=1e-06, log_fn=None)[source]#
Run a compact reload debug on one batch and return a dict report.
Compares predictions (max/mean abs diff) for pred_key (+ optional keys).
Compares weights by name (MISSING/SHAPE/OK).
Compares scaling_kwargs digest + time_units attribute.
- geoprior.models.subsidence.debugs.dbg_on(verbose, level)[source]#
Return True if verbose is strictly above level.
- geoprior.models.subsidence.debugs.dbg_run_first_iter(*, verbose, level, iterations, fn)[source]#
Run fn() only at optimizer.iterations == 0.
Graph-safe: uses tf.cond and returns a dummy scalar.
- geoprior.models.subsidence.debugs.dbg_stats(tag, x)[source]#
Print min/max/mean (graph-safe).
- Parameters:
tag (str)
x (Tensor)
- Return type:
None
- geoprior.models.subsidence.debugs.dbg_pde_divergence_maxabs(*, verbose, raw_dKdhx_dcoords, raw_d_K_dh_dx_dx, raw_d_K_dh_dy_dy, d_K_dh_dx_dx=None, d_K_dh_dy_dy=None, level=7, prefix='pde/div')[source]#
Print max-abs diagnostics for the divergence terms, before and optionally after normalization/chain-rule correction.
- geoprior.models.subsidence.debugs.dbg_gw_units_and_sec_scale(*, verbose, gw_units, gw_res_before, gw_res_after, level=7, prefix='gw/units')[source]#
Print GW residual diagnostics before/after applying sec_u scaling.
- Call this right after you do:
gw_res_before = gw_res gw_res = gw_res * sec_u gw_res_after = gw_res
- Parameters:
- Return type:
None
Notes
We print RMS to catch accidental unit explosions.
- geoprior.models.subsidence.debugs.dbg_mae(tag, y, yhat)[source]#
Print batch MAE for y vs yhat.
- Parameters:
tag (str)
y (Tensor)
yhat (Tensor)
- Return type:
None
- geoprior.models.subsidence.debugs.dbg_chk_finite(tag, x)[source]#
Assert finite, return x (small helper).
- Parameters:
tag (str)
x (Tensor)
- Return type:
Tensor
- geoprior.models.subsidence.debugs.dbg_step0_inputs_targets(*, verbose, inputs, targets, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step2_coords_checks(*, verbose, coords, inputs, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_units_once(*, verbose, iterations, targets, gwl_pred_final, s_pred_final, quantiles, level=7)[source]#
- geoprior.models.subsidence.debugs.dbg_assert_data_layout(*, verbose, data_final, data_mean_raw, quantiles, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step3_mean_head(*, verbose, gwl_mean_raw, gwl_si, h_si, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step31_forward_outputs(*, verbose, data_final, s_pred_final, gwl_pred_final, data_mean_raw, phys_mean_raw, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step33_physics_logits(*, verbose, K_logits, Ss_logits, dlogtau_logits, Q_logits, K_base, Ss_base, dlogtau_base, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step33_physics_fields(*, verbose, K_field, Ss_field, tau_field, tau_phys, Hd_eff, delta_log_tau, logK, logSs, log_tau, log_tau_phys, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step4_ad_raw(*, verbose, dh_dcoords, dh_dt_raw, dh_dx_raw, dh_dy_raw, K_dh_dx, K_dh_dy, dKdhx_dcoords, dKdhy_dcoords, d_K_dh_dx_dx_raw, d_K_dh_dy_dy_raw, dK_dcoords, dSs_dcoords, dK_dx_raw, dK_dy_raw, dSs_dx_raw, dSs_dy_raw, level=12)[source]#
- Parameters:
verbose (int)
dh_dcoords (Tensor)
dh_dt_raw (Tensor)
dh_dx_raw (Tensor)
dh_dy_raw (Tensor)
K_dh_dx (Tensor)
K_dh_dy (Tensor)
dKdhx_dcoords (Tensor)
dKdhy_dcoords (Tensor)
d_K_dh_dx_dx_raw (Tensor)
d_K_dh_dy_dy_raw (Tensor)
dK_dcoords (Tensor)
dSs_dcoords (Tensor)
dK_dx_raw (Tensor)
dK_dy_raw (Tensor)
dSs_dx_raw (Tensor)
dSs_dy_raw (Tensor)
level (int)
- Return type:
None
- geoprior.models.subsidence.debugs.dbg_step41_si_grads(*, verbose, dh_dt, d_K_dh_dx_dx, d_K_dh_dy_dy, dK_dx, dK_dy, dSs_dx, dSs_dy, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step6_consolidation(*, verbose, allow_resid, cons_active, s_mean_raw, s_pred_si, dt_units, s0_cum_11, s_inc_pred, s_state, h_ref_si_11, h_state, cons_step_m, cons_res)[source]#
- geoprior.models.subsidence.debugs.dbg_step7_residuals(*, verbose, gw_res, prior_res, smooth_res, loss_mv, bounds_res, loss_bounds, level=12)[source]#
- geoprior.models.subsidence.debugs.dbg_step8_scaling(*, verbose, cons_res_raw, gw_res_raw, cons_res, gw_res, level=7)[source]#
- geoprior.models.subsidence.debugs.dbg_chk_core_finite(*, verbose, cons_res, gw_res, tau_field, K_field, Ss_field, level=2)[source]#
- geoprior.models.subsidence.debugs.dbg_step9_losses(*, verbose, data_loss=None, loss_cons=None, loss_gw=None, loss_prior=None, loss_smooth=None, physics_loss_raw=None, physics_loss_scaled=None, total_loss=None, level=7)[source]#
Debug-print loss scalars (only those provided).
- geoprior.models.subsidence.debugs.dbg_step10_grads(*, verbose, trainable_vars, grads, level=9)[source]#
- geoprior.models.subsidence.debugs.dbg_term_grads_finite(*, verbose, debug_grads, trainable_vars, data_loss, terms_scaled, tape, level=1)[source]#
- geoprior.models.subsidence.debugs.dbg_done_apply_gradients(*, debug_grads=False, verbose=1)[source]#
- geoprior.models.subsidence.debugs.dbg_select_q(y, quantiles, *, q=0.5)[source]#
Select a quantile slice if y is (B,H,Q,1)/(B,H,Q).
If quantiles is None, returns y as-is.
- geoprior.models.subsidence.debugs.dbg_step5_q(*, verbose, Q_si, dh_dt, level=12)[source]#
Print Q source term block.
- geoprior.models.subsidence.debugs.dbg_step8_residual_scale_stats(*, verbose, level=3, cons_res_raw, cons_scale, gw_res_raw, gw_scale)[source]#
Debug block for residuals + scaling stats.
- Replaces:
_stats(“cons_res_raw”, cons_res) _stats(“cons_scale”, scales[“cons_scale”]) _stats(“gw_res_raw”, gw_res) _stats(“gw_scale”, scales[“gw_scale”])
- geoprior.models.subsidence.debugs.dbg_dt_debug(*, verbose, level=3, time_units, dt_units, t)[source]#
Debug dt conversion and t-grid sanity.
Replaces the “dt debug” block.
- geoprior.models.subsidence.debugs.dbg_call_nonfinite(*, verbose, level=9, coords_for_decoder, H_si, K_base, Ss_base, dlogtau_base, tau_field)[source]#
Debug non-finite checks for call() internal tensors.
- Replaces:
tf_print_nonfinite(“call/coords_for_decoder”, coords_for_decoder) …
- geoprior.models.subsidence.debugs.dbg_step3_residual_scales(*, verbose, cons_res, gw_res, scales, level=3)[source]#
Print raw residual stats + scaling factors.
- geoprior.models.subsidence.debugs.dbg_dt_diag(*, verbose, time_units, dt_units, t, level=3)[source]#
Print dt consistency checks in time_units and seconds.
- geoprior.models.subsidence.debugs.dbg_call_nonfinite_diag(*, verbose, coords_for_decoder, H_si, K_base, Ss_base, dlogtau_base, tau_field, level=9)[source]#
Print non-finite diagnostics inside call().
- geoprior.models.subsidence.debugs.dbg_gw_grad_flux_rms(*, verbose, dh_dx_raw, dh_dy_raw, K_field, level=3, prefix='gw/gradflux')[source]#
Print RMS diagnostics for spatial head gradients and Darcy-like flux terms K*∂h/∂x, K*∂h/∂y (raw coord units).
- Replaces:
tf_print(“to_rms(dh_dx)=”, to_rms(dh_dx_raw)) tf_print(“to_rms(dh_dy)=”, to_rms(dh_dy_raw)) tf_print(“to_rms(K_field * dh_dx)=”, to_rms(K_field * dh_dx_raw)) tf_print(“to_rms(K_field * dh_dy)=”, to_rms(K_field * dh_dy_raw))