add-torch-shapes-example

โดย facebook

ใช้เมื่อเพิ่มโมเดล PyTorch ใหม่ลงในคลังตัวอย่างการติดตามรูปร่างของ Pyrefly ภายใต้ tensor-shapes/pyrefly-torch-stubs/examples — เช่น การนำเข้าโมเดลเป็น...

npx skills add https://github.com/facebook/pyrefly --skill add-torch-shapes-example

You are importing a PyTorch model into Pyrefly's example corpus at tensor-shapes/pyrefly-torch-stubs/examples/. This is the contribution case the porting skill describes: these ports are tested reference material that others read to learn the patterns, so produce its fuller deliverable — paste every artifact (audit table, per-local reveal_type dumps, typed-interface receipts, exhaustive assert_type coverage, completion report) in full, not just the annotated model.

Why these ports matter. They demonstrate what happens when you write a real PyTorch model with tensor shape types. Record the upstream repository and revision, exact files or dependency closure, concrete configuration, entry points, and train/eval/cache/export modes included. "Complete" means complete inside that declared boundary; list any omitted wrapper or mode rather than calling a representative core the full upstream model.

Start from evidence, not a blank page. Before editing, skim two or three existing examples with the closest architecture and mine the upstream source for shape comments, docstrings, reshape/einsum equations, runtime assertions, and tests. Treat that evidence as a hypothesis to verify with Pyrefly, not text to copy. The existing ports demonstrate that substantial real models normally reach useful shape coverage after a few checker-guided iterations.

Improving the stubs is the point, not a side quest. First distinguish a true stub gap from an unavailable overlay symbol, Any, a declared gradual return, third-party code, or unrepresentable dynamic construction. Fix genuine general stub gaps in the corpus case rather than hiding them in the model. A corpus port may retain a narrow precise cast, typed interface, or gradual boundary for heterogeneous containers, dynamic factories, mutable caches, or untyped external backends. Preserve every known public dimension and document the boundary. Propose, but do not perform, a runtime rewrite unless the user separately requests it.

1. Run the port

Do the actual porting by reading and following the add-shape-types-to-torch-model skill's SKILL.md (in tensor-shapes/skills/add-shape-types-to-torch-model/) end to end — its gated workflow (pre-flight gates → per-module loop → verification) is the algorithm.

The general skill has two setup choices; for corpus work both are already resolved, so do not stop to ask: use the Buck check below, and treat stub improvements as in scope. Produce all of the corpus artifacts it requests.

2. Place the file

Write the port at tensor-shapes/pyrefly-torch-stubs/examples/<model>.py. Every class, function, method, entry point, configuration, and mode inside the declared upstream boundary belongs in the port. Do not silently shrink that boundary when a difficult construct appears.

3. Verify (the fbsource commands)

The porting skill's verification phase tells you to run verify_port.sh and the actual Pyrefly check. Run these commands from the fbcode/pyrefly checkout root. First ensure the shared tensor-shapes virtual environment exists; add --fwdproxy when the host needs it:

python3 tensor-shapes/bootstrap_venv.py
buck build fbcode//pyrefly/tensor-shapes:torch-stubs-search-path
SEARCH_ROOT="$(buck targets --show-output fbcode//pyrefly/tensor-shapes:torch-stubs-search-path | awk '{print $2}')"
VENV="${TENSOR_SHAPES_VENV:-$HOME/.tensor-shapes-venv}"
SITE="$("$VENV/bin/python" -c 'import site; print(site.getsitepackages()[0])')"
buck run fbcode//pyrefly:pyrefly -- check --config /dev/null \
  --python-version 3.13 --search-path "$SEARCH_ROOT" \
  --site-package-path "$SITE" \
  tensor-shapes/pyrefly-torch-stubs/examples/<model>.py

If the model imports einops, also pass --search-path tensor-shapes/pyrefly-einops-stubs; otherwise an einops call can silently appear to preserve its input shape. The result must be 0 errors, with no leftover reveal_type.

