Expose the source a read resolves to: period, branch, tier and whether it is an input
メンテナーはふだん 3 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- Python
- スター
- 22
- フォーク
- 30
- 平均マージ
- 4日 16時間
- マージ済み PR(30日)
- 35
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
PolicyEngine/policyengine-core のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
PolicyEngine/policyengine-core#605 · コメント 1 件 ·
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
PolicyEngine/policyengine-core#549 ·
メンテナーはふだん 3 日以内に返信
-
`restore_simulation` silently drops memberless group entities対応中かも @Adelagric が 46 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
PolicyEngine/policyengine-core#547 ·
メンテナーはふだん 3 日以内に返信
-
subsample reloads calculated values as inputs, so a reform's baseline reads the reform's resultsオープン
難易度 4/5 3〜5日 初心者へのやさしさ 40/100
PolicyEngine/policyengine-core#633 ·
メンテナーはふだん 3 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
PolicyEngine/policyengine-core#632 ·
メンテナーはふだん 3 日以内に返信
PolicyEngine/policyengine-core の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
UKGovernmentBEIS/optstop#10 ·
-
maintenance
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
pollen-robotics/reachy_mini#1508 ·
メンテナーはふだん 1 日以内に返信
-
[BUG] `cloud-keys.env` values retain enclosing quotes causing 401 Unauthorized, and missing utf-8 encoding crashes on Windows対応中かも @divyanshu07-code が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
open-jarvis/OpenJarvis#1192 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
sylvainmetayer/homelab#851 ·
メンテナーはふだん 1 日以内に返信