fix(sp5): Task A6 — close two minor review findings
Combined spec/quality review caught two minor issues in the Pearl 6 commit. Both are mechanical fixes; no behavior change. 1. Test 12 (pearl_6_kelly_within_fold_ewma_blend) was missing an explicit assertion for slot 282 (TRADE_VAR_SMOOTH_IDX). The test setup initialized tvar_i32 and the launcher passed it through the kernel's parameter slot, but no assert! ever fired against the resulting ISV value. With n_envs=1, the kernel's `(kelly_count > 1) ? variance : 0.0f` branch returns 0 (no cross-env variance possible with 1 env), so EWMA blend yields 0.99 × 0.5 + 0.01 × 0.0 = 0.495. Added the missing assertion to close the within-fold coverage gap for s==2. 2. pearl_6_kelly_kernel.cu:136 doc comment said the slot computes "standard deviation of per-env Kelly fractions" but the code actually computes `ksum_sq / kelly_count` — i.e. the variance (second moment), not the standard deviation. The slot name TRADE_VAR_SMOOTH_INDEX correctly indicates variance; the comment was wrong. Updated comment to match: 'variance of per-env Kelly fractions' with explicit note that this is the second moment, NOT std-dev (no sqrtf applied). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -133,8 +133,10 @@ extern "C" __global__ void pearl_6_kelly_update(
|
||||
new_obs = current;
|
||||
|
||||
} else if (s == 2) {
|
||||
/* trade_var_smooth: variance proxy — standard deviation of per-env Kelly
|
||||
* fractions across envs (measures cross-env PnL dispersion).
|
||||
/* trade_var_smooth: variance of per-env Kelly fractions across envs
|
||||
* (measures cross-env PnL dispersion). Computed as the second moment
|
||||
* `ksum_sq / kelly_count` — i.e. variance, NOT standard deviation;
|
||||
* matches the slot name TRADE_VAR_SMOOTH_INDEX.
|
||||
* Second pass over envs: same Bayesian-prior formula, accumulate sq-dev. */
|
||||
float kelly_mean = (kelly_count > 0)
|
||||
? (kelly_sum / (float)kelly_count)
|
||||
|
||||
@@ -1669,6 +1669,15 @@ fn pearl_6_kelly_within_fold_ewma_blend() {
|
||||
let expected_lr = 0.99 * 0.5 + 0.01 * (5.0_f32 / 15.0);
|
||||
assert!((isv[LOSS_RATE_SMOOTH_IDX] - expected_lr).abs() < 2e-5,
|
||||
"loss_rate: expected {expected_lr:.6}, got {:.6}", isv[LOSS_RATE_SMOOTH_IDX]);
|
||||
|
||||
// slot 282 — trade_var_smooth: variance of per-env Kelly fractions across envs.
|
||||
// With n_envs=1, kelly_count=1, the kernel's `(kelly_count > 1) ? var : 0.0f`
|
||||
// branch returns 0.0 (single-env can't have cross-env variance).
|
||||
// EWMA blend: 0.99 × 0.5 + 0.01 × 0.0 = 0.495.
|
||||
let expected_tvar = 0.99 * 0.5 + 0.01 * 0.0_f32;
|
||||
assert!((isv[TRADE_VAR_SMOOTH_IDX] - expected_tvar).abs() < 2e-5,
|
||||
"trade_var: expected {expected_tvar:.6} (n_envs=1 → variance=0; EWMA blend with prior 0.5), got {:.6}",
|
||||
isv[TRADE_VAR_SMOOTH_IDX]);
|
||||
}
|
||||
|
||||
/// SP5 Task A6 Test 13: cross-fold sample_count persists via max().
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user