Multi-period inputs in a variable's own unit: helper skipped, uprating base, storage aliasing
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
Start in holder.py at Holder.set_input and trace how multi-period inputs reach the variable helper and storage. Use tests/fixtures/uprating_order.py and the existing year_input_without_helper tests referenced from #562 to compare current behavior. Done means the recommended B+C+E behavior is covered while existing period-based reads remain valid.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What happens
A variable stores an input for a period several units long in its own unit as given. Examples are year:2012:2 for a yearly variable and month:2012-01:3 for a monthly one. Holder.set_input calls the variable's set_input helper only when the input's unit differs from the variable's (holder.py, period.unit != self.variable.definition_period). So the key year:2012:2 is stored even for a variable whose helper is set_input_divide_by_period.
Auto-carry-over and uprating then read that key as the variable's value in each year it covers. Four consequences follow. All four were executed on #563's head with the test fixtures in tests/fixtures/uprating_order.py, using index values of 100 × 1.037^(year − 2010):
- The helper is skipped.
uprated(helperset_input_divide_by_period) givenyear:2012:2 = 100storesyear:2012:2, not2012and2013at 50 each.carried(no uprating, same helper) given the same input carries 100 into 2013 and 2014. - Uprating within the covered span.
uprated_any_unitgiven onlyyear:2012:2 = 1returns 1.037 for 2013, a year the input covers. The uprating factor runs from the source'sstart(2012), not from the last year it covers. - An input starting on the requested period is not an uprating source. Uprating takes only inputs that start before the period. Given
2011 = 1andyear:2012:2 = 5, 2012 gets 2011's input uprated (1.037), not 5. Auto-carry-over would carry 5. Given onlyyear:2012:2 = 5, 2012 gets 5 with auto-carry-over and the default (0) without it, while 2013 gets 5 × 1.037 either way. - Ties between inputs that start on the same day (
2012andyear:2012:2) used to go to whichever was stored first. PR #582 fixes that one: it takes the one that ends last, the same order auto-carry-over uses (#562). - A period whose string form is another period's. Storage keys are period strings, and
str(period("month:2012-01:12"))is"2012". So a twelve-month input from January to a monthly variable is stored as the year 2012 and read back as a yearly period.uprated_monthlygivenmonth:2012-01:12 = 7storesPeriod(('year', 2012-01-01, 1)). With auto-carry-over it then carries 7 unchanged to 2013-03, because a yearly period is never a monthly variable's uprating source. Without auto-carry-over it returns 0 for 2012-02, a month the input covers.
Exposure
None known. PE-US's eCPS and PE-UK's Enhanced FRS store single years only: the eCPS h5 has period keys 2024 and 2025, and PE-UK's loader calls set_input(variable, year, …) for each year in dataset.years. Neither repository's source or YAML tests set a multi-period variable input. Every year:…:N string in either repository is a parameter update.
Options
- A. Leave it. Multi-period own-unit inputs keep today's semantics (#582 makes ties deterministic).
- B. Call the helper for any multi-period input (
period.size > 1), so a variable with a helper splits or copies it into single periods. Helper-less variables still store it as given. - C. Uprate a multi-period source from the start of its last own-unit sub-period, and treat an own-unit input that starts at the requested period as a source (
<=, the auto-carry-over rule). This fixes items 2 and 3. Within a covered span the factor is then 1, which is what auto-carry-over gives. - D. Reject multi-period inputs for helper-less variables (a
PeriodMismatchErrorin_set). Combined with B, no multi-period own-unit key is ever stored, and items 1–4 cannot arise. This breaks code that reads such inputs back by their own period: #562'syear_input_without_helpertests do, throughcalculate_add(…, "year:2012:2"). - E. Key storage by the period itself (or a canonical form that keeps the unit and size), not by
str(period). This fixes item 5 whatever is chosen above.
Recommendation: B + C + E. They keep every stored input readable, match what the helper is for, make uprating agree with auto-carry-over within a covered span, and stop one period being stored as another. Because no country package stores such inputs today, results do not change.
🤖 Generated with Claude Code
- Lingua principale
- Python
- Stelle
- 22
- Fork
- 30
- Merge medio
- 2g 21h
- PR unite (30g)
- 24
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di PolicyEngine/policyengine-core
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
PolicyEngine/policyengine-core#605 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
PolicyEngine/policyengine-core#549 ·
I maintainer di solito rispondono entro 2 giorni
-
`restore_simulation` silently drops memberless group entitiesForse già presa @Adelagric l’ha presa 32 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
PolicyEngine/policyengine-core#547 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
PolicyEngine/policyengine-core#609 ·
I maintainer di solito rispondono entro 2 giorni
-
Every new system compiles its variable files again, which sys.monitoring coverage retainsForse già presa @MaxGhenis l’ha presa 1 giorno fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
PolicyEngine/policyengine-core#607 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di PolicyEngine/policyengine-core
Issue simili
-
Consolidate the now-identical CLI-native and composed tasks_packages guards (#5945 follow-up)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
spec-kitty/spec-kitty#6112 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedForse già presa @Mrun25 l’ha presa oggi. Apertabug llm translation
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
BerriAI/litellm#46095 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
uberdeveloper/fastbt#29 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
andrew-blake/melcloudhome#368 ·
I maintainer di solito rispondono entro 1 giorno
-
lane:discover
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
SPARDiffData/differential-data-collection#33 ·
I maintainer di solito rispondono entro 1 giorno