You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PUF entity leaves: partnership loss over-imputed (1.20x mass, 1.31x returns), S-corp loss under-imputed (0.71x); decide calibration before Table 1.4 entity legs bind #1265
PR #1261 (#1258) gives the US PUF donor separate partnership and S-corporation leaves. A Modal PUF-support base built with it (run entity-split-1258-base-d239b0f77b7a) shows the two entities' loss legs imputed with opposite errors.
On the PUF-clone half (89.76M weight), imputed against the donor scaled per unit weight (×89.76/161.18), at base weights:
Leaf
Net
Income mass
Loss mass
Income returns
Loss returns
partnership_income
0.96
1.03
1.20 (+$9.9B)
1.30
1.31
s_corp_income
1.09
1.04
0.71 (−$10.5B)
1.03
1.07
line 32 (P+S)
1.05
1.04
1.00
Line 32's loss mass is right only because the two errors cancel. #1251's single combined leaf ran 1.21 / 1.22 / 1.26.
Neither leaf is in _PUF_TAX_DETAIL_SIGNED_MASS_CALIBRATED_PERSON_OUTPUTS (us_runtime/puf_support.py). The comment above that set describes exactly this pattern: the QRF sign gate over-predicts the rarer leg. The passive subset, which is in the set, matches the donor exactly.
Why it can wait, and when it can't. Nothing binds the entity loss legs today: the pinned feed carries no Table 1.4 partnership or S-corp legs. Once PolicyEngine/chronicle#180 lands, partnership_net_loss_{amount,returns} and s_corporation_net_loss_{amount,returns} bind each entity's own leaf. The weight solve would then have to absorb both errors by reweighting, which distorts other margins.
Each needs a Modal base before/after. The evidence and scripts are in ~/PolicyEngine/_reviews/puf-entity-split/ (out/compare_bases.json, scripts/modal_compare_bases.py).
Blocked on #1261 merging; decide before chronicle#180's legs enter the pinned feed.
Activity