Then run the corpus test target so the new example is covered by CI and checked with the real Torch fallback modules:

python3 tensor-shapes/pyrefly-torch-stubs/run_pyrefly.py --buck --suite torch-examples

If you hit a wrong or missing shape

When shape precision is missing, first distinguish among an unavailable symbol in the partial overlay, Any, a declared gradual Tensor, a third-party boundary, and a true stub-signature gap. Add or refine a general stub when that is the right fix. A corpus port may retain a documented boundary for unrepresentable dynamic construction; it should not hide an easily fixable stub gap.

A wrong shape (Pyrefly computes a concrete shape that's incorrect) or a missing shape that can't be expressed by a stub signature alone is a shape-DSL change: see the modify-shaped-array-dsl skill. That skill insists on unit-testing the DSL logic, not just relying on this example to exercise it. Don't reach for the DSL for shapes a stub signature could express.

Skills เพิ่มเติมจาก facebook

gc-safe-coding
facebook
สำหรับคำอธิบายและเหตุผลโดยละเอียด โปรดดูที่ doc/GCSafeCoding.md
app-review-prep
facebook
เตรียมแอป Meta สำหรับ App Review — ตรวจสอบสถานะปัจจุบัน ข้อกำหนดที่ค้างอยู่ สิทธิ์ที่ได้รับ และประวัติการส่ง ใช้ก่อนส่งแอป…
api-health
facebook
ตรวจสอบสุขภาพ API สำหรับแอป Meta — ตรวจสอบ rate limits, ปริมาณการเรียกใช้ และการเลิกใช้งาน API ใช้เพื่อวินิจฉัยการจำกัดการใช้งาน, วางแผนความจุ หรือเตรียมพร้อมสำหรับเวอร์ชัน API…
debug-webhooks
facebook
แก้ไขปัญหาเว็บฮุคสำหรับแอป Meta — ตรวจสอบการสมัครใช้งานที่ใช้งานอยู่ ระบุการตั้งค่าที่ผิดพลาด และส่งเพย์โหลดทดสอบเพื่อยืนยันการส่งมอบ ใช้เมื่อ…
api-integration
facebook
แนะนำนักพัฒนาในการตั้งค่าการเชื่อมต่อ Meta API ตั้งแต่เริ่มต้น — ค้นหา API ที่เหมาะสม ดึงคู่มือการตั้งค่า ข้อกำหนดการยืนยันตัวตน…
webhook-setup
facebook
ตั้งค่าเว็บฮุคสำหรับแอป Meta แบบครบวงจร — ค้นหาหัวข้อที่มีให้เลือก สมัครรับฟิลด์ และตรวจสอบด้วยเพย์โหลดทดสอบ ใช้เมื่อกำหนดค่าเว็บฮุคสำหรับ…
test-ui
facebook
ทดสอบระบบ UI (PanelUI, ScreenSpace) กับตัวอย่าง poke โดยใช้ iwsdk CLI
flags
facebook
ตรวจสอบและเปรียบเทียบสถานะฟีเจอร์แฟลกข้ามช่องทางการเผยแพร่ของ React ดูแฟลกทั้งหมดในทุกช่องทาง (www, www-modern, canary, next, experimental, rn variants) หรือเปรียบเทียบเฉพาะช่องทางด้วย --diff รูปแบบผลลัพธ์ประกอบด้วยมุมมองตารางเริ่มต้น, การส่งออก CSV, และการจัดกลุ่มสถานะการทำความสะอาด สถานะแฟลกแสดงด้วยสัญลักษณ์: เปิดใช้งาน (✅), ปิดใช้งาน (❌), ทดสอบรูปแบบต่างๆ (🧪), เฉพาะการทำโปรไฟล์ (📊) ข้อผิดพลาดทั่วไป: แฟลก __VARIANT__ ถูกทดสอบในทั้งสองสถานะบน www; ใช้ --diff เพื่อค้นหาความหมาย...