Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

US year-file cuts can pair one cut's tables with another's stamp, and the stamp lacks the year

Đang mở
#607 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
data

Hướng nghiên cứu

Start in tax_benefit_models.us.datasets.create_datasets and compare it with the UK path that #601 changed, which uses policyengine.provenance.year_file_stamp.temporary_year_file and publish_year_file. Port that write-to-temp, re-check, stamp, os.replace flow to the US create path, and add "year" to the stamp by raising legacy_inputs.YEAR_FILE_STAMP_REVISION to 3 and passing the year into year_file_stamp_problem. Update docs/microsim.md "Year files". The work is done when a failed or interleaved cut leaves existing year files intact and a copied year file fails the check.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Problem

tax_benefit_models.us.datasets.create_datasets writes each US year file at its final path and stamps it afterwards (#593). Two problems follow.

Interleaved cuts mix one cut's tables with another's stamp. Two processes cutting the same year files in one data folder can interleave:

  1. P1 saves the tables of pop_year_2026.h5.
  2. P2 saves its own tables there, then stamps them.
  3. P1 stamps the file.

The file then holds P2's tables under P1's stamp. Every later ensure_datasets in P1's environment takes the file as current and reuses it. This happens, for example, when two sources share a name (two pop.h5 files) or when two environments with different package versions share a data folder.

A failed cut destroys good year files. When the source changes mid-cut (DatasetMaterializationError), or any later step fails, the year files already at those paths have been overwritten and left unstamped.

The stamp lacks the year. A year file copied or renamed to another year's name passes the check and is taken for that year.

The independent review of #601 found the first two problems for UK year files. #601 fixed them there with policyengine.provenance.year_file_stamp.temporary_year_file / publish_year_file, and added the year to the UK stamp.

Fix

Port #601's approach to the US create path:

  • Write each year file, with its tables and renames record, to a hidden temporary file beside its path.
  • Re-check the source, then stamp each temporary file and os.replace it onto its path.
  • Remove the temporaries in a finally.
  • Record "year" in the US stamp. This raises legacy_inputs.YEAR_FILE_STAMP_REVISION to 3, and year_file_stamp_problem takes the year.
  • Saved outputs that record a year-file stamp (#594) follow the revision.
  • Update docs/microsim.md "Year files", where the "takes no lock" limit changes.
Ngôn ngữ chính
Python
Star
8
Fork
10
Merge trung bình
21 giờ 4 phút
Pull request đã merge (30 ngày)
43

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của PolicyEngine/policyengine.py

Tất cả issue của PolicyEngine/policyengine.py

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.