Expose the source a read resolves to: period, branch, tier and whether it is an input
I maintainer di solito rispondono entro 3 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 28/100
Direzione di ricerca
Start in holders/holder.py: read get_array/_readable_branches (305–352, 665–687), _stores_user_input (262–285), _seed_input_storage (214–240), and the _set/put_in_cache input-location handling (242–260, 544–609). Then trace carry logic in simulations/simulation.py (143–162, 1221–1236) and the deletion behavior in data_storage/in_memory_storage.py (305–321). Done means a side-effect-free Holder.read_source(period, branch_name) returning period, carried, branch, tier, derived and is_input, with tests for the listed cases and the calculate differential.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
Country packages need to know whether the value core returns for a variable is an input someone supplied, and today they can only find out by copying core's read logic from private members. policyengine-uk's plan for deterministic draws needs three facts for a (variable, period, branch):
- The slot
Holder.get_arrayreads. That is the first branch in_readable_branchesthat stores the period, reading memory before disk (holders/holder.py:305–352,:665–687). - The carry source, where that slot is empty or derived. That is the latest of
get_input_periods(branch)starting at or before the period, ranked by_latest_input_key(simulations/simulation.py:143–162,:1221–1236). - Whether the value in that tier is an actual input. That comes from
_user_input_storage's locations, or the storage mark for a restored or register-only input (_stores_user_input,holders/holder.py:262–285;_seed_input_storage,:214–240).
The input record alone can't answer the third question at 3.32.27:
- A same-slot overwrite.
put_in_cache(value, period, branch)with its defaultderived=False, over an input in the same slot, replaces the array._setthen drops that tier from the slot's input locations (:242–260,:544–609), but_user_input_keyskeeps the key, andget_input_periodsstill counts the period. Core itself always passesderived=True(simulations/simulation.py:1115,:1266,:1350,:1383), so this value comes from a caller. - A child branch's shadow. A child branch's non-derived value hides a parent's input for the same period, while the key names the parent.
Deleting derived caches to force a recompute isn't a safe workaround. InMemoryStorage.delete removes every period that the given one contains on that branch (data_storage/in_memory_storage.py:305–321), so it can remove supplied inputs.
Proposal
Add a public, read-only method, for example Holder.read_source(period, branch_name="default"). It returns None when nothing reaches the period, and otherwise a small record:
period: the stored period core reads, in storage form (_storage_period). That is the requested slot, or the carry source.carried: whetherperiodis the carry source rather than the requested slot.branchandtier("memory"or"disk").derived: the storage mark.is_input: whether that tier still holds the valueset_inputstored there, by_stores_user_input's rule.
The method must change nothing in storage or in any cache. It covers the pass-through path only: a variable with no formula, uprating, defined_for, adds or subtracts, calculate_output or requires_computation_after, requested at its definition period and one period long. Outside that path it raises.
Tests
- Cases: a same-slot
derived=Falseoverwrite, a child branch's shadow, memory over disk, restored and register-only inputs, clones, inputs at several units, and two inputs that start on the same day. - A differential: on the pass-through path, where no derived value stands in the slot, the array at
read_source's answer equalscalculate's.
Context
policyengine-uk's deterministic rules engine plan reads required draws through a helper built on these facts. It uses the private members, pinned by tests, until a public method exists. The cross-country approach (pe-us) states presence as "core's read resolves to an actual input" and points to this issue.
- Lingua principale
- Python
- Stelle
- 22
- Fork
- 30
- Merge medio
- 4g 16h
- PR unite (30g)
- 35
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 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
PolicyEngine/policyengine-core#549 ·
I maintainer di solito rispondono entro 3 giorni
-
`restore_simulation` silently drops memberless group entitiesForse già presa @Adelagric l’ha presa 46 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
PolicyEngine/policyengine-core#547 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
PolicyEngine/policyengine-core#632 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
Remove the Reform and chart functions that call the Public APIForse già presa @anth-volk l’ha presa 5 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
PolicyEngine/policyengine-core#628 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di PolicyEngine/policyengine-core
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
-
query rewriting: prompt says "Language for `query` field: None" when language detection failsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
ocr_data_to_elements() raises AttributeError when a layout element is a ListForse già presa @Eapp1e l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
Unstructured-IO/unstructured#4616 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
area:codegen backend:metal bug direction:output
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno